본문 바로가기
백엔드/Spring Boot

[Spring boot] @Controller 와 @RestController의 차이

by 손정빈 2019. 10. 11.
728x90
반응형

Spring boot 컨퍼런스를 읽으면서 궁금점이 생긴 내용을 작성한 내용입니다.

 


@Controller VS @RestController

Http Response Body가 생성되는 방식의 차이

 

@Controller의 실행 흐름

 

Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Response -> Client 

 

@RestController의 실행 흐름

 

Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping -> RestController (자동 ResponseBody 추가)-> HTTP Response -> Client

 

쉽게 설명하면 @Controller는 Model과 View에 대해서 리턴을 해준다면

@RestController는 Respone객체를 리턴해준다고 생각하면 쉬울 듯 하다.

 

그런데 @Controller에서도 객체를 리턴하고 싶다면 @ResponseBody를 사용함으로써 가능하다.

 

@ResponseBody의 실행 흐름

 

Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller (ResponseBody)-> Response -> Client 

 

 

마지막으로 자주 쓰는 ResponseEntity

ResponseEntity는 별도의 View를 제공하지 않은 형태로 서비스를 실행한다. 예외의 상황에서 문가가 발생 할 수 있다.

 

개발자가 직접 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스로 404, 500같은 HTTP 상태 코드를 전송하려는 데이터와 함께 전송 가능 하므로 세밀한 제어를 원하는 경우 사용 가능하다.

 

반응형

댓글