[Spring] 빈(Bean)의 생성과 소멸에 대한 관리(@PostConstruct초기화와 @PreDestroy소멸자)
·
Spring/개념
빈(Bean)의 라이프사이클(Life-Cycle) 제어 개발을 진행하면서 애플리케이션을 구동할 때 Service 계층에서 Arcus 캐시로 접근해야 하는 상황이 발생하였다고 가정해보자. Arcus 문서에는 서버 종료 시에 shutdown() 함수를 반드시 호출하라고 명시되어 있었다. 이러한 상황에서 어떻게 Bean의 소멸을 처리할 것인지 문제가 발생하였는데, 이를 위해 다음과 같은 가상의 CacheClient를 통해 Bean의 라이프사이클을 제어하는 방법에 대해 알아보고자 한다. @RequiredArgsConstructor public class CacheClient { private final String url; // 생성자 이후 호출되어야 함 public void connect() { System...
[Spring] Spring Boot는 어떻게 다중 유저 요청을 처리할까? Controller 1개가 어떻게 수 많은 Request를 처리하는가?
·
Spring/개념
스프링 부트는 웹서버 어플리케이션 구조에 대해 잘 몰라도, 뚝딱 웹서버 어플리케이션을 만들도록 도와준다. 하지만 한번씩 궁금증이 들 때가 있다. Controller는 한 개인가? 스프링은 기본적으로 singleton bean을 생성하는데 contoller도 분명 singleton일거 같은데... 그럼 singleton으로 생성된 contoller를 여러 쓰레드가 공유한다면 동기화 문제는?? Contoller가 한 개라면 10만 개의 Request가 있다면 Controller 1개가 전부다 처리하는건가? 그래서 위 질문을 해결하기 위해 내장 톰캣, 스레드 풀, JVM 메모리 관점에서 파악해보고자 한다. 위 그림은 스프링부트의 flow를 찾아보면 흔히 나오는 MVC 흐름도 그림이다. "한 유저의 요청이 어떻..
[Spring] @RestControllerAdvice를 이용한 Spring 예외 처리 방법
·
Spring/개념
예외 처리는 애플리케이션을 만드는데 매우 중요한 부분을 차지한다. Spring 프레임워크는 매우 다양한 에러 처리 방법을 제공하는데, 앞선 포스팅에서 @RestControllerAdvice를 사용해야 하는 이유에 대해서 자세히 알아보았다. 이번 포스팅에서는 @RestControllerAdvice를 이용해 에러를 처리하는 방법에 대해서 구현하면서 살펴보도록 하자. @ControllerAdvice와 @RestControllerAdvice ControllerAdvice와 RestControllerAdvice Spring은 전역적으로 예외를 처리할 수 있는 @ControllerAdvice와 @RestControllerAdvice 어노테이션을 각각 Spring3.2, Spring4.3부터 제공하고 있다. 두 개의..
[Spring] 스프링의 다양한 예외 처리 방법(ExceptionHandler, ControllerAdvice 등)
·
Spring/개념
예외 처리는 애플리케이션을 만드는데 매우 중요한 부분을 차지한다. Spring 프레임워크는 매우 다양한 에러 처리 방법을 제공하는데, 어떠한 방법들이 있고 가장 좋은 방법(Best Practice)은 무엇인지 살펴보도록 하자. 스프링의 기본적인 예외 처리 방법 Spring이 제공하는 다양한 예외 처리 방법들을 살펴보기 전에, 먼저 우리가 개발한 Controller에서 발생한 예외를 Spring은 기본적으로 어떻게 처리하고 있는지 살펴보도록 하자. 아래의 내용들은 SpringBoot를 기반으로 설명된다. Spring의 기본적인 예외 처리 방식(SpringBoot) 예를 들어 우리가 만든 다음과 같은 컨트롤러가 있다고 하자. @RestController @RequiredArgsConstructor publi..
[Spring] 필터(Filter)가 스프링 빈 등록과 주입이 가능한 이유(DelegatingFilterProxy의 등장)
·
Spring/개념
몇몇 포스팅과 조금 오래된 책들을 보면 필터(Filter)는 서블릿 기술이라서 Spring의 빈으로 등록할 수 없으며 빈을 주입받을수도 없다는 내용이 나온다. 하지만 실제로 테스트를 해보면 Filter 역시 스프링 빈으로 등록이 가능하고, 빈의 주입도 받을 수 있는데 왜 이러한 설명들이 나오게 되었는지 다뤄보고자 한다. 서블릿 필터(Servlet Filter)가 스프링 빈으로 등록 가능한 이유 필터(Filter)는 스프링 빈으로 등록이 불가능했다! 몇몇 포스팅과 예전 책들을 보면 필터(Filter)는 서블릿 기술이라서 Spring의 빈으로 등록할 수 없다는 내용이 나온다. 또한 필터는 J2EE표준 스펙 기능이지만 인터셉터는 스프링 프레임워크가 제공하는 기술이므로 필터와 달리 인터셉터는 스프링 빈으로 등록..
[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도
·
Spring/개념
자바 웹프로그래밍을 구현하다보면 공통적인 업무를 추가해야할 것들이 많다. 공통적인 업무에는 로그인처리(세션체크), pc웹과 모바일 웹의 분기, 로그 확인, 페이지 인코딩 변환, 권한체크, XSS(Cross site script)방어 등이 있다. 이러한 공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수도 있으며, 소스 관리도 되지 않는다. 즉, 공통 부분은 빼서 따로 관리하는게 좋다. Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 이번에는 그 중에서 필터(Filter) vs 인터셉터(Interceptor)의 차이에 대해 알아보고자 한다. 또한 간략하게 인터셉..