본문 바로가기

개념 정리

Controller vs RestController

Spring 프레임워크에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller과 @RestController 두 가지가 있는데,

이 두 차이점이 뭘지 궁금해서 찾아봄.

 

1. Controller

@Controller는 Spring MVC의 전통적인 컨트롤러로 주로 View를 반환하기 위해 사용됨.

퍼옴 https://mangkyu.tistory.com/49

 

  1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
  2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다.
  3. HandlerMapping을 통해 요청을 Controller로 위임한다.
  4. Controller는 요청을 처리한 후에 ViewName을 반환한다.
  5. DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환한다.

Controller가 반환한 뷰의 이름으로부터 View를 렌더링 하려면 ViewResolver가 사용되고, 설정에 맞게 View를 찾아 렌더링한다.

 

 

2. Controller로 Data를 반환해야하는 경우, 컨트롤러에서는 데이터를 반환하기 위해 @ResponseBody 어노테이션을 활용해 주어야한다. 이 과정을 통해 Controller도 Json 형태로 데이터를 반환 할 수 있다.

퍼옴2 https://mangkyu.tistory.com/49

 

 

  1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
  2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다.
  3. HandlerMapping을 통해 요청을 Controller로 위임한다.
  4. Controller는 요청을 처리한 후에 객체를 반환한다.
  5. 반환되는 객체는 Json으로 Serialize되어 사용자에게 반환된다.

컨트롤러를 통해 객체를 반환할 때에는 일반적으로 ResponseEntity로 감싸서 반환을 한다, 객체를 반환하기 위해서는 viewResolver 대신 HttpMessageConverter가 동작하고, HttpMessageConverter에는 여러 Converter가 등록되어 있으나, 반환하는 데이터에 따라 사용되는 Converter가 달라진다. Spring은 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보들을 조합하여 적합한 HttpMessageConverter를 선택하여 처리한다.

 

 

 

3.RestController

@RestController는 @Controller에 @ResponseBody가 추가된 어노테이션이다. 주용도는 Json형태로 객체 데이터를 반한하는것이며, 최근에는 데이터를 응답으로 제공하는 REST API를 개발할 때 주로 사영하고, 객체를 ResponseEntity로 감싸서 반환한다. 동작과정또한 @Controller에 @ResponseBody를 붙인 것과 완벽히 동일함.

 

퍼옴2 https://mangkyu.tistory.com/49

  1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
  2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다.
  3. HandlerMapping을 통해 요청을 Controller로 위임한다.
  4. Controller는 요청을 처리한 후에 객체를 반환한다.
  5. 반환되는 객체는 Json으로 Serialize되어 사용자에게 반환된다.



출처: https://mangkyu.tistory.com/49 [MangKyu's Diary]