Spring4 Annotation based Interceptor Interceptor를 사용하는 방법은 이전 포스팅인 filter, interceptor에서 정리를 해봤는데요. 그중 Interceptor를 Annotation을 활용해 사용하는 방법이 있습니다. Custom Annotation을 등록하고 HandlerMethod를 통해 Annotation을 찾아 Interceptor를 실행하도록 구현하는 방법인데요. 이 방법이 Annotation을 추가하고 등록할 때마다 Handler에서 Annotation을 찾는 로직이 반복되는 걸 확인할 수 있었습니다. 그래서 이번엔 공통적인 로직을 한번 분리해보려고 합니다. Custom Annotation 생성 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) pub.. 2021. 9. 10. Spring MVC - Filter, Interceptor 스프링에서 공통 관심사를 처리하는데 AOP를 사용하는데요. 웹과 관련된 공통 관심사를 처리하는 방법으로 Filter와 Interceptor를 사용하게 됩니다. Filter와 Interceptor는 HttpServletRequest를 제공하기 때문에 웹 관련 공통 관심사를 처리하기에 유용합니다. 이번 포스팅에서는 Servlet Filter와 Spring Interceptor의 차이점에 대해서 정리하도록 해볼게요. Filter 웹 요청이 들어오면 먼저 필터가 먼저 호출되고 서블릿이 호출됩니다. 필터는 체인으로 구성되어 여러 개의 필터를 추가하고 호출되도록 구성할 수 있습니다. filter는 servlet에서 제공하고, 필터 인터페이스를 통해 구현하고 빈으로 등록하면 서블릿 컨테이너가 필터를 싱글톤으로 생성하.. 2021. 8. 11. Spring Transaction Spring의 Transaction 처리 방법 Spring에서 Transaction을 처리하는 방식에는 세 가지 방법이 있는데요. 첫 번째는 TransactionSynchronizationManager를 통한 동기화 방식, 두 번째로 PlatformTransactionManager를 통한 추상화 방식, 마지막으로 AOP를 통한 @Transactional 애노테이션을 활용한 선언적 트랜잭션 방식이 있습니다. 각 방식에 대해 간단하게 정리해보면, 동기화 방식은 Connection 객체를 보관해두고 필요할 때마다 호출하는 방식인데 이 방식의 경우 DB를 여러 개를 사용하게 되는 경우 로컬 트랜잭션이 아닌 글로벌 트랜잭션을 사용한다는 점에서 문제가 발생하게 됩니다. 이런 문제를 해결하기 위해 PlatformTr.. 2021. 8. 9. AOP를 직접 구현해보자 - Proxy적용 요즘 점진적인 예제를 통해서 학습하는 과정들이 Spring framework을 이해하는데 큰 도움이 되는 걸 느끼고 있는데요. 블로그를 통해서 이런 과정들을 정리해보려고 합니다. 토비의 스프링을 보면 트랜잭션 처리에 대한 공통적인 로직의 분리를 예제로 들고 있습니다. 저는 service 호출마다 공통적인 시작, 종료 로그를 찍어야 한다고 요구사항을 잡고 예제를 진행하도록 하겠습니다. Decorator + Proxy Pattern 공통적인 로그를 출력하는 로직과 service로직을 분리하기 위해 전략 패턴을 통해서 분리는 가능하지만 부가기능이 핵심기능을 사용하게 되는 구조를 가져가게 됩니다. 이 경우에 핵심기능을 가져간 클래스는 부가기능 클래스의 존재를 알 수 없게 되고 실제로 사용할 때 직접 핵심기능으로.. 2021. 8. 2. 이전 1 다음