TIL - 20250824

juni·2025년 8월 24일

TIL

목록 보기
104/317

0824 Spring MVC 핵심 개념 정리


✅ 1. Spring MVC란?

  • Spring MVC는 Spring 프레임워크에서 제공하는 웹(Web) 애플리케이션 개발 모듈입니다. 이름에서 알 수 있듯이, 웹 개발의 표준적인 디자인 패턴인 MVC(Model-View-Controller) 패턴을 기반으로 설계되었습니다.

  • 핵심 목표: 비즈니스 로직(Model), 화면(View), 그리고 요청 처리(Controller)의 역할을 명확하게 분리(Separation of Concerns)하여, 애플리케이션의 유연성과 확장성을 높이는 것입니다.


✅ 2. Spring MVC의 심장: DispatcherServlet

  • Spring MVC의 모든 요청은 DispatcherServlet이라는 단 하나의 서블릿을 통해 처리됩니다. DispatcherServlet은 클라이언트의 모든 요청을 가장 먼저 받는 중앙 관제탑(Front Controller) 역할을 합니다.

  • DispatcherServlet의 역할:

    1. 클라이언트로부터 들어온 요청을 가로챕니다.
    2. 요청을 처리할 적절한 컨트롤러(Handler)를 찾도록 HandlerMapping에게 위임합니다.
    3. 찾아낸 컨트롤러를 실행하기 위해 HandlerAdapter에게 위임합니다.
    4. 컨트롤러가 반환한 뷰(View) 이름을 ViewResolver에게 전달하여 실제 뷰 객체를 찾습니다.
    5. 찾아낸 뷰에게 모델(Model) 데이터를 전달하여 최종 응답(HTML, JSON 등)을 생성하도록 요청합니다.

✅ 3. Spring MVC의 주요 구성 요소

컴포넌트역할설명
DispatcherServletFront Controller모든 HTTP 요청을 가장 먼저 받아 처리의 전 과정을 조율하는 중앙 제어 장치
HandlerMapping핸들러(컨트롤러) 탐색요청 URL에 매핑되는 컨트롤러(메서드)를 찾아 DispatcherServlet에 반환
HandlerAdapter핸들러 실행HandlerMapping이 찾은 컨트롤러를 실제로 실행하고, 그 결과를 ModelAndView 객체로 변환하여 반환
Controller요청 처리 및 비즈니스 로직 호출실제 요청을 처리하고, 서비스 계층을 호출하여 비즈니스 로직을 수행한 뒤, 결과 데이터(Model)와 뷰 이름(View Name)을 반환
Model데이터 저장소컨트롤러가 처리한 결과 데이터(비즈니스 로직의 결과)를 담는 객체. View에 전달됨
ViewResolver뷰 탐색컨트롤러가 반환한 논리적인 뷰 이름(e.g., "home")을 실제 물리적인 뷰 파일(e.g., /WEB-INF/views/home.jsp)로 변환
View응답 렌더링Model의 데이터를 사용하여 최종 응답 화면(HTML, JSON 등)을 생성하고 클라이언트에게 전송

✅ 4. Spring MVC의 요청 처리 흐름

  1. [요청] 클라이언트가 URL을 요청하면 DispatcherServlet이 요청을 받습니다.
  2. [핸들러 탐색] DispatcherServletHandlerMapping에게 요청 URL을 처리할 컨트롤러를 찾아달라고 요청합니다.
  3. [핸들러 실행 준비] DispatcherServlet은 찾아낸 컨트롤러를 실행할 수 있는 HandlerAdapter를 찾습니다.
  4. [컨트롤러 실행] HandlerAdapter는 해당 컨트롤러의 메서드를 실행합니다.
  5. [비즈니스 로직] 컨트롤러는 비즈니스 로직(Service)을 호출하고, 그 결과 데이터를 Model 객체에 담습니다.
  6. [결과 반환] 컨트롤러는 Model과 함께 뷰의 논리적 이름(String)을 DispatcherServlet에 반환합니다. (내부적으로 ModelAndView 객체로 처리됨)
  7. [뷰 탐색] DispatcherServletViewResolver에게 뷰 이름을 전달하여 실제 View 객체를 찾습니다.
  8. [렌더링] DispatcherServlet은 찾은 View 객체에 Model 데이터를 전달하여 화면을 렌더링하도록 요청합니다.
  9. [응답] ViewModel 데이터를 바탕으로 최종 응답(HTML 등)을 생성하여 클라이언트에게 반환합니다.

✅ 5. 핵심 어노테이션

어노테이션설명
@Controller해당 클래스가 Spring MVC의 컨트롤러임을 나타냅니다.
@RestController@Controller@ResponseBody를 합친 것으로, 주로 REST API에서 JSON/XML 형태의 데이터를 반환할 때 사용합니다.
@RequestMapping특정 URL 경로와 컨트롤러의 메서드를 매핑합니다. (@GetMapping, @PostMapping 등으로 축약 가능)
@RequestParamHTTP 요청 파라미터(e.g., ?name=John)를 메서드의 매개변수에 바인딩합니다.
@ModelAttribute요청 파라미터를 객체(DTO)에 바인딩하거나, Model에 속성을 추가할 때 사용합니다.
@RequestBodyHTTP 요청의 본문(Body)에 담긴 JSON/XML 데이터를 객체에 바인딩합니다.
@ResponseBody메서드의 반환 값이 뷰 이름이 아니라, HTTP 응답 본문(Body)에 직접 쓰여져야 함을 나타냅니다. (@RestController에 포함됨)
@PathVariableURL 경로의 일부(e.g., /users/{userId})를 메서드의 매개변수에 바인딩합니다.

📌 요약

  • Spring MVC는 MVC 패턴을 기반으로 관심사를 분리하여 웹 애플리케이션을 개발하는 프레임워크입니다.
  • DispatcherServlet이 모든 요청을 받아 중앙에서 조율하는 Front Controller 패턴을 사용합니다.
  • HandlerMapping, HandlerAdapter, ViewResolver 등의 구성 요소들이 DispatcherServlet과 협력하여 요청을 체계적으로 처리합니다.
  • 어노테이션 기반의 설정을 통해 개발자는 비즈니스 로직에 더 집중할 수 있습니다.

0개의 댓글