본문으로 건너뛰기
Advertisement

5.1 ~ 5.3 Spring MVC 모델의 이해

1. 클라이언트-서버 구조와 HTTP 통신 복습

웹은 크게 두 역할로 나뉩니다.

  • 클라이언트 (Browser/App): 요청을 보내는 쪽 (예: 크롬에서 URL 입력 또는 API 버튼 클릭)
  • 서버 (Spring Boot App): 요청을 받아 처리하고 응답을 돌려주는 쪽

이 둘이 소통하는 규약이 HTTP(HyperText Transfer Protocol) 입니다.

클라이언트                         서버(Spring Boot)
[브라우저] ---HTTP 요청(Request)---> [컨트롤러]
<--HTTP 응답(Response)--- [처리 결과 반환]

HTTP 요청/응답의 구조

구성 요소설명예시
URL어디로 요청하는가GET /api/users/1
Method어떤 작업을 하는가GET, POST, PUT, DELETE
Header요청의 메타 정보Content-Type: application/json
Body전송하는 데이터 (POST 등){"name": "홍길동"}
Status Code응답 결과 코드200 OK, 404 Not Found

2. MVC 아키텍처 패턴

MVC (Model-View-Controller) 는 애플리케이션의 역할을 3가지로 분리하는 설계 패턴입니다.

요청 → [Controller] → [Service/Model] → [View or JSON 응답]
레이어역할실제 코드
Model데이터와 비즈니스 로직UserService, UserRepository, User Entity
View사용자에게 보여지는 UIREST API → ** JSON 응답**(또는 Thymeleaf HTML)
Controller요청을 받아 Model을 호출하고 View를 결정@RestController 클래스

MVC를 분리하면 무엇이 좋은가?

  • 역할 명확화: 각 레이어가 자신의 책임에만 집중합니다.
  • 유지보수 용이: DB 로직을 바꿔도 Controller를 건드릴 필요가 없습니다.
  • 테스트 용이: 각 레이어를 독립적으로 단위 테스트할 수 있습니다.

3. DispatcherServlet과 요청의 전체 라이프사이클

스프링 MVC의 진짜 핵심은 DispatcherServlet 이라는 단 하나의 '전방 컨트롤러(Front Controller)'입니다. 모든 HTTP 요청은 반드시 이곳을 먼저 통과합니다.

요청 처리 전체 흐름

[HTTP 요청]

[DispatcherServlet] (스프링이 관리하는 중앙 허브)

[HandlerMapping] (URL에 맞는 Controller 메서드 탐색)

[Controller 메서드 실행] (@GetMapping, @PostMapping 등)

[Service → Repository → DB] (비즈니스 로직 및 데이터 처리)

[결과 반환] (REST API → JSON으로 직렬화 / MVC → ViewResolver)

[HTTP 응답]

DispatcherServlet의 역할 분담

협력 객체역할
HandlerMapping어느 Controller가 어느 URL을 처리할지 결정
HandlerAdapterController를 실제로 실행시키는 어댑터
ViewResolver반환된 뷰 이름을 실제 파일(HTML 등)로 변환
MessageConverter자바 객체를 JSON으로 변환 (Jackson 사용)

REST API 개발 시의 단순화: @RestController를 사용하면 ViewResolver를 거치지 않고, ** MessageConverter(Jackson)**가 직접 자바 객체를 JSON으로 변환하여 HTTP 응답 Body에 담아 돌려줍니다. 이 흐름을 이해하면 스프링 부트 개발의 전체 그림이 보입니다.


핵심 정리

  1. 모든 HTTP 요청은 DispatcherServlet 이 먼저 받습니다.
  2. Controller 는 요청의 관문 역할만 하며, 비즈니스 로직은 Service 에 위임합니다.
  3. Service 는 비즈니스 규칙을 처리하고, 데이터가 필요하면 Repository 를 통해 DB에 접근합니다.
  4. REST API는 최종적으로 JSON 형태로 응답을 반환합니다.

이 계층 구조(Controller - Service - Repository)가 스프링 부트 실무 개발의 뼈대입니다.

Advertisement