우리가 흔히 사용하는 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용한다.
컨트롤러는 뷰에 표시될 데이터가 있는 Model 객체를 만들고 View를 선택하는 일을 담당.
우리는 Controller를 사용하면서 Data를 반환해야할 일이 종종 있다. 컨트롤러에서 데이터를 반환해주기 위해서는 @ResponseBody 어노테이션을 활용해주어야 한다. 해당 어노테이션을 통해 JSON 형태로 데이터를 반환할 수 있다.
작동 방식은 위에 나온 방식의 3번까지가 동일하다.
// 아래 2개는 똑같은 내용.
@Controller
@ResponseBody
public class Controller {
...
}
@RestController
public class RestController {
...
}
요 녀석은 @Controller
+ @ResponseBody
으로 이루어진 어노테이션이다. 그럼 우리는 위에서 읽은 내용으로 어느 정도 유추할 수 있게 된다. 그렇다. 이녀석의 용도는 JSON
형태로 객체를 반환해주는 역할을 한다. (View 대신에 객체로 반환됨)
최근 REST API를 개발 시, 사용하며 객체를 ResponseEntity로 감싸서 반환해준다. 작동 방식은 Controller로 Data 반환에서의 방식과 동일하다.
클라이언트가 웹에 요청을 보낼 때는 보통 서버에서 날라오는 응답 결과에 대해 예상한다. 하지만, RestController를 그냥 사용하게 되면 HttpStatus를 설정해줄 수가 없다. 그렇기 때문에 우리는 ResponseEntity
로 감싸서 반환해주어야 한다.
그렇지만, 꼭 감싸줄 필요는 없다. 객체를 따로 만들어놓고 인자로 넣어서 메시지와 함께 HttpStatus로 날려줘도 된다~~ 근데 뭐가 맞는 지는 모르겠다.
나는 과제를 하면서 이렇게 했기 때문
그래서 Controller 따로 RestController 따로 분리해도 된다.
정리하자면, 용도의 차이