Spring의 핵심 기능 AOP
AOP에는 2명의 형제가 있다.
??
AOP와 그의 형제인 Filter, Interceptor는 뭘까?
그리고 이건 무엇이 똑같고 무엇이 다를까?
우리는 비즈니스 로직을 위에서부터 아래로 짠다.
예를 들면 컨트롤러 -> 로그 -> 서비스 -> 이런식으로 탑다운 방식으로 하다가 마지막 단계에서 리턴값을 주고 메세지 없이 잘 받았어 하며 끝난다.
이렇게 소스를 짜다보면, 컨트롤러마다 로그를 찍는게 생김(중복코드가 생김)
근데 만약 컨트롤러의 로그 포맷이 바꼈을 때,
컨트롤러단마다, 로그 포맷을 정했다면 전부 다 로그 포맷을 바꿔줘야하는게 생긴다.
그래서 나온게 AOP Filter Interceptor이다.
행단의 관심사를 공통으로 묶어서 처리하는 디자인 패턴이다.
이거의 차이점은
진행되는 위치, 순서 이다.
Filter
일반적으로 스프링과 무관하게 전역적으로 처리해야하는 작업들을 Filter에서 처리
Interceptor
클라이언트의 요청과 관련되어 전역적으로 처리해야하는 작업들을 처리.
AOP
Filter/Interceptor와 다르게 URL 패턴이 아닌 주소, 파라미터, 어노테이션, 메서드, 컨트롤러 등 다양한 Pointcut이 지원하는 다양한 방식으로 호출 위치를 지정할 수 있다.