분류 전체보기
-
내장 웹 서버 이해Spring/Spring Boot 2020. 5. 2. 23:53
스프링 부트의 main 메서드에서 Application.run을 하면 웹 서버가 뜨는 것은 스프링 부트를 경험해 봤다면 알고 있을 것이다. 그러면 스프링 부트 자체가 웹 서버일까? 아니다. 스프링 부트는 내장 서블릿 컨테이너를 쉽게 사용하게 해 주고 스프링 프레임워크를 쉽게 사용하게 해주 는하나의 툴이다. 그리고 이 서블릿 컨테이너라 불리는 톰캣, 제티, 언더토 등이 웹 서버이다. 그리고 이 서블릿 컨테이너들은 자바 코드 로 서버를 만드는 기능을 제공한다. 그러면 어떻게 스프링 부트가 톰캣을 띄어줄 수 있는 걸까? 이는 스프링 부트의 자동설정과 관련이 있다. 톰캣, 서블릿 등이 자동 설정으로 등록이 되기 때문에 스프링 부트 App을 실행하면 톰캣이 만들어지고 서블릿이 추가가되는 등 App이 잘 뜨게 되는..
-
리소스 핸들러Spring/Spring MVC 2020. 5. 2. 23:10
리소스 핸들러는 이미지, JS, CSS, HTML 등의 정적인 리소스를 처리하는 핸들러이다. 이 핸들러는 서블릿 컨테이너 ( 톰캣 , 제티 등 )가 기본으로 제공하는 Default 서블릿 이며 이미 등록이 되어있다. 스프링은 이렇게 등록돼있는 디폴트 서블릿에 이 요청을 위임해서 정적인 리소스를 처리한다. 그런데 정적인 리소스 핸들러가 요청을 먼저 다 가로챈다면 우리가 만든 핸들러들은 무시될 것이다. 즉 우리가 만든 핸들러들이 우선순위가 더 높아야 하기 때문에 기본적으로 리소스 핸들러의 우선순위는 낮다. 스프링 부트를 쓰고 있다면 아무런 설정 없이도 기본 정적 리소스 핸들러와 캐싱 기능을 제공한다. 그 디렉터리 중 하나가 static 디렉터리이다. static 디렉터리 안에 index html 파일을 만들..
-
kubernetes Tutorials 3. Pods 와 NodesDevOps/Kubernetes 2020. 5. 1. 03:13
학습 목표 1. 쿠버네티스 Pods 가 무엇인지 2. 쿠버네티스 Nodes가 무엇인지 3. 배포한 App에 트러블 슈팅하는 방법 Kubernetes Pods 란? 앞 시간에 Deployment를 만들었고 쿠버네티스는 Pods를 만들어서 이 App 인스턴스를 호스팅 해주게 된다. 하나 또는 여러 App 컨테이너 그룹을 추상화 한 개념이 이 Pods이다. 도커 같은 컨테이너 뿐 아니라 그런 컨테이너들이 사용하는 리소스들 까지 통틀어서 Pods라는 개념이 되는 것이다. 리소스들에는 Shared storage, 볼륨, 네트워킹, Pods하나 당 IP address, 이미지 버전이나 컨테이너들이 사용하는 포트 등 이 있다. Pods는 App에 특화된 논리적인 호스트를 모델링한 것이다. 따라서 여러 다른 App 컨..
-
싱글턴 패턴( Singleton Pattern ) 과 static - Java 디자인 패턴JAVA/Java Design Patterns 2020. 4. 28. 20:58
싱글톤 패턴이란? 싱글턴 패턴은 일부 사람들이 static은 전역 변수와 같아 보이고 객체 지향이 아니라는 주장에 이러한 비판을 해결하고자 나왔다고 볼 수 있다. 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하고 공유하는 제한하는 패턴 즉, 싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하고 공유하는 디자인 패턴이다. 인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것! 다음과 같은 조건을 충족하는 개체에 적합하다. 1. 프로그램 실행 중에 최대 하나만 있어야 할 때 2. 이 객체에 전역적인 접근이 가능해야 할때 좋은 예시는 Logger 가 있겠다. Logger는 싱글톤으로 만들어서 error..
-
핸들러 인터셉터Spring/Spring MVC 2020. 4. 28. 00:28
어떤 핸들러의 요청처리 전 후로 부가적인 작업을 하고 싶다면 핸들러 인터셉터를 만들어서 사용할 수 있다. 이 핸들러는 hello에 대해 요청처리 후 뷰 렌더링이 되는 핸들러이다. 이 핸들러의 요청을 처리하기 전에 PreHandle 전처리 작업과 요청을 처리한 후 뷰 렌더링 처리 직전 postHandler 처리가 가능하다. 뷰 랜더링 까지 완전히 끝난 이후에도 afterCompletion 으로 전후 처리의 템플릿을 제공하고 있다. * 서블릿 필터와 비슷하지만 좀 더 구체적인 것 같다. 핸들러 인터셉터는 preHandle시 true나 false를 return 하게 되는데 true 시 이 다음 핸들러가 쭉 진행되고 false 시 응답 처리를 끝내고 다음 핸들러로 가지말고 요청 처리를 끝내라는 것을 의미한다. ..
-
kubernetes Tutorials 2. kubectl을 사용해서 배포하기DevOps/Kubernetes 2020. 4. 27. 21:39
목표 : kubectl을 통해 App을 쿠버네티스에 배포해보자 쿠버네티스 배포 일단 동작하는 쿠버 네티스 클러스터가 있으면 컨테이너화 App을 그 위에다 배포할 수 있다. 그렇게 하려면 쿠버 네티스 배포 설정을 만들어야 한다. 배포 설정은 쿠버 네티스가 어떻게 그 App의 인스턴스들을 만들고 갱신해야 하는지를 알려주는 역할을 한다. 따라서 일단 Deployment를 만들면 쿠버네티스 마스터가 App의 인스턴스들을 각각의 노드에 스케쥴링을 하는 방식이다. App의 인스턴스가 만들어지면 쿠버네티스 Deployment 컨트롤러는 지속적으로 그 인스턴스를 모니터링한다. 만약 노 드가 다운되거나 삭제되면 컨트롤러가 다른 노드에다 배포하거나 하는 방식. 그렇게 함으로써 self-healing 방식을 제공 한다. 첫..
-
JPA의 도메인 클래스 컨버터 자동 등록Spring/Spring Data JPA 2020. 4. 25. 02:06
이전에 살펴보았던 Formatter은 도메인 클래스에 name으로 맵핑을 했지만 보통은 id로 하게 된다. 그럼 이제 id를 받아서 person으로 변경을 한 후에 이름을 출력한다던가 하는 일을 해보자. 이 경우 이전과 마찬가지로 Formatter나 Converter를 이용하게 되지만 이번에는 만들지 않고 JPA의 도움을 받아서 만들 어보자. 스프링 데이터 JPA가 지원해주는 기능 중에 도메인 클래스 컨버터 기능이 있다. 이 기능은 아이디에 해당하는 도메인 클래스로 변환을 해주는 컨버터가 자동으로 등록이 된다. 의존성에 h2와 jpa만 추가해준 후 Person 클래스에 @Entity를 붙여준다. 그리고 PersonRepository를 만든다. Id값에서 Entity로 컨버팅 할때 리포지토리를 사용하므로 ..