@ResponseBody
는 HTTP 규격에 맞는 응답을 만들어주기 위한 어노테이션임
HTTP 요청을 객체로 변환하거나, 객체를 -> 응답으로 변환하는 HttpMessageConverter를 사용한다.
Controller에서 반환할 객체나 Method에 @ResponseBody를 붙히는 것만으로도 HTTP 규격에 맞는 값을 반환 할 수 있다.
단점
Header에 대해서는 유연하게 설정하지 못한다.
Status도 메소드 밖에서 어노테이션을 따로 설정해야한다는 단점이 있다.
ResponseEntity도 마찬가지로 HTTP 응답을 빠르게 만들어주기 위한 객체이다.
@ResponseBody와 달리 어노테이션이 아닌 객체로 사용된다. --> 응답으로 변환될 정보를 모두 담은 요소들을 객체로 만들어서 반환해준다.
객체의 구성요소에서 HttpMessageConverter는 응답이 되는 본문을 처리해준 뒤에, RESTTemplate에 나머지 구성 요소인 Status(서버에 성공했는지 안했는지 알려주는 상태코드)를 넘겨준다.
ResponseEntity 의 구조를 보게 되면, 다음과 같이 Status 만 필드 값으로 가지고 있음
ResponseEntity 에서 직접적으로 Status Code 를 지정할 수 있다는 것을 의미
ResponseEntity 는 HttpEntity 를 상속하여 구현
HttpEntity 에서는 Generic 타입으로 Body가 될 필드 값을 가질 수 있음.
Generic 타입으로 인하여 바깥에서 Wrapping 될 타입을 지정할 수 있다.
Wrapping 된 객체들은 자동으로 HTTP 규격에서 body에 들어갈 수 있도록 변환이 된다.
또한, 필드 타입으로 HttpHeaders 를 가지고 있는데, 이는 ResponseBody 와 다르게 객체 안에서 Header 를 설정해 줄 수 있음을 암시
클라이언트에서 서버로 통신 하는 메세지를 "요청"메세지라고 하며,
서버에서 클라이언트로 통신하는 메세지를 "응답" 메세지라고 한다.
웹에서 화면전환(새로고침) 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어진다.
비동기 통신 시에 클라이언트에서 -> 서버로 보낼 때, 본문에 데이터를 담아서 보내야 한다.
서버에서 클라이언트로 응답을 보낼 때에도 본문에 데이터를 담아서 보낸다.
요청본문
: requestBody
응답본문
: responseBody 를 담아서 보내야한다.
@RequestBody 어노테이션과 @ResponseBody 어노테이션이 각각 Http 요청 바디를 자바 객체로 변환하고
자바 객체를 다시 HTTP 응답 바디로 변환해준다.
@RequestBody를 통해서 자바객체로 conversion하는데, 이 때 HttpMessageConverter
를 사용한다.
@ResponseBody가 붙은 파라미터에는 HTTP 요청의 본문 body 부분이 그대로 전달된다.
RequesyMappingHandlerAdpter 에는 HttpMessageConverter 타입의 메세지 변환기가 여러개 등록되어 있다.
http 요청의 본문(body)이 그대로 전달된다.
일반적인 GET/POST 요청 파라미터라면, @RequestBody를 사용할 일이 없다.
Http 요청의 바디 내용을 통째로 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다.
자바 객체를 HTTP 요청의 바디내용으로 매핑하여 "클라이언트"로 전송한다.
@ResponseBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어타입과 파라미터의 타입을 먼저 확인한다.
ㅇㅎ