Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller
와 @RestController
가 있다. 위 두 컨트롤러의 핵심적인 차이점은 HTTP ResponseBody가 생성되는 방식이다. 이번 글을 통해 두 가지 방식에 대한 차이점을 알아보자!
전통적인 Spring MVC 컨트롤러인 @Controller
는 View를 반환하기 위해 사용한다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로 View를 반환한다.
- Client는 URI형식으로 웹 서비스에 요청을 보낸다.
- Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
- Controller가 요청을 처리한 후 응답을 DispatcherServlet에 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.
@Controller
가 View를 반환하기 위해서는 ViewResolver가 사용되며 설정에 맞게 View를 찾아 렌더링한다.
Spring MVC 컨트롤러에서도 Data를 반환해야하는 경우도 있다. Spring MVC 컨트롤러에서는 데이터를 반환하기 위해 @ResponseBody
를 활용해야한다. 이를 통해 Controller에서도 Json형태의 데이터를 반환할 수 있다.
- Client는 URI형식으로 웹 서비스에 요청을 보낸다.
- Mapping이 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
@ResponseBody
를 사용하여 Client에게 Json형태로 데이터를 반환한다.
@RestController
는 Spring MVC Controller에 @ResponseBody
가 추가된 것이다. 데이터를 응답으로 제공하는 Restful API를 개발할 때 주로 사용한다.
- Client는 URI형식으로 웹 서비스에 요청을 보낸다.
- Mapping이 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
@RestController
는 해당 요청을 처리하고 데이터를 반환한다.