Dispatchservlet이 Spring boot에서 controller로 이동하는 과정

2025. 2. 25. 12:11·Spring

 

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이 받아, 클라이언트에게 반환합니다.

 

Dispatcher 흐름도

반응형

'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
'Spring' 카테고리의 다른 글
  • Spring Boot 핵심 개념
  • Spring boot 버전 정리
  • 동시성 제어 (낙관적 락, 비관적 락, 분산 락)
  • Transactional 관심사의 분리를 통해 로그 기록 남기기
wanduek
wanduek
차근차근 쌓아가는 지식
  • wanduek
    완득님의 블로그
    wanduek
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Onboarding (0)
      • 아티클 (0)
      • SQL 정리 (20)
      • 웹개발 기초정리(프엔) (9)
      • (Java)코테연습 (27)
      • 미니 프로젝트 (9)
        • 자기소개 웹페이지 (5)
        • 수강생 관리 프로그램(Java) (4)
      • GitHub 오류 및 명령어 정리 (7)
      • Java 문법정리 (Array부터) (17)
      • Java로 이용한 기능 (2)
      • Web지식 (12)
        • web3 (6)
        • 네트워크 (6)
      • 인텔리제이 오류 대처 방법 (1)
      • Computer Science (7)
      • Spring (38)
        • 미니 프로젝트(배달) (2)
        • Spring 트러블 슈팅 (3)
        • QueryDSL, JPQL (3)
        • 미니 프로젝트(뉴스피드) (5)
        • 미니 프로젝트(Trello) (2)
      • 개발자 밋업 (1)
      • Docker (2)
      • Redis (1)
      • AWS (6)
        • AWS 트러블 슈팅 (2)
      • Jmeter (2)
      • 우리 지금 만나 (12)
      • Kafka (1)
      • RabbitMQ (2)
        • 트러블 슈팅 (1)
      • STOMP (2)
      • WebSocket (3)
        • 트러블 슈팅 (2)
      • Node.js (2)
      • Elastic Search (2)
      • Nginx (1)
      • 퍼블엘 (2)
      • openresty (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SQL
    where
    ㅏㄷ
    git
    백앤드개발자 #초심자
    groupby
    github
    json
    jquery
    fetch
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
wanduek
Dispatchservlet이 Spring boot에서 controller로 이동하는 과정
상단으로

티스토리툴바