SpringMVC를 공부할 때 @Controller
를 사용했고 SpringBoot를 공부할 때는 @RestController
를 사용했다.
이 둘의 차이점은 view와 관련이 있다.
SpringMVC는 view를 사용한다. 때문에 view를 반환할 수 있는 @Controller
를 사용한다.
@Controller
는 View를 반환하기 위해서 주로 사용된다
@Controller의 실행 흐름
Client -> Request -> Dispatcher Servlet -> Handler Mapping ->
Controller -> View -> Dispatcher Servlet -> Response -> Client
SpringMVC에서도 view를 반환하지 않고 json 형식의 데이터만 반환할 때가 있다.
이 때 @ResponseBody
를 사용해서 자바 객체를 HTTP 응답의 Body로 매핑해준다.
Dispatcher Servlet을 거치지 않고 Controller에서 직접 응답을 반환한다.
@ResponseBody의 실행 흐름
Client -> Request -> Dispatcher Servlet -> Handler Mapping ->
Controller (ResponseBody)-> Response -> Client
View와는 완전히 분리된 REST API를 개발할 때 @Controller 어노테이션과 @ResponserBody를 계속 사용할 필요가 없다.
@RestController
는 @Controller
+ @ResponseBody
이다.
@RestController의 실행 흐름
Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping ->
RestController (자동 ResponseBody 추가)-> HTTP Response -> Client
참고
https://yhmane.tistory.com/78
https://lkg3796.tistory.com/58
https://mangkyu.tistory.com/49