1. @Controller
[Controller - View]
전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환합니다.
- Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
- Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
- Controller가 요청을 처리한 후에 응답을 DispatcherServlet 으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.
@Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver 설정에 맞게 View를 찾아 렌더링합니다. 이때, @ResponseBody를 사용하면 ViewResolver를 사용하지 않습니다. 대신에 HTTP의 BODY에 문자 내용을 직접 반환합니다.(HTML BODY TAG를 말하는것 아님)
[Controller - Data]
SpringMVC의 컨트롤러에서도 Data를 반환해야 하는 경우도 있습니다. SpringMVC의 컨트롤러에서는 데이터를 반환하기 위해 @ResponseBody 어노테이션을 활용해주어야 합니다. 이를 통해 Controller도 Json 형태로 데이터를 반환할 수 있습니다.
- Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
- Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트 한다.
- @ResponseBody를 사용하여 Client에게 Json 형태로 데이터를 반환한다.
@ResponseBody를 사용하면..
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter가 동작
- 기본 문자처리 : StringHttpMessageConverter
- 기본 객체처리 : MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
2. @RestController
[RestController]
@RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것입니다. 당연하게도 RestController의 주용도는 Json 형태로 객체 데이터를 반환하는 것입니다.
- Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
- Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트 한다.
- RestController는 해당 요청을 처리하고 데이터를 반환한다.
'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 |