>2025.03.24위클리 페이퍼
Spring MVC에서 클라이언트의 요청 처리 흐름을 @Controller와 @RestController의 차이점을 중심으로 각각의 처리 과정과 특징을 포함하여 설명하세오.
1. Spring MVC 요청 처리 흐름
1.1 DispatcherServlet
- 클라이언트의 모든 요청을 가장 먼저 받습니다.
- 요청 URL을 분석하여, 핸들러 매핑(Handler Mapping)을 통해 해당 요청을 처리할 컨트롤러(@Controller, @RestController)를 찾습니다.
1.2 Handler Mapping
- 클라이언트 요청 URL을 기반으로 이를 처리할 컨트롤러의 메서드를 찾고 연결합니다.
1.3 Controller
- 요청을 받은 컨트롤러의 메서드가 실행됩니다.
- 요청 데이터를 처리하고, 응답할 데이터를 준비합니다.
1.4 ModelAndView반환
- 결과를 뷰에 전달할 데이터와 화면을 지정하여 반환합니다.
- 직접 데이터만 반환하기도 합니다.
1.5 ViewResolver
- Controller의 경우 ModelAndView의 뷰 이름을 실제 JSP,Thymeleaf 같은 View 템플릿과 연결합니다.
- 렌더링된 최종 View를 통해 HTML응답을 클라이언트에 전달합니다.
1.6 HttpMessageConverter
- RestController의 경우 객체를 JSON 또는 XML과 같은 데이터 형식으로 변환해 클라이언트에 전달합니다.
2. @Controller의 흐름 및 특징
2.1 Controller의 흐름
- DispatcherServlet (요청 수신)
- HandlerMapping (URL과 컨트롤러 메서드 매핑)
- @Controller 실행 (비즈니스 로직 처리)
- ModelAndView (뷰 이름과 데이터 반환)
- ViewResolver (뷰 이름을 실제 뷰 파일과 연결)
- View 렌더링 후 HTML 응답
2.2 Controller의 특징
- 주로 View를 반환하는 컨트롤러입니다.
- 요청 처리 후 DispatcherServlet은 뷰 이름을 ViewResolver로 넘겨 실제 화면을 랜더링합니다.
3. @RestController의 흐름 및 특징
3.1 RestController의 흐름
- DispatcherServlet (요청 수신)
- HandlerMapping (URL과 컨트롤러 메서드 매핑)
- @RestController 실행 (비즈니스 로직 처리)
- 응답 객체 반환
- HttpMessageConverter (객체를 JSON/XML로 변환)
- 데이터(JSON/XML) 응답
3.2 RestController의 특징
- 주로 REST API로 데이터를 반환하는 컨트롤러입니다.
- 내부적으로 @Controller와 @ResponseBody어노테이션이 결합된 형태입니다.
- 응답 객체를 직접 반환하면 자동으로 JSON, XML 형태로 변환하여 응답합니다.
- 뷰 템플릿이나 ViewResolver를 사용하지 않습니다.
요약 :
@Controller는 View,
@RestController는 데이터를 제공할때 사용된다.