AOP를 구성해 본 적이 있나!!!
SPRING에서 AOP란
대부분의 시스템이 공통으로 가지는 보안이나, 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(Cross-Concern)'라고 하며, 스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능합니다.
AOP(Aspect Oriented Programming)는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임입니다.
또한 이러한 횡단 관심사의 가장 흔한 예는 보안이나 성능 모니터링과 같은 작업을 들 수 있습니다.
- 코드로 배우는 스프링 웹 프로젝트 출처 -
이론적으로는 이런 설명인데 이게 과연 소스상에서는 어떤 부분을 어떻게 구성했다 라고 말 할 수 있는 걸까 ?
실제 프로젝트를 진행하면서 스프링시큐리티를 이용하여 보안을 설정하였고, logger를 이용하여 로그를 남기는 등의 작업을 하였고, 이것을 나는 AOP를 구현하였다고 생각하고 있었지만......
일단 책에서는
spring-aop 관련 라이브러리를 pom.xml에 추가하고 @Aspect 어노테이션을 선언한 컴포넌트를 구현한 것을 aop를 사용 하는 것이라 설명하고 있다.
@Before, @After @Around 등을 통해 설정을 한 비즈니스 로직 외 의 부분을 실행 하도록 설정하는 것이다.
그런데 작성하면서 느낀 점이 AOP에서 하는 기능은 Spring의 인터셉터(Interceptor)와 거의 같은 기능을 수행한다!!!
둘의 차이점은 파라미터의 차이!!!
AOP는 JoinPoint 나 ProceedingJoinPoint 등을 활용하여 대상이 되는 메소드의 파라미터를 처리
Interceptor는 HttpServletRequest나 HttpServletResponse를 활용하여 파라미터를 처리
고로.... AOP의 개념을 알고... AOP를 직접 사용하진 않았지만 그에 걸맞는 기능인 인터셉터를 사용하여 구현한 적인 있다!!!!