개발일기/CS(면접)

API 요청에 대한 Spring 내부 동작

w.llama 2024. 8. 13. 22:01

 

Spring Framework의 API 요청 처리 과정

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

참조

https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b

 

스프링 MVC - 구조 이해

목차

catsbi.oopy.io