1) 서블릿 컨테이너 & 필터 체인
1. 클라이언트 요청 → 톰캣/제티 등 서블릿 컨테이너 수신
2. Filter 실행 (순서대로)
예) CharacterEncodingFilter, HiddenHttpMethodFilter, CorsFilter, DelegatingFilterProxy(→ Spring Security Filter Chain) 등
3. 필터 통과 후 DispatcherServlet(프론트 컨트롤러)으로 요청 전달
2) DispatcherServlet 내부 파이프라인
4. MultipartResolver: 멀티파트(파일 업로드)면 파싱
5. LocaleResolver / ThemeResolver: 로케일·테마 결정 (있다면)
6. HandlerMapping 조회: 어떤 컨트롤러 메서드가 처리할지 매핑 결정
RequestMappingHandlerMapping(대부분), 정적리소스면 ResourceHttpRequestHandler
7. (선택) HandlerInterceptor.preHandle 호출
로깅, 인증·인가 전처리, 공통 파라미터 주입 등
3) 핸들러 호출 전 바인딩 & 변환
8. HandlerAdapter 선택 → RequestMappingHandlerAdapter가 보통 담당
9. ArgumentResolver로 컨트롤러 파라미터 생성
@RequestParam, @PathVariable, @RequestBody(+ HttpMessageConverter), @ModelAttribute, @AuthenticationPrincipal 등
10. DataBinder → 바인딩/검증
@InitBinder 커스터마이징, @Valid/@Validated로 Bean Validation
4) 컨트롤러 처리
11. 컨트롤러(핸들러) 메서드 실행
반환 타입 예: String(view name), ModelAndView, ResponseEntity<T>, @ResponseBody/@RestController(바디 직접)
5) 반환값 처리 & 예외 처리
12. ReturnValueHandler로 반환값 해석
뷰 이름/ModelAndView → 뷰 렌더링 경로
@ResponseBody/ResponseEntity → HttpMessageConverter로 JSON/XML/바이너리 직렬화
13. (중간 발생 예외)
HandlerExceptionResolver(순서대로)
@ExceptionHandler(컨트롤러/@ControllerAdvice)
ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 등
예외를 응답으로 매핑(상태코드/바디/에러뷰)
6) 뷰 렌더링 (MVC 뷰의 경우)
14. Model 확정 후 ViewResolver로 뷰 찾기
ThymeleafViewResolver, InternalResourceViewResolver(JSP), 프리마커 등
15. View.render(model, request, response) → HTML 생성
7) 마무리 훅 & 응답 전송
16. HandlerInterceptor.postHandle(뷰 렌더링 전/후 시점 구현체에 따라)
17. HandlerInterceptor.afterCompletion(예외 포함 최종 정리)
18. FlashMap/FlashMapManager(리다이렉트 시 플래시 속성 관리)
19. 컨테이너가 HTTP 응답 전송 & 커넥션 정리
---
한눈에 요약(텍스트 다이어그램)
Client
→ Filters(인코딩/보안/CORS/등)
→ DispatcherServlet
→ Multipart/Locale/Theme
→ HandlerMapping (컨트롤러 선택)
→ Interceptor.preHandle
→ HandlerAdapter
→ ArgumentResolvers + DataBinder(@Valid)
→ Controller(@RequestMapping)
← ReturnValueHandlers (뷰 or 바디)
→ ExceptionResolvers(필요시)
→ ViewResolver + View.render (MVC)
→ Interceptor.postHandle / afterCompletion
← HttpResponse
---
실무 포인트(면접/코딩에서 자주 나오는 것)
정적 리소스: ResourceHttpRequestHandler가 처리(캐시/압축 설정 중요)
컨텐츠 협상: ContentNegotiation(확장자/Accept 헤더 기반)
HTTP 메시지 변환: MappingJackson2HttpMessageConverter(JSON), StringHttpMessageConverter 등
비동기 처리: Callable, DeferredResult, WebAsyncTask, SseEmitter, StreamingResponseBody
전역 예외 처리: @ControllerAdvice + @ExceptionHandler로 API 에러 스펙 통일
보안: 대부분 Spring Security Filter Chain이 컨트롤러 앞단에서 인증/인가 단락 처리
원하시면 위 흐름을 기준으로 예외 처리 템플릿(전역 에러 응답 규격)이나 커스텀 ArgumentResolver/Interceptor 샘플 코드도 바로 만들어 드릴게요.
'Developer > Spring & Backend' 카테고리의 다른 글
| 단어의 일부로 검색할 수 있는 자동완성 기능을 구현할 때, a로 시작하는 단어 5개, ap로 시작하는 단어 5개 (0) | 2025.10.09 |
|---|---|
| 한글날 묵상(feat gpt5) (0) | 2025.10.08 |
| “무중단 배포(Zero-Downtime Deploy)” (0) | 2025.10.05 |
| 부하 테스트 시 테스트 유저 수 (0) | 2025.10.04 |
| tanstack-query에서 stale time과 gc time의 차이점에 대해서 설명해주세요 (0) | 2025.09.30 |
