스프링 MVC는 스프링 프레임워크의 웹 애플리케이션 개발을 위한 Model-View-Controller (MVC) 아키텍처 패턴을 구현한 모듈이다. 이 패턴은 애플리케이션을 세 개의 주요 구성 요소로 분리하여 개발의 효율성을 높이고 유지보수를 쉽게 만든다.
MVC(Model-View-Controller)는 애플리케이션의 관심사를 분리하는 디자인 패턴으로, 다음과 같은 세 가지 역할을 가진다.
User, Product, Order 등의 도메인 객체user.html, product.jsp, JSON API@Controller, @RestController 사용스프링 MVC는 클라이언트의 요청을 처리하고 응답하는 과정에서 다음과 같은 흐름을 따른다.
1. 클라이언트 요청: 사용자가 브라우저에서 GET /users 요청을 보냄
2. 디스패처 서블릿(DispatcherServlet): 요청을 가로채어 적절한 컨트롤러를 찾음
3. 핸들러 매핑(HandlerMapping): 요청을 처리할 컨트롤러를 결정
4. 컨트롤러(Controller): 비즈니스 로직 처리 후 Model에 데이터를 저장
5. 뷰 리졸버(ViewResolver): 응답할 View를 결정 (예: user.html)
6. View 렌더링: 최종 HTML 응답을 생성하여 클라이언트에 반환
@Controller 또는 @RestController 어노테이션을 사용하여 정의@Controller
@RequestMapping("/users")
public clsas UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id, Model model) {
User user = userService.findUserById(id);
model.addAttribute("user", user);
return "userDetail"; // View Name
}
}
Model, ModelAndView를 사용하여 데이터를 View에 전달model.addAttribute("user", user);
ViewResolver가 적절한 View를 찾아 응답return "userDetail"; → userDetail.html을 찾아 응답@Controller
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String hello(Model model) {
model.addAtrribute("message", "Hello, Spring MVC!");
return "hello"; // View 이름 (hello.html)
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring MVC Example</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
@RestController를 사용하면 JSON 형태로 데이터를 응답할 수 있음@RestController
@RequestMapping("/api/users")
public class UserApiController {
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findUserById(id);
return ResponseEntity.ok(user);
}
}
@GetMapping, @PostMapping 등)스프링 MVC는 강력한 웹 애플리케이션 개발을 위한 구조를 제공하며, 다양한 뷰 기술과 쉽게 통합될 수 있다. 특히 API 개발을 할 떄는 @RestController를 활용하여 RESTful 서비스를 구현할 수 있다.