Spring/기타 / / 2026. 1. 22. 14:25

[Spring Boot] MVC 패턴 정리

1. MVC 패턴이란?

MVC(Model-View-Controller)는 소프트웨어 디자인 패턴 중 하나로, 애플리케이션의 역할을 세 가지로 나누어 관리한다.

  • Model (데이터): 애플리케이션의 정보와 데이터를 처리한다. (Entity, DTO)
  • View (화면): 사용자에게 보여지는 UI를 담당한다. (HTML, React, Mobile App)
  • Controller (제어): 사용자의 요청을 받아 모델과 뷰 사이를 연결한다. (@Controller, @RestController)

 

2. 시대에 따른 MVC의 변화: HTML vs JSON

과거에는 서버가 화면까지 다 만들었지만, 지금은 데이터만 보내주는 방식이 주류다.

 

① 전통적인 방식 (SSR: Server Side Rendering)

서버에서 직접 HTML을 그려서 브라우저에 던져주는 방식이다.

  • 응답: 완성된 HTML 파일
  • 특징: 페이지를 이동할 때마다 화면이 깜빡이며 새로고침된다.
  • 도구: JSP, Thymeleaf, Mustache

 

② 현대적인 API 방식 (CSR: Client Side Rendering)

서버는 JSON 데이터만 보내고, 화면은 프론트엔드(React, Vue)가 전담한다. 

  • 응답: JSON 데이터 ({"id": 1, "title": "공부하기"})
  • 특징: 필요한 데이터만 주고받으므로 빠르고 효율적이다. 웹뿐만 아니라 모바일 앱과도 같은 API를 공유할 수 있다.

※ Todo 프로젝트(이전 포스팅)  MVC 적용 상태

Model (데이터):
├─ Todo.java (Entity)
├─ TodoCreateRequest.java (DTO)
└─ TodoResponse.java (DTO)

View (화면):
└─ React (별도 프로젝트)

Controller (요청 처리):
└─ TodoController.java

 

3. 백엔드 내부의 흐름: Layered Architecture

MVC가 웹 애플리케이션의 전체적인 구조라면, Layered Architecture는 백엔드 서버 내부의 세분화된 역할 분담이다.

계층 (Layer) 역할 관련 파일
Presentation 클라이언트의 요청을 받고 응답을 반환한다 TodoController
Business 핵심 비즈니스 로직과 도메인 규칙을 처리한다 TodoService
Persistence 데이터베이스 접근 및 CRUD를 수행한다 TodoRepository
Data 실제 데이터 구조 및 전송 객체를 정의한다 Todo, TodoResponse

 

꿀팁: MVC의 Controller는 Presentation 계층에 해당하고, Model은 비즈니스/데이터 계층 전체에 걸쳐 존재한다고 이해하면 쉽다.

 

4. Spring MVC의 핵심: DispatcherServlet

스프링 부트 내부에서 요청이 어떻게 처리되는지 그 과정을 이해하는 것이 중요하다.

  1. DispatcherServlet: 모든 요청을 가장 먼저 받아 적절한 곳으로 배달해주는 '중앙 우체국' 역할을 한다.
  2. HandlerMapping: "이 URL은 어떤 컨트롤러가 처리해야 하지?"를 찾아준다.
  3. Controller: 실제 로직을 수행한다. (Service 호출 등)
  4. HttpMessageConverter: @RestController를 사용하면 객체를 JSON으로 자동 변환해준다.

 

5. Checkpoint

Spring MVC

  • 스프링에서 제공하는 웹 MVC 프레임워크
  • @Controller, @RestController 등이 Spring MVC의 일부  

Spring Boot MVC

  • Spring MVC를 Spring Boot에서 사용하는 것
  • 자동 설정이 추가되어 더 쉬움

MVC 패턴

  • 디자인 패턴 (Model-View-Controller)
  • 프레임워크와 무관한 개념
구분 MVC 패턴 Spring MVC
정체 소프트웨어 디자인 이론이자 아키텍처 패턴 스프링 프레임워크 내부에 포함된 실제 웹 MVC 모듈
역할 Model, View, Controller로 역할을 분리하자는 설계 규칙 MVC 규칙을 쉽게 구현할 수 있도록 지원하는 기능 집합
목적 코드 구조와 책임 분리를 명확히 정의 MVC 패턴을 실무에서 바로 적용할 수 있게 함
비유 레시피에 해당 (어떻게 요리할 것인가) 밀키트에 해당 (레시피대로 재료가 준비된 세트)

→ 스프링에서 MVC 패턴을 적용하려고 Spring MVC를 쓰는 것

 

Q. @Controller와 @RestController의 차이는?

  • @Controller: 주로 View(HTML)를 반환할 때 사용한다.
  • @RestController: JSON/XML 같은 데이터를 반환할 때 사용한다. (@Controller + @ResponseBody의 결합형)

Q. 왜 Entity를 직접 반환하지 않고 DTO를 사용하나?

  • 보안: Entity의 모든 필드(비밀번호 등)가 노출되는 것을 방지한다.
  • 독립성: DB 구조가 바뀌어도 API 스펙(응답 값)이 변하지 않도록 완충지대 역할을 한다.
  • 순환 참조 방지: JPA 사용 시 양방향 연관관계에서 발생하는 무한 루프 문제를 막아준다.
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유