1. 개발 공통 처리

자바 웹 개발을 하다보면 공통적으로 처리해야할 사항이 많이 있습니다. 예를들면 아래의 사항들에 해당할 수 있겠네요.

 

º 로그인 처리
º 권한 체크

º XSS(Cross Site Script) 방어

º PC와 모바일웹의 분기처리

º 페이지 인코딩 변환

 

이런 공통적인 부분은 따로 빼서 관리하는게 좋습니다! 이러한 공통 처리를 하는데 활용하는 Filter, Interceptor, AOP는 어떤 로직을 실행하기 전이나 실행한 후에 추가적인 행동을 하는데 사용되는 기능들입니다. 

 

Interceptor와 Filter는 Servlet 단위에서 실행됩니다. 반면 AOP는 메소드 앞에 Proxy패턴의 형태로 실행됩니다. 

 

Filter -> Interceptor(preHandler) -> AOP -> Interceptor(postHandler) -> Filter 순으로 실행됩니다.

 

1. 서버를 실행시키고 서블릿이 올라오는동안 init이 실행됩니다. 그 후 doFilter가 실행됩니다.

2. 컨트롤러에 들어가기전에 preHandler가 실행됩니다.

3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 실행됩니다.

4. 서블릿 종료 시 destory가 실행됩니다.

 

2. 필터(Filter)

서블릿 필터는 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나,  여러가지 체크를 수행할 수 있습니다. 또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수가 있습니다. 보통 web.xml에 등록하고, 일반적으로 인코딩 변환 처리, XSS방어 등의 요청에 대한 처리로 사용됩니다.



위와 같이 필터의 URL-PATTERN을 /*로 정의하면 servlet, jsp 뿐만 아니라 이미지와 같은 모든 자원의 요청에도 호출됩니다. 다음은 필터의 실행 메소드입니다.

 

º init() - 필터 인스턴스 초기화

º doFilter() - 전/후처리

º destroy() - 필터 인스턴스 종료

 

3. 인터셉터(Interceptor)

모든 요청에 대한 작업의 전과 후에 개발자가 지정한 로직이 실행될 수 있도록 가로챕니다. 필터는 스프링 컨텍스트 외부에 존재하여 스프링과 무관한 자원에 대해 동작합니다. 하지만 인터셉터는 스프링의 DistpatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트(Context, 영역) 내부에서 Controller(Handler)에 관한 요청과 응답에 대해 처리합니다. 또한 스프링의 모든 빈 객체에 접근할 수 있습니다. 

 

인터셉터는 여러개를 사용할 수 있고 로그인체크, 권한체크, 프로그램 실행시간 계산 작업, 로그 확인 등의 업무처리를 합니다. 다음은 인터셉터의 메소드입니다.

 

º preHandler() - 컨트롤러 메소드가 실행되기 전 실행

º postHandler() - 컨트롤러 메소드가 실행된 후 view페이지 렌더링 되기 전 실행

º afterCompletion() - view 페이지가 렌더링 되고 난 후 실행

 

4. AOP

OOP를 보완하기 위해 나온 개념입니다. 객체 지향의 프로그래밍을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 종단면(관점)에서 바라보고 처리합니다.

 

주로 '로깅', '트랜잭션', '에러 처리'등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용합니다. Interceptor나 Filter와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능합니다. Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있습니다.


AOP의 Advice와 HandlerInterceptor의 가장 큰 차이는 파라미터의 차이입니다.
Advice의 경우 JoinPoint나 ProceedingJoinPoint 등을 활용해서 호출합니다. 반면에 HandlerInterceptor는 Filter와 유사하게 HttpServletRequest, HttpServletResponse를 파라미터로 사용합니다.


AOP 포인트컷

º Before: 대상 메소드의 수행 전

º After: 대상 메소드의 수행 후

º After-returning: 대상 메소드의 정상적인 수행 후

º After-throwing: 예외 발생 후

º Around: 대상 메소드의 수행 전/후 

Reference

https://goddaehee.tistory.com/154

'Spring Framework' 카테고리의 다른 글

롬복(Lombok) 설치  (0) 2019.11.05
[Spring Framework] xss filter  (0) 2019.10.25
[Spring Framework] 부트 스트랩 적용하기  (0) 2019.10.22
[Spring Framework] home.jsp 구동과정  (0) 2019.10.12
[Spring Framework] web.xml 기초  (0) 2019.10.12
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기