코드와이
[웹] Spring(3) Interceptor 본문
인터셉터(Interceptor)?
인터셉터란 컨트롤러에 들어오는 HttpRequest 와 컨트롤러에서 보내는 HtttpResponse 를 가로채는 역할을 합니다.
인터셉터는 Filter 의 역할과 유사한데 그 차이점이 분명히 존재합니다.
구분 | 인터셉터 | Filter |
위치 | spring-servlet.xml | web.xml |
호출 시점 | DispatcherServlet 실행 후 | DispatcherSevlet 실행 전 |
인터셉터는 주로 로그인 처리, 권한 체크 등의 기능에서 사용됩니다.
만약 인터셉터를 사용하지 않는다면 로그인 정보를 확인해야 하는 작업마다 컨트롤러에서 session 을 통해 로그인 정보를 확인해야 합니다.
인터셉터는 이 작업을 대신 수행해주기 때문에 중복 코드가 확 줄어들 수 있습니다. 핸들러가 수 백, 수 천개가 된다면 서버 부하로 메모리가 낭비됩니다. 또한 개발자도 사람이기 때문에 핸들러 코드를 작성할 때 관리자인지 확인하는 코드가 누락될 수 있습니다.
이러한 문제를 해결하기 위해 인터셉터에서 세션 정보를 체크하는 코드를 한번만 작성함으로써 메모리 낭비를 방지할 수 있습니다.
인터셉터 구현 및 메서드
스프링에서 제공하는 org.springframework.web.servlet.HandlerInterceptor 인터페이스를 구현하거나, org.springframework.web.servlet.handler.HandlerInterceptorAdapter 추상 클래스를 오버라이딩 함으로써 자신만의 인터셉터를 만들 수 있습니다. 스프링에서 제공하는 HandlerInterceptor 와 HandlerInterceptorAdapter 는 preHandle(), postHandle(), afterCompletion() 이 세 메서드를 제공합니다.
preHandle() 은 컨트롤러가 호출되기 전에 실행되기 때문에 컨트롤러 실행 전에 체크해야 되는 작업이나 요청 데이터를 가공할 수 있습니다. boolean 값을 리턴하기 때문에 true 값일 때만 요청에 따른 컨트롤러 작업이 수행됩니다.
postHandle() 은 컨트롤러 작업이 완료된 후 View 로 가기 전에 수행됩니다. ModelAndView 타입의 정보를 입력받기 때문에 View 로 넘겨줄 Model 데이터를 가공할 수 있습니다. 비동기적 요청 처리 시에는 실행되지 않고, 당연하게도 preHandle() 값이 false 가 된다면 실행되지 않습니다.
afterCompletoin() 은 View 에서 모든 작업이 완료된 후에 실행됩니다. 요청 중에 사용한 리소스를 반환시켜주기 적당한 메소드입니다.
Filter & 인터셉터 실행 순서
'웹' 카테고리의 다른 글
[웹] Elasticsearch 기본 예제 (0) | 2021.09.29 |
---|---|
[웹] JPA (0) | 2021.08.08 |
[웹] JPA @GeneratedValue(strategy = GenerationType.IDENTITY) (0) | 2021.07.13 |
[웹] Vue.js(3) (0) | 2021.05.13 |
[웹] Vue.js(2) (0) | 2021.05.13 |