프레임워크/Spring

[Spring] Spring MVC

munsik22 2026. 3. 9. 19:41

Spring MVC란?

Spring MVC는 웹 요청을 받아서, 자바 코드로 처리하고, 그 결과를 화면이나 JSON으로 돌려주는 Spring의 웹 기술이다.
  1. Model: 데이터를 담는 부분으로, 화면에 보여줄 값이다.
    • 회원 정보
    • 게시글 목록
    • 상품 정보
  2. View: 사용자에게 보이는 화면으로, 결과물을 보여주는 부분이다.
    • HTML 페이지
    • 템플릿 화면
  3. Controller: 요청을 받아서 처리하는 자바 코드로, 중간에서 일을 처리하는 부분이다.
    • /login 요청 처리
    • /products 요청 처리
    • 데이터 조회 후 화면으로 넘기기

Spring MVC의 동작 흐름

  1. 사용자가 URL로 요청을 보냄
  2. Spring MVC가 그 요청을 받음
  3. 어떤 Controller가 처리할지 찾음
  4. Controller가 필요한 작업을 수행함
  5. 데이터를 화면에 넘기거나 JSON으로 반환함
  6. 최종 결과를 사용자에게 응답함

Controller 코드 예시

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "안녕하세요");
        return "hello";
    }
}
  • @Controller: 이 클래스가 웹 요청을 처리한다는 뜻이다.
  • @GetMapping("/hello"): /hello 주소로 들어오면 이 메서드가 실행된다.
  • model.addAttribute("message", "안녕하세요"): 화면에 넘길 데이터를 담는다.
  • return "hello": hello.html 같은 화면 파일을 찾아서 보여주라는 뜻이다.

위 예제를 MVC로 나누면 이렇게 볼 수 있다.

  • Controller: HelloController → 요청을 처리
  • Model: message = "안녕하세요" → 데이터를 담음
  • View: hello.html → 화면에 보여줌

@Controller와 @RestController 차이

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home";
    }
}

@RestController
public class ApiController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}
  • @Controller: 보통 HTML 화면을 보여줄 때 많이 사용 → 웹사이트 화면 중심에서 주로 사용
  • @RestController: 보통 JSON API를 만들 때 사용 → 프론트엔드나 앱이 가져갈 API에서 주로 사용

위의 예제 코드에서 @Controllerhome.html라는 파일을 찾아 반환하지만, @RestController"hello"라는 문자열을 반환한다.


Spring MVC의 핵심 구성

이름 설명 예시
DispatcherServlet ▪ 모든 요청을 먼저 받아서 정리해주는 중심 역할
▪ 사용자의 요청이 들어오면 먼저 여기서 받고, 어느 Controller로 보낼지 정해주는 기능을 수행한다.
▪ 요청 받기
▪ 처리 담당 찾기
▪ 결과 정리
▪ 응답 보내기
Controller 실제로 요청을 처리하는 자바 코드 로그인 처리
▪ 게시글 목록 조회
▪ 회원가입 처리
Model 화면에 넘길 데이터를 담는다. 사용자 이름
▪ 게시글 제목
▪ 상품 가격
View 사용자에게 보여지는 최종 화면 Thymeleaf HTML
▪ JSP

Spring MVC로 할 수 있는 것

화면 반환 데이터 처리 응답 처리
  • 홈페이지
  • 로그인 페이지
  • 게시판 페이지
  • URL 파라미터 받기
  • 폼 입력 받기
  • JSON 요청 받기
  • HTML 반환
  • JSON 반환
  • 문자열 반환

왜 많이 사용할까?

  • 명확한 역할 분리: 비즈니스 로직(Model)과 화면(View)이 철저히 분리되어 있어, 디자이너/퍼블리셔와 개발자가 협업하기 좋다.
  • 유연성과 확장성: ViewResolver, HandlerMapping 등 다양한 컴포넌트들을 인터페이스로 제공하므로, 필요에 따라 쉽게 커스터마이징하거나 교체할 수 있다.
  • 강력한 어노테이션 기반 설정: @Controller, @RequestMapping, @GetMapping 등의 어노테이션을 사용하여 매우 직관적이고 적은 코드로 웹 라우팅과 설정을 할 수 있다.
  • Spring 생태계와의 완벽한 통합: Spring의 핵심 기능인 의존성 주입(DI)이나 관점 지향 프로그래밍(AOP), 보안(Spring Security) 등과 매우 자연스럽게 연동된다.

Spring과 Spring MVC와 Spring Boot의 관계

  • Spring: 전체 큰 프레임워크 (본체)
  • Spring MVC: Spring 안에 들어 있는 웹 기능
  • Spring Boot: Spring 프로젝트를 쉽게 시작하게 해주는 도구