Backend
home

Spring MVC 패턴이란?

생성 일시
2025/05/04 15:44
태그
SpringBoot
게시일
2025/05/05
최종 편집 일시
2025/05/04 16:18
GitHub 링크

Spring MVC 패턴이란?

Spring Framework에서 제공하는 MVC 패턴은 웹 어플리케이션 개발 시 비즈니스 로직, UI, 사용자 입력 처리를 명확히 분리하여 유지보수성과 확장성을 높이기 위한 아키텍처 패턴이다.
MVC란 Model-View-Controller의 약자로, 각 레이어가 다음과 같은 역할을 한다.

1. Model (모델)

•
비즈니스 로직과 데이터를 담당한다.
•
데이터베이스와의 통신이나, 핵심 도메인 로직이 여기에 위치한다.
•
Spring에서는 Service Layer + Repository Layer가 이 영역에 해당할 수 있다.
•
User, Order 엔티티 클래스, UserRepository, UserService 등이 모델이다.

2. View (뷰)

•
사용자에게 보여지는 UI 영역이다.
•
모델 데이터를 기반으로 화면을 렌더링한다.
•
Spring MVC에서는 보통 JSP, Thymeleaf, Mustache 등을 사용하여 View를 구현한다.
•
최근에는 React나 Vue와 같은 프론트엔드 라이브러리, 프레임워크와 연동해 JSON 응답으로 API View를 제공하기도 한다.

3. Controller (컨트롤러)

•
사용자의 요청을 처리하고, 적절한 모델 데이터를 조회한 뒤 뷰에 전달하는 역할을 한다.
•
사용자의 입력을 받아 검증하고, 서비스 레이어를 호출하여 결과를 반환한다.
•
Spring에서는 @Controller 나 @RestController 로 구현한다.
•
로그인 요청 처리, 게시글 작성 처리 등을 담당하는 클래스.

Spring MVC의 동작 흐름

1.
사용자 요청:
a.
브라우저에서 URL을 호출하면, 요청이 Spring의 DispatcherServlet에 도달한다.
2.
Handler Mapping:
a.
DispatcherServlet은 URL과 매핑되는 Controller를 찾는다.
3.
Controller 호출:
a.
해당 Controller 메서드가 실행되어 비즈니스 로직을 수행하고 모델 데이터를 반환한다.
4.
View Resolver:
a.
View가 렌더링되어 최종 HTML을 사용자에게 응답한다. (또는 JSON 응답일 경우 데이터 반환)
요청 → DispatcherServlet → Controller → Service → Repository → DB ↓ Model 데이터 ↓ View Resolver → View 렌더링 → 응답
Java
복사

DispatcherServlet의 역할

DispatcherServlet은 Spring MVC에서 Front Controller 역할을 한다. 즉, 모든 HTTP 요청을 중앙에서 받아 적절한 Controller로 분배하는 역할을 한다.
•
브라우저 요청 → DispatcherServlet이 가장 먼저 받음.
•
내부적으로 HandlerMapping을 통해 어떤 Controller가 처리할지 결정.
•
Controller에서 반환한 결과를 ViewResolver를 통해 View로 변환하거나, 바로 응답.
“모든 요청의 관문” 역할이며, 요청을 받고, 로직 처리 후 응답까지 전체 흐름을 제어한다. ⭐ DispatcherServlet = Spring MVC의 중심 컨트롤 타워

ViewResolver란

ViewResolver는 Controller에서 반환한 논리적 View 이름을 실제 View 파일로 변환하는 역할을 한다.
예를 들어:
return "userList";
Java
복사
라고 Controller가 반환하면,
ViewResolver가 이를 → /WEB-INF/views/userList.jsp로 변환해 렌더링한다.
동작 예시
•
논리적 이름: “userList”
•
ViewResolver 매핑: /WEB-INF/views/ + userList + .jsp
•
최종 경로: /WEB-INF/views/userList.jsp
⭐ ViewResolver = 논리적 이름 → 물리적 파일 매핑 담당자

@Controller vs @RestController 차이점

어노테이션
반환 형태
사용 목적
@Controller
View (HTML, JSP 등)
웹 페이지 렌더링용
@RestController
JSON / XML
REST API용 (데이터 응답)

1. @Controller

•
ViewResolver를 거쳐 HTML 뷰를 반환.
•
보통 Thymeleaf, JSP와 함께 사용.
@Controller public class UserController { @GetMapping("/users") public String getUsers() { return "userList"; // View 이름 반환 } }
Java
복사

2. @RestController

•
@Controller + @ResponseBody 조합.
•
데이터를 직접 반환 (JSON/XML) 하며 View를 거치지 않음.
@RestController public class UserApiController { @GetMapping("/api/users") public List<User> getUsers() { return userService.findAll(); // JSON으로 반환 } }
Java
복사
⭐ 간단하게 말하면:
@Controller → View 반환용,
@RestController → 데이터(API) 반환용

MVC 패턴을 사용하면 어떤 점이 좋은가?

MVC (Model-View-Controller) 패턴의 가장 큰 장점은 바로 관심사의 분리(Separation of Concerns, SoC) 이다.
얻는 효과:
•
유지보수 용이: View, 비즈니스 로직, 데이터 처리가 분리되어 수정이 쉬움.
•
테스트 용이: Controller와 Service를 독립적으로 단위 테스트 가능.
•
확장성 높음: View를 React나 모바일 앱용 API로 손쉽게 교체 가능.
•
협업에 유리: 프론트엔드(뷰)와 백엔드(모델, 컨트롤러)를 다른 팀이 동시에 작업 가능.
"MVC 패턴은 관심사를 분리해 유지보수, 테스트, 확장성을 높여준다. 특히, View와 비즈니스 로직을 독립적으로 개발하고 변경할 수 있는 구조를 제공한다."