해결된 질문
작성
·
211
4
안녕하세요. 김영한 팀장님,
질문에 앞서 이번에 스프링 입문자들을 위한 강의를 만들어 주셔서 대단히 감사드립니다.
저는 현재 스프링 프레임워크를 이용하여 개발을 진행하고 있지만 항상 헷갈리는 개념 중 하나가 AOP와 Interceptor의 차이점, 사용해야하는 때 입니다.
개념적으로 AOP는 공통코드(공통관심사)를 비즈니스로직과 분리하여 실제 로직이 실행되기 전, 후, 전후로 분리된 공통관심사를 실행시키는 기능으로 이해를 하고 있습니다.
다만, 스프링 웹 MVC 기술로 넘어와서
사용되는 HandlerInterceptor의 기능적인 측면으로만 봤을 때 특정 URL 접근에 따라 실행되는 HandlerAdapter(URL에 매핑되어 실제로 실행되는 메소드)의 실행 전, 후, 전후 또는 완전히 실행이 된 후 부가적인 기능을 할 수 있다는 점에서
'이것도 어떻게 보면 공통관심사 처리가 아닌가?'
하는 생각에 AOP와 Interceptor의 차이점을 잘 못느꼈습니다.
여러 고민 끝에 AOP는 소스코드 안에서 일어나는 공통된 동작(실행 시간, 로그 출력)을 처리하기 위한 기능이며,
Interceptor는 프로젝트를 실행시키고 특정 URL 접근에 따라 부가적인 또는 공통된 동작을 처리하기 위한 기능이라고 생각이 들었습니다.
예를 들어, 사용자가 인증된 유저인지 매번 확인해야하는 기능이 필요하다면 AOP가 아닌 Interceptor로 구현하는 것이 개념상으로 맞는 건지 궁금합니다!
또한 이번 강의에서 AOP 사용 예제 코드로 실행시간 측정을 보여주셨는데, 이것 말고도 AOP를 활용한 대표적인 사례를 알고싶습니다!
긴 글 읽어주셔서 감사합니다.
답변 2
10
안녕하세요. Henu님 좋은 질문입니다^^
저도 과거에 같은 고민을 한 적이 있어서요.
사실 AOP나 Intercepter둘다 공통 관심사를 해결하기 위한 목적을 가지고 있습니다.
다한 고민하신 것 처럼 인터셉터는 웹과 관련된 기능을 해결하는 것에 특화되어 있습니다. 특히 HttpRequest 관련된 정보를 받아서 해결할 수 있지요.
그리고 최근 컨트롤러를 설계할 때 파라미터로 HttpRequest를 잘 안쓰기 때문에, 컨트롤러를 AOP로 처리하면 이런 부분을 받아서 해결하기가 참 어렵습니다. 반면에 인터셉터는 HttpRequest 정보를 그냥 넘겨주기 때문에, 편리합니다.
Interceptor는 웹에 특화되어 있기 때문에 웹과 관련된 기술을 사용하는 포인트에서만 사용할 수 있어서 범용성이 없습니다. 반면에 AOP는 범용성이 어마어마 하지요.
실무에서 가장 많이 사용하는 AOP의 대표적인 사례는 @Transactional을 활용한 트랜잭션 관리, @Async를 통한 비동기 처리 등이 있습니다.
감사합니다.
2