우선 RestController와 Controller의 차이점을 짚고 넘어가자.
Controller vs RestController
이 둘의 가장 큰 차이점은 HTTP Response Body
가 생성되는 방식이다.
📌 Controller
는
view
기술을 사용하고 📌 Restful 웹서비스 Controller(RestController
)는
Data
를 return하는 것이 주 용도이다.그러나 Controller에서 @ResponseBody
어노테이션을 사용하면 view를 return하지 않고 Controller에서 직접 Data
를 return할 수 있다.
@ResponseBody
를 사용하면, Spring은 HTTP응답에 리턴 값을 자동으로 변환해준다. 대신 이 어노테이션을 controller
클래스의 각 메서드에 작성해줘야한다.
@RestController
어노테이션을 사용하면 컨트롤러 클래스의 각 메서드마다 @ResponseBody
를 추가할 필요가 없고 모든 메서드는 @ResponseBody
어노테이션이 기본으로 작동이 된다.
@Controller
는 주로 뷰(화면)를 리턴할 때 주로 쓰인다.@ResponseBody
를 붙여준다.@RestController
는 data를 리턴할 때 쓰인다.(@ResponseBody 붙일 필요 없음.)그렇다면 ResponseEntity는 무엇일까?
ResponseEntity
@RestController
는 별도의 view(화면)를 제공하지 않는 형태로 서비스를 실행하기 때문에 때로 결과데이터가 예외적인 상황에서 문제가 발생할 수 있다.
@ResponseEntity
는 개발자가 직접 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스로, 개발자는 404나 500과 같은 HTTP상태 코드를 전송하고 싶은 데이터와 함께 전송할 수 있기 때문에 좀 더 세밀한 제어가 필요한 경우 사용할 수 있다.