@Controller와 @RestController의 차이점
Spring의 annotation 기반 MVC 프레임워크는 RESTful 웹서비스를 만드는 과정을 단순화한다.
전통적인 방식의 @Controller 어노테이션은 오랫동안 MVC 프레임워크로 사용되어 왔다.
Spring 4.0에서 소개된 @RestController 어노테이션은 @Controller 및 @ResponseBody를 생략하여 RESTful 웹 서비스를 쉽게 개발할 수 있도록 만들어 준다.
두 어노테이션의 차이점은 HTTP Response body가 생성되는 방식이다.
@Controller은 View가 반환되고, @RestController은 객체를 반환하고 객체 데이터는 JSON 또는 XML로 HTTP 응답에 작성된다.
@Controller
- Client 요청으로부터 View 반환
- Contoller은 ViewResolver 설정에 맞는 View를 반환
- Client URL Request
- DispatcherServlet가 인터셉트하여 Handle Mapping가 매칭되는 Controller에게 요청
- Controller View 반환
- Handle Mapping ModelAndView 상자에 담아 DispatcherServlet에게 응답
- DispatcherServlet Client에게 View 반환
RESTful 웹 서비스를 구현하기 위하여 Spring MVC의 컨트롤러에서 데이터를 반환하기 위해
@ResponseBody 어노테이션이 사용되었다.
내부적으로 Spring은 HTTPMessageConverter 리스트가 등록되어 있다.
HTTPMessageConverter의 역할은 미리 정의 된 MIME 유형에 따라 Request Body를 특정 클래스로 변환한다.
컨트롤러는 처리결과에 따라 맞는 Converter가 동작하고 변환해서 HTTP Response body에 작성되어 전달되는 것이다.
* 객체를 처리하는 Converter은 MappingJackson2HttpMesssageConverter이고,
문자를 처리하는 Converter은 StringHttpMessageConverter이다.
@RestController
- Spring MVC Controller에 @ResponseBody가 추가된 것
- Client 요청으로부터 객체 데이터를 반환
- 직접 반환 값을 자동으로 HTTP 응답에 작성하고 반환
- Client URL Request
- DispatcherServlet가 인터셉트하여 Handle Mapping가 매칭되는 REST Controller에게 요청
- REST Controller은 HTTP 응답에 직접 작성하고 Client에게 데이터 반환
결론
@RestController를 사용하면 MVC RESTful 웹 서비스를 쉽고 간단하게 구현할 수 있다.
출처
https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/
'Spring boot' 카테고리의 다른 글
[Spring Boot] JPA 조회 작업 findById(), getOne()의 차이 (0) | 2022.03.29 |
---|---|
[Spring Boot] JPA Caching 적용하기 (0) | 2022.03.21 |
[Spring Boot] PasswordEncoder.mathes() 암호화된 패스워드 비교 (0) | 2022.03.21 |
[Spring Study Group] Spring MVC 요청 경로/클래스 레벨/경로 패턴 / Http 메서드 매핑설정 (0) | 2021.11.07 |
[Spring Study Group] Spring Legacy Project 생성하기 - IntelliJ IDEA (2) | 2021.11.07 |