
웹 서비스에서 화면이 보이고 데이터가 오가는 과정은 크게 2가지 관점으로 나눠서 볼 수 있다.
(1) 서버 내부에서 요청을 컨트롤러로 라우팅하고 처리하는 구조(Spring MVC)
(2) 정적 리소스(HTML/CSS/JS)를 받아서 브라우저가 실행하는 흐름(REST API 기반)
스프링에서 말하는 MVC는 “요청을 어떻게 받아서(Controller), 어떤 데이터를 만들고(Model), 어떤 형태로 응답할지(View)”를 역할로 나눈 구조임.
그리고 이 전체 흐름을 앞단에서 조정하는 중심에 DispatcherServlet이 존재함.
Model(모델)
스프링 MVC에서 “Model”은 2가지 의미로 자주 쓰인다.
- (1) 비즈니스/도메인 모델: Service/Domain에서 규칙과 데이터를 다루는 객체들(엔티티/도메인/DTO 등)
- (2) View에 전달하는 Model: Controller가 View로 내려줄 데이터를
Model(또는ModelAndView)에 담아 전달하는 것View(뷰)
- 최종 결과 화면을 렌더링하는 역할이다(Thymeleaf/JSP 등 템플릿 엔진 기반).
- API 서버인 경우 화면 대신 JSON을 내려준다. 이때 View는 “JSON 응답 생성”으로 대체되는 것으로 이해하면 된다(
@ResponseBody,@RestController사용).Controller(컨트롤러)
- HTTP 요청을 가장 먼저 받는 진입점이다.
- URL/HTTP 메서드에 따라 실행될 메서드를 매핑한다.
- 요청 파라미터/바디를 객체로 바인딩한다(DTO 등) 및 검증 수행한다.
- 비즈니스 로직은 직접 처리하지 않고 Service에 위임한다.
JSP, 타임리프와 같은 템플릿 엔진을 가지고 화면을 렌더링하는 처리형태다
- 서버에서 최종 HTML 결과를 만들어 브라우저로 전달
- Controller가 요청을 처리하고, Model에서 데이터를 가져와 View(화면)를 구성
- 주로 복잡한 프론트엔드 로직이 필요 없는 단순한 페이지에 적합한 방식
DispatcherServlet(프론트 컨트롤러)
- 스프링 MVC의 앞단에서 요청 흐름을 중앙에서 조정하는 구성요소이다.(진입점)
- 실무에서 스프링 MVC 동작 방식을 이해하는 핵심 축이다.
HandlerMapping
- 요청 URL을 기반으로 어떤 컨트롤러가 해당 요청을 처리할지 결정
Controller
- HandlerMapping이 결정한 컨트롤러의 메서드가 요청을 처리하고, 모델 데이터를 준비한 다음, 보여줄 뷰의 이름을 반환
ViewResolver
- 최종적으로 사용자에게 보여질 UI를 렌더링
- 컨트롤러가 "home"이라는 뷰 이름을 반환하면, ViewResolver는 이를 home.jsp 또는 home.html과 같은 실제 뷰 파일로 해석(뷰 이름 해석)
- Thymeleaf 뷰 템플릿을 사용시 ThymeleafViewResolver
- JSP를 사용시 InternalResourceViewResolver
View
- 컨트롤러로부터 전달받은 모델 데이터를 사용하여 HTML, JSON, XML 등의 형태로 클라이언트에게 응답을 생성

@RestController)위 흐름 중에서 8~10단계가 변경된다.
Controller - Service - Repository로 더 세분화되어 운영되는 경우 많다. Controller는 Model을 직접 다루기보다 Service에 위임하는 구조가 일반적이다.RESTful API는 "Representational State Transfer"의 약어로, 웹 표준을 사용하여 서버와 클라이언트 간의 상호 작용을 정의하는 방법
예시 이미지처럼, 화면 렌더링은 Vue 등의 프론트엔드 프레임워크가 담당하고 Spring 서버는 데이터만 전달하는 RESTful API 아키텍처를 사용한다.
이러한 방식이 바로 CSR(Client-Side Rendering) 에 해당한다.
리소스 기반
http://localhost:8080/member/1 → 회원 1에 접근스테이트리스(Stateless) 통신
표준 HTTP 메서드 사용
GET, POST, PUT, PATCH, DELETE 메서드를 활용해 CRUD 작업을 수행한다.데이터 교환 형식

axios.get, axios.post, axios.delete, axios.put 등으로 백엔드 서버에 보낼 요청(HTTP 요청)을 작성/실행하는 로직이 포함되어 있다.| 구분 | 처리 주체 | 특징 | 사용 예시 |
|---|---|---|---|
| SSR (Server-Side Rendering) | 서버 | HTML을 서버에서 생성 후 전달 | Thymeleaf, JSP |
| CSR (Client-Side Rendering) | 클라이언트(브라우저) | 데이터만 받아서 브라우저가 화면 구성 | React, Vue, Angular |