본문 바로가기
Spring

@Controller 와 @RestController의 차이

by sangfeeeeel 2021. 7. 13.

1. @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를 사용자에게 반환한다.

@Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver 설정에 맞게 View를 찾아 렌더링합니다. 이때, @ResponseBody를 사용하면 ViewResolver를 사용하지 않습니다. 대신에 HTTP의 BODY에 문자 내용을 직접 반환합니다.(HTML BODY TAG를 말하는것 아님)

[Controller - Data]

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

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

@ResponseBody를 사용하면..

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter가 동작
  • 기본 문자처리 : StringHttpMessageConverter
  • 기본 객체처리 : MappingJackson2HttpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

2. @RestController


[RestController]

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

  1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
  2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트 한다.
  3. RestController는 해당 요청을 처리하고 데이터를 반환한다.

참조: https://mangkyu.tistory.com/70

'Spring' 카테고리의 다른 글

Spring의 DI는 왜 생성자 주입으로?  (0) 2021.12.14
[SpringBoot With Aws] Spring 웹 계층  (0) 2021.07.23
[SpringBoot With Aws] JUnit 단위 테스트  (0) 2021.07.22
IoC (Inversion of Control)  (0) 2021.07.03
DI(의존성 주입)  (0) 2021.07.03