1. 요청(Request)
클라이언트가 HTTP 요청을 보내면, Spring boot의 내장 웹 서버(Tomcat, Jetty 등)가 이를 수신한다.
2. DispatcherServlet을 통한 요청 처리
Spring Boot는 DispatcherServlet을 중앙 컨트롤러(Front Controller)로 사용한다.
이 DispatcherServlet은 모든 요청을 받아 적절한 핸들러(Controller)로 전달하는 역할을 한다.
- Spring Boot 실행 시 DispatcherServlet이 자동으로 등록된다.
- 기본적으로 모든 URL패턴(/*) 을 처리하도록 매핑된다.
3. HandlerMapping을 통한 컨트롤러 탐색
DispatcherServlet은 요청된 URL과 매칭되는 컨트롤러를 찾기 위해 여러 HandlerMapping을 순차적으로 확인한다.
Spring Boot에서 기본적으로 사용되는 HandlerMapping
1. RequestMappingHandlerMapping
- @RequestMapping과 같은 어노테이션이 붙은 컨트롤러를 찾음.
2. SimpleUrlHandlerMapping
- XML 기반 설정이나 @Bean을 통해 직접 URL 매핑을 설정할 경우 사용
요청이 적잘한 컨트롤러 메서드와 매핑되면, 해당 메서드를 실행할 HandlerAdapter를 찾는다.
4. HandlerAdapter를 통한 컨트롤러 실행
DispatcherServlet은 적절한 HandlerAdapter를 사용해 컨트롤러 메서드를 호출합니다.
- RequestMappingHandlerAdapter: @RequestMapping이 있는 메서드를 실행
- SimpleControllerHandlerAdapter: Controller 인터페이스를 구현한 클래스를 실행
5. 컨트롤러 실행 후 응답 처리
컨트롤러 메서드가 실행된 후, 결과를 DispatcherServlet이 다시 받는다.
- 컨트롤러는 객체(JSON), 뷰 이름(String), ResponseEntity 등을 반환할 수 있습니다.
- 반환된 결과를 ViewResolver가 처리하여 최종 응답을 생성한다.
6. ViewResolver를 통한 뷰 처리(선택적)
만약 컨트롤러가 String(뷰 이름)을 반환했다면:
- ViewResolver가 실행되어 적절한 뷰(.jsp, .html, Thymleaf 등)를 찾아 랜더링한다.
만약 @ResponseBody나 RestController를 사용했다면
- HttpMessageConverter가 실행되어 JSON또는 XML 등의 형식으로 변환하여 응답을 생성한다.
7. 응답(Response) 반환
최종적으로 생성된 응답을 다시 DispatcherServlet이 받아, 클라이언트에게 반환합니다.
'Spring' 카테고리의 다른 글
Spring Boot 핵심 개념 (0) | 2025.02.25 |
---|---|
Spring boot 버전 정리 (2) | 2024.12.02 |
동시성 제어 (낙관적 락, 비관적 락, 분산 락) (0) | 2024.10.19 |
Transactional 관심사의 분리를 통해 로그 기록 남기기 (0) | 2024.10.08 |
단위테스트, 통합테스트 (1) | 2024.10.01 |