웹 개발 시 공통부분의 관리를 위한 방법 (3)
1) Filter
2) Interceptor
3) AOP
필터와 인터셉터의 차이
대상 | 필터(Filter) | 인터셉터(Interceptor) | AOP |
관리되는 컨테이너 | 웹 컨테이너 | 스프링 컨테이너 | |
Request/Response 조작가능 여부 |
o | x | |
용도 | - 보안 관련 공통 작업 - 모든 요청에 대한 로깅 또는 감사 - 이미지/데이터 압축 및 문자열 인코딩 |
- 인증/인가 등과 같은 공통 작업 - Controller로 넘겨주는 정보의 가공 - API호출에 대한 로깅 또는 감사 |
|
대상지정 | 주소로 구분 | 주소로 구분 | 주소, 파라미터,어노테이션 등 .. |
실행위치 | Servlet단위 | Servlet단위 | 메소드앞 Proxy패턴의 형태로 실행 |
실행순서 | 1 | 2 | 3 |
1. Filter (필터)
- 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리
- 디스패처 서블릿에 요청이 전달되기 전/후에 URL패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능 제공.
- 스프링 컨테이너가 아닌 톰캣과 같은 웹컨테이너에 의해 관리가 되므로 디스패처 서블릿으로 가기전에 요청을 처리하는 것이다.
- 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수 있는데 보통 web.xml에 등록하고 일반적으로 인코딩 변환처리, xss방어 등의 요청에 대한 처리로 사용된다.
- ServletRequest , ServletResponse객체를 조작할 수 있다는 점에서 Interceptor보다 훨씬 강력한 기술이다.
1-1. 필터의 실행 메서드
1) init() - 필터 인스턴스 초기화
2) doFilter() - 전/후 처리
3) destroy() - 필터 인스턴스 종료
2. Interceptor(인터셉터)
- 요청에 대한 작업 전/후를 가로챈다.
- 스프링의 디스패처 서블릿이 컨트롤러를 호출하기 전/후로 끼어들기 때문에 spring context 내부에서 controller(Handler)에 관한 요청과 응답에 대해 처리한다.
- 클라이언트의 요청과 관련해 전역적으로 처리해야 하는 작업들을 처리
- 스프링의 모든 빈 객체에 접근할 수 있다.
- 객체를 조작할 수는 없지만 객체가 내부적으로 갖는 값을 조작할 수 있으므로 Controller로 넘기기 위한 정보를 가공하는데 용이하다.
2-1. 인터셉터의 실행 메서드
1) preHandler() - 컨트롤러 메서드가 실행되기 전
2) postHandler() - 컨트롤러 메서드 실행 직후 / view페이지 렌더링 되기 전
3) afterCompletion() - view 페이지가 렌더링 되고 난 후
3. AOP
- OOP를 보안하기 위해 나온 갠ㅁ
- 객체지향의 프로그래밍을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 종단면 관점에서 바라보고 처리한다..어렵..
- 주로 로깅, 트랜잭션, 에러처리 등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용
- 필터나 인터셉터와 달리 메소드 전/후의 지점에 자유롭게 설정이 가능하다.
3-1. AOP포인트컷
1) @Before : 대상 메서드의 수행 전
2) @After : 대상 메서드의 수행 후
3) @After-returning : 대상 메서드의 정상적인 수행 후
4) @After-throwing : 예외발생 후
5) @Around : 대상 메서드의 수행 전/후
https://goddaehee.tistory.com/154
https://mangkyu.tistory.com/173
'차근차근 > Spring' 카테고리의 다른 글
web.xml (0) | 2022.02.03 |
---|---|
Spring Security란(1) - 추가예정 (0) | 2022.01.11 |
스프링 어노테이션.. 맨날 .. (0) | 2022.01.11 |
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/] in DispatcherServlet with name 'appServlet' (0) | 2022.01.10 |
pom.xml 에 jackson 추가 중 에러 (0) | 2022.01.10 |