Model:
View:
Controller:
클라이언트 요청 (GET/POST… 등)
DispatcherServlet: 프런트 컨트롤러가 모든 요청을 접수
HandlerMapping: 어떤 컨트롤러 메서드가 처리할지 탐색
HandlerAdapter: 해당 메서드를 호출할 수 있게 어댑팅
Controller 실행: 서비스/리포지토리 호출로 모델 준비
ViewResolver: 논리 뷰 이름 → 실제 뷰(템플릿/JSON) 결정
@RestController는 뷰 템플릿 없이 HttpMessageConverter로 JSON 직렬화
응답 렌더링: 뷰에 모델 바인딩 → HTML/JSON으로 반환
[Client] (브라우저/앱)
|
v
[HTTP Request]
|
v
+--------------------------------------+
| DispatcherServlet (Front Controller) |
+--------------------------------------+
|
v
+---------------------------+
| HandlerMapping | 어떤 컨트롤러/메서드가 요청을 처리할지 매핑
+---------------------------+
|
v
+---------------------------+
| HandlerAdapter | 메서드 호출 준비, 파라미터 바인딩
+---------------------------+
|
v
+-----------------------------------------------+
| Controller (@Controller / @RestController) |
| - 요청 파라미터 처리 |
| - Service 호출 |
| - 결과 DTO 반환 |
+-----------------------------------------------+
|
v
+---------------------------+
| Service Layer | 비즈니스 로직 처리, 트랜잭션 관리
+---------------------------+
|
v
+---------------------------+
| Repository / DAO | DB 접근, JPA/Hibernate 등
+---------------------------+
|
v
[Model 객체 / 엔티티 반환]
|
v
+---------------------------+
| ViewResolver (전통 MVC) | 뷰 이름 → 템플릿 매핑
+---------------------------+
|
v
+---------------------------+
| View (Thymeleaf / JSP) | HTML 렌더링
+---------------------------+
|
v
[HTTP Response] → Client
REST API 기준이라면 ViewResolver와 View 단계가 생략되고, HttpMessageConverter가 JSON 변환을 담당한다