<aside>
💡 Spring MVC를 이용한 REST API 만들기
</aside>
👀 @Controller 및 @RestController
@Controller

- 주로 뷰 템플릿 반환
-
- Client는 URI 형식으로 웹 서비스에 DispatcherServlet로 요청한다.
- Handler Mapping이 DispatcherServlet이 요청을 처리할 적절한 컨트롤러를 찾는다.
- 그러면 HandlerAdapter을 통해 요청을 Controller로 위임한다.
- Controller는 비즈니스 로직을 처리하고 ViewName을 반환한다.
- DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환한다.
- 객체를 반환하기 위해서는 viewResolver 대신에 HttpMessageConverter가 동작을 하는데 HandlerAdapter와 Controller가 요청을 주고 받는 시점이다.
- 그림의 4번에서는 메세지를 객체로, 6번에서는 객체를 메세지로 변환하는데 HttpMessageConverter가 사용된다.
@RestController

- 각 메서드가 기본적으로 HTTP 응답 본문에 데이터를 매핑한다.
-
- Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
- DispatcherServlet이 요청을 처리할 대상을 찾는다.
- HandlerAdapter을 통해 요청을 Controller로 위임한다.
- Controller는 요청을 처리한 후에 객체를 반환한다.
- 반환되는 객체는 JSON이나 XML으로 변환되어 사용자에게 반환한다.
- HttpMessageConverter를 사용하여 반환된 객체를 HTTP 응답 본문으로 직접 쓴다.
주요 차이점
응답 처리
@Controller 는 뷰를 반환하는 것에 중점을 두며, 일반적으로 웹 페이지를 반환하는 데 사용
@RestController 는 RESTful API를 구현하는 데 사용되며, JSON이나 XML 등의 형태로 데이터를 직접 반환
뷰 렌더링
@Controller 와 함께 사용되는 메서드는 뷰 이름을 반환하고,
ViewResolver 를 통해 뷰를 렌더링
@RestController 의 메서드는 뷰 렌더링
없이 데이터 자체를 반환
이러한 차이를 이해하는 것은 HTTP 기반의 웹 서비스를 설계할 때 중요하다.
각각의애노테이션은 사용 목적과 필요에 따라 선택하여 사용하며, 두 가지 방식을 적절히 혼합하여 사용한다.