spring에는 두 가지의 컨트롤러 정의하는 방법이 있다.
첫 번째는 Spring MVC의 컨트롤러인 @Controller가 있고
두 번째는 RestfulAPI의 컨트롤러인 @RestController가 존재한다.
앞서 말한 두 컨트롤러의 차이점을 간단히 말하자면 @Controller는 View를 반환하고
@RestController는 HTTP Response를 반환한다는 차이점이 존재한다.
조금 더 자세히 말하자면
@Controller와 @RestController의 동작방식
위에 있는 그림이 @Controller의 동작 방식이다.
보다시피 View와 View Resolver가 있는 걸 볼 수 있다.
하지만 @RestController의 동작방식은
view와 view Resolver가 존재하지 않고 그 대신에 @ResponseBody가 작동하면서
HttpMessageConverter에서 반환데이터에 맞는 Converter가 작동되어 반환된다.
정리
- @Controller와 @RestController의 선택의 기준은 용도에 따라 선택된다는 차이점이 존재한다.
- @Controller 어노테이션은 spring 2.5에 추가된 어노테이션이고 @RestController는 spring 4.0에 추가되었다.
- 과거에는 JSP와 HTML 등 직접 view를 반환하는 경우가 많았지만 지금은 FE/BE로 나뉘어서 개발하는 경우가 많아 JSON으로만 전달하기 때문에 @RestController를 더 많이 사용한다.
'spring' 카테고리의 다른 글
[spring] @Transactional인데 readOnly를 곁들인.. (1) | 2024.12.07 |
---|---|
[spring] 스프링 시큐리티? 무슨 역할을 할까 (0) | 2024.08.11 |
[spring] @Bean과 @Component (0) | 2024.08.04 |
[spring] IoC와 DI? (0) | 2024.06.07 |