웹 프로그래밍/[ Spring Boot ]

[ SpringBoot ] 05. RestController가 뭐죠?

kim.svadoz 2021. 10. 12. 16:57
반응형

RestController

전통적인 Spring MVC에서의 @Controller는 주로 View를 반환하기 위한 용도로 사용되었다. MVC 컨테이너는 Client의 요청으로부터 View를 반환한다.

Spring MVC의 @Controller에서 데이터를 반환하기 위해서는 컨트롤러의 각 메소드에 @ResponseBody 어노테이션을 사용하면 JSON 형태로 데이터를 반환할 수 있다. 이 때 ViewResolver를 통해 데이터를 담을 View를 찾는 과정을 거치게 된다.

Spring 4.0에서 Spring 프레임워크에서 RESTful 웹 서비스를 쉽게 개발할 수 있도록 @RestController라는 것이 추가됨.

RestController@Controller@ResponseBody의 조합으로 단순히 객체만을 반환하고 객체 데이터는 XML / JSON 형식으로 HTTP 응담에 담아서 전송된다.

- HttpMessageConverter

스프링 프레임워크에서 제공하는 인터페이스 中

HTTP 요청의 본문을 객체로 변경하건, 객체를 HTTP 응답 본문으로 변경할 때 사용된다.

뷰가 아니라 객체를 응답할 때는 viewResolver 대신에 HttpMessageConverter가 동작하는데, HttpMessageConverter에는 여러 Converter가 등록되어 있고 반환하는 데이터에 따라 사용되는 Converter가 달라진다는 특징이 있다.

리턴 타입이 application/json인 경우에는 MappingJacson2HttpMessageConverter가 사용되고, 클라이언트의 Http Accept 헤더와 서버의 컨트롤러 return type 정보를 좋바해 적절한 HttpMessageConverter가 채택된다.

그냥 @Controller를 사용할 때는 @ResponseBody를 넣어줘야 MessageConverter가 적용되고, 선언하지 않으면 BeanNameViewResolver에 의해서 viewName에 해당하는 뷰를 찾으려고 할 것이다.

즉, 클라이언트의 요청이 들어오면 디스패처 서블릿에 의해서 선택된 컨트롤러가 api를 실행하고 이 때 @ResponseBody 어노테이션이 선언되어있으면 Obejct 값을 Body에 넘겨주기 위해서 HttpMessageConverter가 사용된다. 이 때는 반환값에 따라서 각기 다른 Converter가 사용됩니다.

반응형