개발일기/CS(면접)
API 요청에 대한 Spring 내부 동작
w.llama
2024. 8. 13. 22:01
Spring Framework의 API 요청 처리 과정

- 요청 수신
- 클라이언트(브라우저 또는 다른 애플리케이션)가 서버에 HTTP 요청을 보냄
- 이 요청은 서블릿 컨테이너(예: Tomcat)에 의해 먼저 받음
- DispatcherServlet
- 모든 요청은 먼저 DispatcherServlet이라는 프론트 컨트롤러로 전달
- DispatcherServlet은 Spring MVC의 핵심 컴포넌트로, 요청을 적절한 컨트롤러에 분배하는 역할을 수행
- 핸들러 매핑
- DispatcherServlet은 HandlerMapping 인터페이스의 구현체를 사용하여 요청 URL에 맞는 핸들러(컨트롤러)를 찾는다.
- 주로 사용되는 HandlerMapping 구현체로는 RequestMappingHandlerMapping이 있고,
이를 @RequestMapping 어노테이션을 처리
- 핸들러 어댑터
- 찾아진 핸들러를 실행하기 위해 HandlerAdapter가 사용
- HandlerAdapter
다양한 유형의 핸들러를 실행할 수 있게 해주는 어댑터 패턴의 구현체.
- HandlerAdapter
- 찾아진 핸들러를 실행하기 위해 HandlerAdapter가 사용
- 핸들러(컨트롤러) 실행
- 선택된 컨트롤러의 메서드가 실행
- 이 단계에서 @RequestParam, @PathVariable 등의 파라미터 바인딩이 이루어집니다.
- 필요한 경우 요청 본문이 객체로 변환됨(예: JSON to Object).
- 비즈니스 로직 처리
- 컨트롤러는 필요에 따라 서비스 계층을 호출하여 비즈니스 로직을 처리
(데이터베이스 조회, 외부 API 호출 등이 이루어질 수 있다)
- 컨트롤러는 필요에 따라 서비스 계층을 호출하여 비즈니스 로직을 처리
- 모델 생성
- 처리된 데이터는 Model 객체에 담음
(RestController의 경우 반환값이 곧바로 응답 본문이 됨)
- 처리된 데이터는 Model 객체에 담음
- ViewResolver:
- 컨트롤러가 뷰 이름을 반환한 경우, ViewResolver가 실제 뷰 객체를 찾음
(RESTful API의 경우 이 단계가 생략가능)
- 컨트롤러가 뷰 이름을 반환한 경우, ViewResolver가 실제 뷰 객체를 찾음
- 뷰 렌더링
- 선택된 뷰가 모델 데이터를 사용하여 최종 출력을 생성
- REST API의 경우, 이 단계에서 객체가 JSON 등으로 직렬화됨
- 응답 반환
- 생성된 응답이 DispatcherServlet을 거쳐 서블릿 컨테이너로 전달
- 서블릿 컨테이너는 이 응답을 HTTP 응답으로 클라이언트에게 전송
- 예외 처리
- 처리 과정 중 예외가 발생하면 DispatcherServlet의 예외 처리 메커니즘이 동작
- @ExceptionHandler, @ControllerAdvice 등을 통해 정의된 예외 처리기가 호출될 수 있음
참조
https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b
스프링 MVC - 구조 이해
목차
catsbi.oopy.io