Spring MVC가 아닌 Boot RestAPI에서 DispatcherServlet 동작 흐름
https://99duuk.tistory.com/118
Spring MVC 설정 파일 이해하기 : web.xml & dispatcher-servlet.xml
web.xml는 서블릿 컨테이너에 대한 전반적인 설정을 담당한다.1. DispatcherServlet 정의2. URL 패턴과 DispatcherServlet 매핑3. Spring 설정 파일 위치 지정4. ContextLoaderListener 등록 (필요한 경우) dispatcher org.sprin
99duuk.tistory.com
읽다가 문득 View를 사용하지 않는 구조에서는 어떻게 되나 싶어서 비교해봄
| Spring MVC 프로세스
1. DispatcherServlet
- 모든 요청이 DispatcherServlet으로 들어옴
- Front Controller 패턴 구현체
- 모든 웹 요청의 진입점
2. HandlerMapping
- URL과 매핑되는 Controller 검색
- @RequestMapping 등의 어노테이션 기반 매핑
3. Controller 실행
- HandlerAdapter를 통해 Controller 메서드 실행
- 비즈니스 로직 처리 (Service -> Repository)
- Model 객체에 데이터 저장
- View 이름 반환
4. ViewResolver
- Controller가 반환한 뷰 이름으로 실제 View 검색
- JSP, Thymeleaf 등의 템플릿 엔진과 연동
5. View
- Model 데이터를 사용해 HTML 생성
- 최종 HTML을 클라이언트에게 반환
| Spring Boot RESTful API 프로세스
1. DispatcherServlet
- 동일하게 모든 요청의 진입점
- But, View 처리 대신 데이터(JSON) 처리에 초점
2. HandlerMapping
- URL과 매핑되는 RestController 검색
- @RestController, @GetMapping 등 사용
3. RestController 실행
- HandlerAdapter를 통해 Controller 메서드 실행
- 비즈니스 로직 처리 (Service -> Repository)
- DTO 객체 반환 (View 이름 대신)
4. HttpMessageConverter
- ViewResolver 대신 사용
- Controller가 반환한 DTO를 JSON으로 변환
- @ResponseBody 어노테이션 처리
5. Response
- 변환된 JSON 데이터를 HTTP 응답으로 전송
- 클라이언트(Vue.js 등)가 JSON 파싱하여 처리
주요 차이점:
- 응답 형식
- MVC: HTML (View 템플릿 렌더링)
- REST: JSON (데이터 직접 전송)
- Controller 역할
- MVC: View 이름과 Model 데이터 반환
- REST: DTO/도메인 객체 직접 반환
- 변환 프로세스
- MVC: ViewResolver -> View -> HTML 렌더링
- REST: HttpMessageConverter -> JSON 변환
- 클라이언트 처리
- MVC: 브라우저가 HTML 직접 렌더링
- REST: 클라이언트(Vue.js 등)가 JSON 파싱 후 처리
- 관심사 분리
- MVC: 서버가 뷰 로직까지 처리
- REST: 서버는 데이터만 제공, 뷰는 클라이언트 담당
Dispatcher Servlet:
1. 핸들러 매핑 조회
2. 핸들러를 처리할 수 있는 핸들러 어댑터 조회
핸들러 어댑터:
3. handle(handler)
4. handler 호출
핸들러 (RestController):
5. 비즈니스 로직 처리 DTO 반환
(핸들러가 요청을 직접 처리하고, 어댑터는 그 핸들러를 실행하는 인터페이스 역할을 함)
HttpMessageConverter:
6. DTO를 JSON으로 변환
Dispatcher Servlet:
7. JSON 응답
DispatcherServlet:
1. 유저의 요청을 받는 DispatcherServlet이 핵심이며, Front Controller의 역할이 된다. Front Controller는 유저의 모든 요청을 받는다.
HandlerMapping:
2. DispatcherServlet에서 받은 요청을 전달받고, 적절한 요청을 처리하는 컨트롤러를 찾고 반환한다.
HandlerAdapter:
3. DispatcherServlet에서 찾은 컨트롤러를 동작시킨다.
5. 컨트롤러의 동작 결과인 DTO를 반환한다.
Handler(Controller):
4. 개발자가 작성하는 클래스이며, 실제 요청을 처리하는 비즈니스 로직을 작성한다. DTO를 반환한다.
HttpMessageConverter:
6. HandlerAdapter로부터 받은 DTO를 JSON으로 변환한다.
응답:
7. 변환된 JSON 데이터를 HTTP 응답으로 클라이언트에게 전송한다.
(이 구조에서는 ViewResolver와 View가 제거되었고, 대신 HttpMessageConverter가 DTO를 JSON으로 변환하는 역할을 담당함)