나는 지금까지 컨트롤러 클래스 위에 Rest API를 사용하기 때문에 @RestController 어노테이션을 아무생각 없이 사용해 왔다.
이번 장에서는 @RestController 어노테이션과 @Controller 어노테이션의 정확한 차이가 궁금하여 자세히 알아 보고자 한다.
전통적인 Spring MVC 컨트롤러(@Controller)와 Restful 웹 서비스 컨트롤러(@RestController)의 주요 차이점은 HTTP Response Body가 생성되는 방식이다. @Controller는 View 기술을 사용하지만, @RestController는 객체를 반환하기만 하면 객체 데이터는 JSON/XML 형식의 HTTP 응답을 직접 작성하게 된다.
즉, @Controller - view(화면)을 리턴하는 것이고(ResponseBody를 사용하여 객체를 리턴할수도 있음), @RestController - 데이터를 리턴하는 것이 주용도이다.
1) 클라이언트는 URI 형식으로 웹 서비스에 요청을 보냄.
2) 요청은 Handler Mapping과 그 타입을 찾는 DispatcherServlet에 의해 인터셉트
3) 요청은 Controller에 의해 처리되고 응답은 DispatcherServelt으로 리턴된 후 DispatcherServlet은 View로 디스패치.
이 어노테이션을사용하면 View를 리턴하지 않고 컨트롤러에서 직접 데이터를 리턴할 수 있다.(Spring은 HTTP 응답에 리턴 값을 자동으로 변환해줌.)
이 어노테이션을 사용하면 각 메서드마다 @ResponseBody를 추가할 필요가 없다.
정리하자면, 클라이언트로부터 JSON 데이터 응답을 내려주기 때문에 @RestController 어노테이션을 사용해 온 것이다.