Spring Web MVC, Dispatcher-Servlet의 동작 원리

2025. 2. 20. 16:44·[Spring]

MVC패턴이란?

간단히 말해 Model, View, Controller의 약자로 유지보수 하기 쉽게 만든 개발자들의 가장 대중적인 디자인 패턴이다.

사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달한다.

 

 

 

Model

정보 및 데이터를 담당하는 부분이다.

  1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
  2. View나 Controller에 대해서 어떤 정보도 알지 말아야 한다.
  3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

View

Controller에게 받은 Model의 데이터를 클라이언트에게 보여주는 부분이다.

  1. Model이 가지고 있는 정보를 따로 저장해서는 안된다.
  2. Model이나 Controller를 알고 있을 필요가 없다.
  3. 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.

Controller

Model과 View 사이에서 데이터 흐름을 제어한다. 사용자가 접근한 URL에 따라 요청을 파악하고 URL에 적절한 Method(GET, POST 등)를 호출하여 Service에서 비즈니스 로직을 처리하는 부분이다.

  1. Model이나 View에 대해서 알고 있어야 한다.
  2. Model이나 View의 변경을 모니터링 해야 한다.

 


Dispatcher-Servlet 이란?

HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 Spring MVC의 

프론트 컨트롤러(Front Controller)

  • 클라이언트로부터 어떠한 요청이 오면 Tomcat(톰캣)과 같은 서블릿 컨테이너가 요청을 받게 되고, 이 모든 요청을 프론트 컨트롤러인 디스패처 서블릿이 가장 먼저 받게 된다.
  • Front Controller(프론트 컨트롤러)라는 용어가 사용되는데, Front Controller는 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러로써, MVC 구조에서 함께 사용되는 디자인 패턴이다.

 

1. 클라이언트 요청

클라이언트에서 요청(HttpServletRequest)이 들어오면, 서블릿 컨테이너는 DispatcherServlet으로 이를 전달한다.

2. Handler 조회

DispatcherServlet은 핸들러 매핑(HandlerMapping)을 통해 요청 URI에 매핑된 핸들러(Controller)를 탐색한다.

3. Handler Adapter 조회

조회한 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.

4. Handler Adapter 실행

핸들러 어댑터(HandlerAdapter)를 통해 핸들러(Controller)를 호출한다.

5. Handler(Controller) 실행

핸들러(Controller)를 실행하여 컨트롤러에서 요청을 처리하고, 응답을 다시 핸들러 어댑터로 반환한다.

6. ModelAndView 반환

핸들러 어댑터는 이 응답을 ModelAndView로 가공하여 반환한다.

7-1. @Controller 사용 시 

1) View Resolver를 찾고 실행한다.

2) View Resolver는 View의 논리 이름을 물리 이름으로 바꾸고, 랜더링 역할을 담당하는 View 객체를 반환한다.

3) View를 랜더링 하여 클라이언트에 반환한다.

7-2. @RestController 사용 시 

1) View와 ViewResolver를 거치지 않는다.

2) Controller로 부터 반환 받은 데이터를 MessageConverter를 거쳐서 Json 형식으로 변환한다.

3) Json을 ResponseBody로 응답한다.

 

https://dawn-lee.tistory.com/entry/RestController%EC%99%80-Controller-%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

@RestController와 @Controller 의 차이

1. @RestController @RequestMapping("/api/users") @PostMapping("/register") 사용 시 (API 방식)  이 경우는 RESTful API 방식으로 동작하므로, 회원가입 HTML 페이지에서 AJAX를 사용하여 서버와 데이터를 주고받습니다.

dawn-lee.tistory.com

 

 

'[Spring]' 카테고리의 다른 글

@NoArgsConstructor 과 @AllArgsConstructor  (0) 2025.02.21
IoC와 DI 의 개념 설명  (0) 2025.02.20
@Bean과 @Components의 차이  (0) 2025.02.20
@RestController와 @Controller 의 차이  (0) 2025.02.17
[Spring] 생성자 주입과 AppConfig 리팩터링  (0) 2024.08.05
'[Spring]' 카테고리의 다른 글
  • IoC와 DI 의 개념 설명
  • @Bean과 @Components의 차이
  • @RestController와 @Controller 의 차이
  • [Spring] 생성자 주입과 AppConfig 리팩터링
chungheon
chungheon
24365
  • chungheon
    MyLogging
    chungheon
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • [JAVA] (15)
      • [Spring] (13)
      • [SQL] (13)
      • [자료구조] (33)
        • [스택&큐] (8)
        • [해시] (5)
        • [힙] (0)
        • [정렬] (2)
        • [DP] (4)
        • [DFS,BFS] (9)
        • [그리디] (4)
      • [DevOps] (31)
        • [Docker] (6)
        • [AWS] (11)
        • [Redis] (8)
        • [Kafka] (4)
        • [Git] (2)
      • [ComputerScience] (5)
      • [정보처리기사] (5)
      • [기타] (13)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    자바
    Android
    HashMap
    논리연산자
    해시맵
    Combination
    액티비티
    참조형
    부모클래스
    안드로이드
    activity
    백트래킹
    where
    From
    전역변수
    SOLID원칙
    매니페스트
    SQL연산자
    manifest
    뷰
    Between
    desc
    자식클래스
    기본형
    클래스
    제어함수
    ASC
    null
    안드로이드 스튜디오
    접두어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
chungheon
Spring Web MVC, Dispatcher-Servlet의 동작 원리
상단으로

티스토리툴바