Spring MVC는 모든 HTTP 요청을 DispatcherServlet 하나가 받아, 알맞은 컨트롤러 메서드로 보내고 결과를 응답으로 바꾸는 프론트 컨트롤러(Front Controller) 구조다. 스프링 이전에는 URL마다 서블릿을 직접 만들고 매핑했다.
흐름
클라이언트
→ 서블릿 컨테이너(Tomcat): HTTP 메시지를 HttpServletRequest로
→ 필터 체인(보안·인코딩 등)
→ DispatcherServlet
① HandlerMapping: URL·메서드로 처리할 컨트롤러 메서드를 찾음
② HandlerAdapter: 파라미터를 바인딩하고 메서드를 호출
③ 반환값 처리
- 뷰 이름이면 ViewResolver가 템플릿을 찾아 렌더링
- @ResponseBody·@RestController면 메시지 컨버터가 JSON으로 직렬화
→ HttpServletResponse → 클라이언트- 인증·인가는 DispatcherServlet에 닿기 전 필터 단계에서 일어난다(시큐리티 필터체인)
- 예외는
@ControllerAdvice의 예외 처리기로 모인다(스프링 전역 예외 처리) - JSON API라면 ViewResolver 대신 메시지 컨버터(HttpMessageConverter, Jackson)가 일한다(스프링 REST 컨트롤러)
요청 값 받기
@GetMapping("/orders/{id}")
public OrderDto get(@PathVariable Long id,
@RequestParam(defaultValue = "false") boolean detail) { ... }@PathVariable: URL 경로 조각. REST 리소스 식별에 쓴다@RequestParam: 쿼리 문자열이나 폼 필드.required,defaultValue를 준다- 필드가 많으면 객체 하나로 바인딩하고 @Valid로 검증한다
MVC 패턴
MVC(Model-View-Controller)는 Model(데이터), View(표현), Controller(흐름 제어)로 나누는 패턴이다. 서버 렌더링(Thymeleaf 등)에서는 컨트롤러가 모델과 뷰 이름을 넘기고, API 서버에서는 뷰 대신 JSON이 응답이 된다. 프론트엔드 쪽의 MVC·MVVM(Model-View-ViewModel) 변형은 MVC·MVP·MVVM, 장고의 대응 구조는 Django MVT 구조를 본다. 스프링 부트가 이 서블릿 설정을 자동으로 해 준다(스프링 부트 자동 설정).