스프링 MVC | 개요

Faithful Dev·2025년 2월 25일

스프링 프레임워크

목록 보기
10/20

스프링 MVC는 스프링 프레임워크의 웹 애플리케이션 개발을 위한 Model-View-Controller (MVC) 아키텍처 패턴을 구현한 모듈이다. 이 패턴은 애플리케이션을 세 개의 주요 구성 요소로 분리하여 개발의 효율성을 높이고 유지보수를 쉽게 만든다.


MVC 패턴

MVC(Model-View-Controller)는 애플리케이션의 관심사를 분리하는 디자인 패턴으로, 다음과 같은 세 가지 역할을 가진다.

Model (모델)

  • 애플리케이션의 데이터와 비즈니스 로직을 담당
  • 데이터베이스와의 연동, 서비스 로직을 수행
  • 예: User, Product, Order 등의 도메인 객체

View (뷰)

  • 사용자에게 데이터를 보여주는 역할
  • HTML, JSP, Thymeleaf, JSON 등의 형태로 응답
  • 예: user.html, product.jsp, JSON API

Controller (컨트롤러)

  • 사용자의 요청을 받아 적절한 서비스(Model)와 View를 연결해주는 역할
  • URL 매핑, 요청 처리, 응답 반환
  • 예: @Controller, @RestController 사용

스프링 MVC의 동작 원리

스프링 MVC는 클라이언트의 요청을 처리하고 응답하는 과정에서 다음과 같은 흐름을 따른다.
1. 클라이언트 요청: 사용자가 브라우저에서 GET /users 요청을 보냄
2. 디스패처 서블릿(DispatcherServlet): 요청을 가로채어 적절한 컨트롤러를 찾음
3. 핸들러 매핑(HandlerMapping): 요청을 처리할 컨트롤러를 결정
4. 컨트롤러(Controller): 비즈니스 로직 처리 후 Model에 데이터를 저장
5. 뷰 리졸버(ViewResolver): 응답할 View를 결정 (예: user.html)
6. View 렌더링: 최종 HTML 응답을 생성하여 클라이언트에 반환


스프링 MVC 주요 구성 요소

DispatcherServlet (디스패처 서블릿)

  • 스프링 MVC의 핵심 역할을 수행하는 프론트 컨트롤러
  • 모든 요청을 받아 적절한 핸들러(Controller)로 전달하고, 응답을 반환

Controller (컨트롤러)

  • @Controller 또는 @RestController 어노테이션을 사용하여 정의
  • 요청을 처리하고, Model을 통해 데이터를 View에 전달
@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 (모델)

  • View에 전달할 데이터를 저장하는 객체
  • Model, ModelAndView를 사용하여 데이터를 View에 전달
model.addAttribute("user", user);

View (뷰)

  • HTML, JSP, Thymeleaf, JSON 등의 형태로 응답을 렌더링하는 역할
  • ViewResolver가 적절한 View를 찾아 응답

HandlerMapping (핸들러 매핑)

  • 요청된 URL을 어떤 컨트롤러가 처리할지 결정하는 역할

ViewResolver (뷰 리졸버)

  • 컨트롤러가 반환한 View 이름을 실제 파일로 매핑하는 역할
  • 예: return "userDetail";userDetail.html을 찾아 응답

스프링 MVC 예제

컨트롤러 작성

@Controller
@RequestMapping("/hello")
public class HelloController {
	
    @GetMapping
    public String hello(Model model) {
    	model.addAtrribute("message", "Hello, Spring MVC!");
        return "hello"; // View 이름 (hello.html)
	}
}

Thymeleaf 뷰 (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와 API 개발

  • @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);
	}
}

Spring MVC의 장점

  • 관시맛 분리 (Separation of Concerns): 비즈니스 로직과 UI의 분리
  • 유지보수성 (Maintainability): 코드 가독성이 높아지고 수정이 용이함
  • 확장성 (Extensibility): 다양한 뷰 기술(JSP, Thymeleaf, JSON)과 쉽게 연동 가능
  • 유연한 요청 처리: 다양한 URL 패턴 매핑 가능 (@GetMapping, @PostMapping 등)

정리

스프링 MVC는 강력한 웹 애플리케이션 개발을 위한 구조를 제공하며, 다양한 뷰 기술과 쉽게 통합될 수 있다. 특히 API 개발을 할 떄는 @RestController를 활용하여 RESTful 서비스를 구현할 수 있다.

profile
Turning Vision into Reality.

0개의 댓글