Spring MVC에서 HTTP 요청 처리 순서를
Filter → DispatcherServlet → Interceptor → Controller → 응답 반환까지 정리.
1. 전체 요청 처리 흐름 요약
클라이언트 요청 → WAS 수신 → Filter → DispatcherServlet → HandlerMapping
→ Interceptor → Controller → Service → View or JSON → 예외처리 → 응답 반환
클라이언트의 요청이 들어오면 WAS가 먼저 받고,
Filter를 통해 전처리된 후 DispatcherServlet이 요청을 가로챈다.
이후 HandlerMapping을 통해 매핑된 Controller를 찾고,
그 전에 Interceptor에서 인증/권한 등의 공통 로직이 실행된다.
컨트롤러가 Service/Repository를 호출해 비즈니스 로직을 처리하고,
반환값은 필요 시 ViewResolver를 거쳐 View로, 또는 JSON으로 직렬화된다.
예외 발생 시엔 ExceptionResolver가 처리하며,
응답은 다시 DispatcherServlet과 Filter를 통해 클라이언트에 반환된다.
2. 순서별 상세 설명
1. 클라이언트가 HTTP 요청을 보냄
예: 브라우저 또는 앱이 GET /users 같은 요청을 전송
2. WAS(Web Application Server)가 요청 수신
예: Tomcat, Undertow 등 서블릿 컨테이너가 동작
서블릿 기반 구조로 요청을 가장 먼저 수신
3. Filter 처리 (javax.servlet.Filter)
서블릿 필터가 가장 먼저 실행됨 (스프링 외부 컴포넌트)
주요 용도 :
요청 로깅
인증/인가
CORS 설정
인코딩 처리 등
여러 개의 필터가 chain.doFilter()를 통해 연속 처리됨
4. DispatcherServlet 진입
Spring MVC의 핵심 프론트 컨트롤러(Front Controller)
모든 요청은 DispatcherServlet이 먼저 받고 나서 내부 컴포넌트에 위임함
5. HandlerMapping 탐색
요청 URI와 매핑되는 Controller 메서드를 찾음
어떤 컨트롤러가 이 요청을 처리할지 결정
6. Interceptor 처리 (HandlerInterceptor)
스프링 내부 공통 처리기 (AOP 느낌의 구조)
동작 순서:
preHandle() : 컨트롤러 실행 전
postHandle() : 컨트롤러 실행 후 (뷰 렌더링 전)
afterCompletion() : 응답 완료 후
주요 용도:
로그인 확인
로깅
실행 시간 측정 등
7. Controller 실행
@Controller 또는 @RestController 메서드가 실행됨
요청 파라미터 바인딩 → 서비스 호출 → 응답 생성
8. Service / Repository 호출
비즈니스 로직, DB 조회/저장 등 핵심 처리 수행
트랜잭션 관리(@Transactional)도 이 레이어에서 주로 동작
9. 컨트롤러 결과 반환
@RestController: 객체 반환 → JSON 변환
@Controller: 뷰 이름 반환 또는 ModelAndView 구성
10. ViewResolver 처리 (MVC 방식일 경우)
뷰 이름에 해당하는 템플릿(JSP, Thymeleaf 등) 탐색
모델 데이터를 포함하여 HTML을 렌더링
@RestController 사용 시 이 과정은 생략됨 (바로 JSON 응답)
11. ExceptionResolver 처리 (예외 발생 시)
처리 도중 예외가 발생하면 다음 순서로 처리됨:
@ExceptionHandler
@ControllerAdvice
Spring의 ExceptionResolver
- 오류 응답 포맷 결정, 에러 페이지 반환 등
12. HttpMessageConverter 작동
반환 객체를 JSON, XML 등 HTTP 응답 본문으로 직렬화
13. Interceptor afterCompletion() 실행
응답이 클라이언트로 나간 이후 실행되는 후처리 로직
리소스 정리, 로깅, 트랜잭션 마무리 등 가능
14. DispatcherServlet 응답 반환
최종 응답 데이터를 HttpServletResponse에 담아 클라이언트로 전송
15. Filter 체인 마무리
마지막 Filter.doFilter() 이후 필터 후처리 로직 실행됨
16. WAS가 최종 응답 전송
클라이언트(브라우저, 앱 등)에 응답을 전송하고 HTTP 요청-응답 사이클이 종료됨
'IT > Spring' 카테고리의 다른 글
Spring AOP란 (2) | 2025.07.21 |
---|---|
JPA (Java Persistence API) (0) | 2025.03.05 |
[STS4 설치] Spring Tools 4 for Eclipse 설치 (0) | 2021.05.04 |
스프링 AntPathMatcher 사용 예제 (0) | 2017.12.04 |