Hyeok의 웹 개발 블로그

<2025.03.21> MVC 패턴 본문

TIL/Spring

<2025.03.21> MVC 패턴

Yhyeok 2025. 3. 21. 21:19

 

📌Spring MVC 

Spring 은 MVC 패턴에 프론트 컨트롤러 패턴, 어댑터 패턴이 적용된 구조를 가지고 있다.

 

  • 실행순서
    1. Client로 부터 HTTP 요청(Request)을 받는다.
    2. Handler 조회
      • Handler Mapping을 통해 요청 URL에 Mapping된 Handler(Controller)를 조회
    3. Handler를 처리할 Adapter 조회
      • Handler를 처리할 수 있는 Handler Adapter를 조회
    4. Handler Adapter 실행(handle)
      • 알맞은 ****어댑터가 존재한다면 ****Handler Adapter에게 요청을 위임한다.
    5. Handler 실행(호출)
      • Handler Adapter가 실제 Handler(Controller)를 호출하여 실행 및 결과 반환
    6. Model And View 반환(return)
      • Handler Adapter는 Handler가 반환 하는 정보를 ModelAndView 객체로 변환하여 반환
    7. viewResolver 호출(알맞은 View 요청)
      • View Resolver를 찾고 실행
    8. View 반환
      • View Resolver는 View의 논리 이름을 물리 이름으로 전환하는 역할을 수행하고 Rendering 역할을 담당하는 View 객체를 반환
    9. View Rendering
      • View를 통해서 View를 Rendering

 

📌 Dispatcher Servlet

Spring MVC의 프론트 컨트롤러는 Dispatcher Servlet이다.

  1. Dispatcher Servlet은 HttpServlet을 상속 받아서 사용하고 Servlet의 한 종류이다.
  2. Spring Boot는 Dispatcher Servlet을 서블릿으로 자동으로 등록(내장 Tomcat WAS를 실행하면서 등록한다)하고 모든 URL 경로에 대해서 Mapping 한다. → (urlPatterns=”/”)
  3. 더 자세한 URL 경로가 높은 우선순위를 가진다.
    • 개발자가 만들 Servlet이 항상 우선순위가 높아서 실행된다.

 

💡 Spring MVC의 주요 Interface 

  • org.springframework.web.servlet
    1. HandlerMapping
    2. HandlerAdapter
    3. ViewResolver
    4. View

 

💡 @Component

Spring Bean에 등록하는 역할
- Spring Bean은 애플리케이션의 구성 요소를 정의하는 객체
- Servlet 이 Servlet Container에 등록되는 것과 같다

 

💡 Handler Mapping 과 Handler Adapter

Handler Mapping


핸들러 매핑에서 ExampleController를 찾을 수 있어야 한다.

→ Spring Bean의 이름으로 핸들러를 찾을 수 있는 핸들러 매핑이 필요하다.

  • 우선순위 순서
  1. RequestMappingHandlerMapping
    • 우선순위가 가장 높다
    • Annotation 기반 Controller의 @RequestMapping에 사용
  2. BeanNameUrlHandlerMapping(위 예시코드에 사용)
    • Spring Bean Name으로 HandlerMapping


Handler Adapter

Handler Mapping을 통해 찾은 핸들러를 실행할 수 있는 Handler Adapter가 필요

→ Controller Interface를 실행할 수 있는 Handler Adapter를 찾고 실행한다.

 

  • 우선순위 순서
  1. RequestMappingHandlerAdapter
    • Annotation 기반 Controller의 @RequestMapping에서 사용
  2. HttpRequestHandlerAdapter
    • HttpRequestHandler 처리
  3. SimpleControllerHandlerAdapter(위 예시코드에 사용)
    • Controller Interface 처리

 

📌 Spring Boot에 이미 두 가지 모두 구현되어있어서 개발자가 직접 구현할 일은 거의 없음!

 

 


🔎 Spring MVC 동작 순서

 1️⃣ Handler Adapter 호출

  • HandlerAdapter를 통해 "test" 논리 View Name 얻음

2️⃣ ViewResolver 호출

  • "test" 라는 View Name으로 viewResolver를 우선순위 대로 호출
  • BeanNameViewResolver는 View를 찾지 못한다.
  • InternalResourceViewResolver 호출

3️⃣ InternalResourceViewResolver

  • nternalResourceViewResolver.buildView(String viewName)
    InternalResourceView 반환

4️⃣ InternalResourceView

  • JSP와 같이 서버에서 이동하는 forward()를 호출하는 경우와 같을 때 사용

 

5️⃣ view.render()

  • 외부에서 vier.render()를 호출 후 RequestDispatcher를 가져와 forward() 한다.

'TIL > Spring' 카테고리의 다른 글

<2025.03.31> IOC / DI  (0) 2025.03.31
<2025.03.28> 객체 지향 설계 (SOLID 원칙)  (0) 2025.03.28
<2025.03.20> Spring 입문 2주차  (0) 2025.03.20
<2025.03.19> Spring 입문 - Web Application  (0) 2025.03.20
<2025.03.18> HTTP 기초  (0) 2025.03.18