[Spring] @Controller와 @RestController의 차이

고지훈·2022년 3월 13일
1

Spring

목록 보기
25/26
post-thumbnail

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller@RestController가 있다. 위 두 컨트롤러의 핵심적인 차이점은 HTTP ResponseBody가 생성되는 방식이다. 이번 글을 통해 두 가지 방식에 대한 차이점을 알아보자!

@Controller

[Controller-View]

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

  1. Client는 URI형식으로 웹 서비스에 요청을 보낸다.
  2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
  3. Controller가 요청을 처리한 후 응답을 DispatcherServlet에 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.
  4. @Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며 설정에 맞게 View를 찾아 렌더링한다.

[Controller-Data]

Spring MVC 컨트롤러에서도 Data를 반환해야하는 경우도 있다. Spring MVC 컨트롤러에서는 데이터를 반환하기 위해 @ResponseBody를 활용해야한다. 이를 통해 Controller에서도 Json형태의 데이터를 반환할 수 있다.

  1. Client는 URI형식으로 웹 서비스에 요청을 보낸다.
  2. Mapping이 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
  3. @ResponseBody를 사용하여 Client에게 Json형태로 데이터를 반환한다.

@RestController

@RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것이다. 데이터를 응답으로 제공하는 Restful API를 개발할 때 주로 사용한다.

  1. Client는 URI형식으로 웹 서비스에 요청을 보낸다.
  2. Mapping이 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
  3. @RestController는 해당 요청을 처리하고 데이터를 반환한다.
profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글