728x90
공통 처리
- 개발을 하다보면 다음과 같이 공통적으로 적용되는 부분들이 존재
- 로그인 세션 유지
- 권한 체크(Spring Security 등)
- XSS(roos site sprict)
- 로깅
- 페이지 인코딩 처리
- 이러한 공통 기능들은 모든 페이지에 똑같은 코드를 넣게 되면 중복 코드를 초래하게 되는데 이는 가독성이 좋지 못할 뿐더러 유연성과 유지보수 측면에서도 매우 좋지 않음
- 따라서 공통된 코드들은 따로 분리하여 관리하는 것이 매우 효율적인데 공통 코드를 처리하는 방법은 3가지가 존재하는데 각각 적용되는 위치가 다름
- Filter
- Intercepter
- AOP
요청에 따른 흐름
- Filter : Servlet Container(Tomcat) 영역 = 서블릿 레벨
- Interceptor, AOP : Spring Container 영역 = 스프링 레벨
- 동작 흐름
- 요청(Request)이 Servlet으로 들어옴
- Filter 실행 후 Spring Container로 Request 전달
- Dispatcher Servlet에서 preHandler로 Interceptor로 Request 전달
- Interceptor에서 Controller로 Request를 전달하기 전 AOP가 먼저 실행
- Controller에가 Request에 따른 비즈니스 로직 처리
- Controller에서 반환된 Response를 afterCompletion과 postHandler로 Dispatcher Servlet에 전달
- Response를 Filter에 전달
- Filter는 클라이언트에게 응답(Response)
Filter, Interceptor, AOP의 역할과 장점
Filter
- 역할
- Servlet Container(Tomcat) 단계에서 요청을 가로채어 전체 요청에 적용되는 전처리/후처리 작업 수행
- 장점
- Spring 의존 없이 서블릿 컨테이너 수준에서 실행되므로, 스프링과 무관한 기능에도 활용 가능
- 사용 예
- 인코딩 변환 처리
- XSS 방어
- CORS 설정
- 인증 확인
Interceptor
- 역할
- Spring Container에서 DispatcherServlet 이후에 실행되어 컨트롤러 전후의 요청/응답을 처리
- 장점
- Spring MVC에 밀접하게 통합되어 컨트롤러 호출 전후에 특정 로직을 추가하기 적합
- 사용 예
- 로그인 여부 확인
- 권한 체크
- API 요청 로깅
AOP (Aspect-Oriented Programming)
- 역할
- 메서드 실행 전후로 부가 기능을 삽입하는 방식으로 비즈니스 로직과 공통 관심사를 분리
- 장점
- Proxy 패턴을 활용하여 메서드 전후로 로직을 삽입하므로 코드 중복 없이 재사용 가능
- 사용 예
- 트랜잭션 관리
- 성능 모니터링
- 메서드 실행 시간 측정
728x90
'Language > Spring' 카테고리의 다른 글
[Spring] Controller와 Rest Controller 차이 (0) | 2024.11.17 |
---|---|
[Spring] DispatcherServlet의 개념과 흐름 (0) | 2024.11.17 |
[AOP] AOP란? (1) | 2024.11.14 |
[Entity] 엔티티와 영속성 컨텍스트 (1) | 2024.11.09 |
[JPA/Hibernate] Hibernate 기초 (1) | 2024.11.09 |