목표 : Spring MVC에서 클라이언트의 요청 처리 흐름을 @ Controller와 @ RestController의 차이점을 중심으로 각각의 처리 과정과 특징에 대해 알아보자. 또한, RestController에서 HTTP 요청이 처리되어 응답으로 변환되는 전체 과정을 확인하자. (HTTP 메시지 컨버터가 동작하는 시점과 역할을 포함)
1️⃣ Controller 관점
애플리케이션을 Model View Controller의 주요 컴포넌트로 나누어 개발하는 방식이다. 각 레이어마다 역할이 다르다. Main메서드는 MVC객체를 각각 생성한다. Controller를 통해 Model의 데이터를 업데이트하고 View를 통해 사용자에게 보여준다.
Model : 비즈니스 로직과 데이터 표현을 담당한다. 데이터의 상태를 관리하고 조작하는 기능을 제공한다.
View : 사용자에게 정보를 표시하는 역할이다. 사용자와의 상호작용을 처리한다.
Cotroller : Model-View사이 상호작용을 제어한다. 사용자의 입력을 받아 Model을 업데이트 하고, 업데이트된 Model을 View에 전달한다. 사용자의 요청을 해석하고 적절한 동작을 수행한다.
2️⃣ RestController 관점
위 Controller로 View를 반환하거나 ResponseBody로 Json형태로 데이터를 반환할 수 있다.
RestController은 View를 반환하지 않고 단순히 객체만을 JSON또는 XML형식으로 반환한다.
🙋🏻♀️ HTTP 요청-응답으로 변환되는 과정
Http 메세지 컨버터
JSON데이터를 HTTP 메세지 바디에 직접 읽거나 쓰는 경우 사용
RequestMapping핸들러 어댑터가 ArgumentResolver호출
ArgumentResolver가 컨트롤러가 필요하는 파라미터 객체를 Http메세지 컨버터를 이용해서 생성한다.
RequestMapping핸들러어댑터가 컨트롤러 호출하면서 파라미터 객체를 넘겨준다.
ReturnValue핸들러가 Http메세지 컨버터를 호출해서 응답값을 변환하고 반환한다.
👉🏻 차이점
Controller = View 반환
RestController = HttpMessageConverter를 통해 JSON이나 XML형식으로 반환