Spring Boot(Spring MVC)에서 요청은 servlet container, Filter 체인, 중앙의 DispatcherServlet, 그다음 interceptor와 여러분의 **@Controller**를 통과하고, 반환값이 HTTP 응답으로 변환됩니다.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controller
▼
HandlerMapping ── @Controller 메서드 찾기
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── @RequestBody / @PathVariable / @RequestParam 바인딩
▼
Controller method ── 여러분의 로직 → object 또는 ResponseEntity 반환
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── JSON으로 직렬화 또는 view 렌더링
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter 체인에 넘깁니다. Filter(Spring Security 포함)는 가장 바깥 레이어이며, MVC가 보기 전에 요청을 차단하거나 감쌀 수 있습니다.preHandle — HandlerInterceptor가 controller 전에 실행됩니다(auth 검사, logging, 타이밍 측정). false를 반환하면 요청이 중단됩니다.@PathVariable, @RequestParam, @RequestBody(HttpMessageConverter를 통해)가 바인딩되고 검증됩니다.@RestController 메서드가 비즈니스 로직을 실행하고 object 또는 ResponseEntity를 반환합니다.postHandle, 그다음 반환값이 HttpMessageConverter에 의해 직렬화되거나(Jackson을 통한 JSON) ViewResolver에 의해 view가 렌더링됩니다.afterCompletion**은 response가 commit된 후 실행됩니다. @ExceptionHandler/@ControllerAdvice가 그 과정에서 예외를 처리합니다.// 4/7/8. interceptor
public class TimingInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object h) {
req.setAttribute("started", System.nanoTime());
return true; // false = 흐름 중단
}
}
// 6. controller
@RestController
class ItemController {
@GetMapping("/items/{id}") // 3. mapping
ResponseEntity<Item> show(@PathVariable Long id) { // 5. argument resolution
return ResponseEntity.ok(service.find(id)); // 7. JSON으로 직렬화
}
}
Spring의 생명주기에는 면접관들이 즐겨 파고드는 두 개의 뚜렷한 확장 레이어가 있습니다. Filter(servlet 수준, 가장 바깥 — Spring Security가 있는 곳)와 Interceptor(Spring MVC 수준, controller 주위)입니다. 순서 — filter, DispatcherServlet, mapping, interceptor preHandle, argument 바인딩, controller, message 변환, afterCompletion — 를 알면 인증을 logging 대비 어디에 둘지, 왜 Security filter가 어떤 interceptor나 controller보다 먼저 요청을 거부하는지, 그리고 @ControllerAdvice가 어떻게 전체 흐름에서 예외 처리를 중앙화하는지 알 수 있습니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기