Skip to content

Latest commit

 

History

History
28 lines (22 loc) · 2.11 KB

Controller와RestController의차이.md

File metadata and controls

28 lines (22 loc) · 2.11 KB

@Controller

Controller - View

전통적은 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다.
아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로 View를 반환합니다.

@Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며, 설정에 맞게 View를 찾아 렌더링 합니다.

Controller - Data

Spring MVC의 컨트롤러에서도 Data를 반환해야 하는 경우도 있습니다.
Spring MVC의 컨트롤러에서는 데이터를 반환하기 위해 @ResponseBody 어노테이션을 활용해주어야 합니다.
이를 통해 Controller도 Json 형태로 데이터를 반환할 수 있습니다.

@RestController가 Data를 반환하기 위해서는 viewResolver 대신에 HttpMessageConverter가 동작합니다.
HttpMessageConverter에는 여러 Converter가 등록되어있고, 반환해야 하는 데이터에 따라 사용되는 Converter가 달라집니다.
단순 문자열인 경우에는 StringHttpMessageConverter가 사용되고, 객체인 경우에는 MappingJackson2HttpMessageConverter가 사용되며, 데이터 종류에 따라 서로 다른 MessageConverter가 작동하게 됩니다.
Spring은 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해 적합한 HttpMessageConverter를 선택하여 이를 처리합니다.

RestController

@RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것 입니다. @RestController의 주 용도는 Json형태로 객체 데이터를 반환하는 것 입니다.

정리

예전에 프로그래밍을 할 때에는 jsp나 html과 같은 뷰를 전달해주는 방식이였기 때문에 @Controller를 사용해왔다.
최근에는 프론트엔드와 백엔드를 따로 두고 백엔드에서는 REST API를 통해 json으로 데이터만 전달하기 때문에 편리성을 위해 @RestController를 사용하게 되었다.