Backend
home

Spring MVC 패턴이란?

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

Spring MVC 패턴이란?

Spring Framework에서 제공하는 MVC 패턴은 웹 어플리케이션 개발 시 비즈니스 로직, UI, 사용자 입력 처리를 명확히 분리하여 유지보수성과 확장성을 높이기 위한 아키텍처 패턴이다.
MVCModel-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 응답일 경우 데이터 반환)
요청 → DispatcherServletControllerServiceRepositoryDBModel 데이터 ↓ View ResolverView 렌더링 → 응답
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와 비즈니스 로직을 독립적으로 개발하고 변경할 수 있는 구조를 제공한다."