본문 바로가기
스프링

스프링 MVC 구조

by 개발자 포비 2024. 12. 5.

스프링 MVC 핵심 컴포넌트

1. DispatcherServlet

  • 정의: 스프링 MVC의 핵심 컨트롤러로, 모든 HTTP 요청을 처리하는 중앙 서블릿
  • 특징:
    • 싱글톤 패턴으로 생성됨
    • 웹 요청의 진입점이자 요청 처리의 중심
    • 요청을 받아 적절한 핸들러로 라우팅
  • 주요 역할:
    • 요청 수신
    • 핸들러 매핑
    • 뷰 렌더링
    • 예외 처리
  • 추가 설명:
    • 웹 애플리케이션 시작 시 단 하나만 생성
    • 모든 요청의 진입점으로서 URL 매핑부터 응답 생성까지 전체 흐름 통제

2. HandlerMapping

  • 정의: 요청된 URL에 매핑되는 핸들러(컨트롤러)를 찾는 인터페이스
  • 특징:
    • 싱글톤으로 관리됨
    • 여러 구현체 존재 (RequestMappingHandlerMapping 등)
  • 주요 역할:
    • URL 패턴과 컨트롤러 메서드 간 매핑
    • 요청에 적합한 핸들러 결정
  • 추가 설명:
    • 애플리케이션 시작 시 @RequestMapping 정보를 내부 맵으로 저장
    • URL 패턴별 핸들러 메서드 정보를 보관
    • RequestMappingHandlerMapping이 가장 일반적으로 사용

3. HandlerAdapter

  • 정의: HandlerMapping에서 찾은 핸들러를 실제로 실행하는 인터페이스
  • 특징:
    • 싱글톤으로 관리됨
    • 다양한 핸들러 메서드 실행 지원
  • 주요 역할:
    • 핸들러 메서드 호출
    • 메서드 파라미터 바인딩
    • 다양한 메서드 시그니처 지원
  • 추가 설명:
    • RequestMappingHandlerAdapter가 @RequestMapping 메서드 처리
    • HttpServletRequest, @RequestParam, @PathVariable 등 다양한 파라미터 타입 자동 변환
    • ArgumentResolver를 통한 파라미터 바인딩

4. Controller

  • 정의: 실제 요청을 처리하는 핸들러
  • 특징:
    • 스프링 빈으로 등록되어 싱글톤으로 관리
    • @Controller 또는 @RestController 어노테이션 필수
  • 주요 역할:
    • URL 매핑 (@RequestMapping)
    • 비즈니스 로직 처리
    • 응답 데이터 생성

5. ModelAndView

  • 정의: 컨트롤러가 처리 결과와 view 정보를 함께 저장하는 객체
  • 특징:
    • 요청마다 새로 생성됨 (싱글톤 아님)
  • 주요 역할:
    • 데이터(Model) 저장
    • 이동할 뷰(View) 정보 설정

6. ViewResolver

  • 정의: 논리적 뷰 이름을 실제 물리적 뷰로 변환
  • 특징:
    • 싱글톤으로 관리됨
  • 주요 역할:
    • 뷰 이름 해석
    • 적절한 View 객체 반환

7. View

  • 정의: 최종적으로 클라이언트에게 보여줄 화면을 생성하는 객체
  • 특징:
    • 요청마다 새로 생성됨 (싱글톤 아님)
  • 주요 역할:
    • 모델 데이터 렌더링
    • 최종 응답 생성

요청 처리 흐름

  1. 클라이언트 요청 → DispatcherServlet
  2. HandlerMapping으로 URL에 맞는 핸들러 검색
  3. 해당 핸들러를 처리할 수 있는 HandlerAdapter 선택
  4. HandlerAdapter가 핸들러 메서드 실행
  5. 처리 결과를 ModelAndView로 변환
  6. ViewResolver로 뷰 검색
  7. View가 최종 응답 생성

컴포넌트 생명주기

  • 애플리케이션 시작 시 생성 (싱글톤)
    • DispatcherServlet
    • HandlerMapping
    • HandlerAdapter
    • Controller
    • ViewResolver
  • 요청마다 생성
    • ModelAndView
    • View

URL 매핑 처리

  • @RequestMapping으로 URL과 메서드 매핑
  • 컴포넌트 스캔으로 컨트롤러 자동 등록
  • 핸들러 매핑이 URL-메서드 정보 관리
  • 핸들러 어댑터가 메서드 실행 담당

출처 - https://velog.io/@gillog/Spring-MVC-%EA%B5%AC%EC%A1%B0

댓글