728x90
HTTP 통신
Client와 Server 간 통신 시, HTTPRequest로 요청을 보내고 HTTPResponse로 응답한다.
HTTPRequest와 HTTPResponse는 status line, headers, body 이렇게 세 부분으로 이루어져있음.
HTTP 요청, HTTP 응답 구성
- Start Line : 메서드, URL, version으로 이루어져있음. 서버에서 요청을 받아들이는 첫 줄
- Headers : 오쳥에 대한 접속 OS, 브라우저, 인증 정보 같은 부가적인 정보
- Body : 요청에 관련된 JSON, HTML 등의 구체적인 내용
비동기 통신
비동기 통신을 위해선 Client에서 Request를 보낼 때, body
에 데이터를 담아서 보내고, Server에서 Response를 할때에도 body
에 데이터를 담아서 보내야 함
이때의 body를 두가지로 나누다.
요청 시의 body =requestBody
= 요청 본문 응답 시의 body =responseBody
= 응답 본문
대부분 JSON타입을 이용해 데이터를 주고받음
따라서 JSON과 자바 객체 간의 변환을 해주는 변환기가 필요하다
(RequestMappingHandlerAdapter에 요청, 응답 시 변환 해주는 여러 개의 HttpMessageConverter(메시지 변환기)가 등록되어 있다.)
💡
@RequestBody = JSON → 자바 객체로 변환 @ResponseBody = 자바객체 → JSON
@RequestBody
HTTP Request(JSON) → 자바 객체로 변환
- 이 어노테이션 붙은 메서드로 요청을 보내면, DispatcherServlet에서 적절한 MessageConverter를 찾고, 변환하여 전달
@ResponseBody
자바객체 → HttpResponse (JSON)
- return 타입에 맞는 MessageConverter를 통해 return 하는 객체를 해당 타입으로 변환해서 클라이언트로 전달
@RestController
리턴값에 자동으로 @ResponseBody가 붙게되어 별도 어노테이션 없이 HTTP 응답 본문에 자바 객체가 매핑되어 전달 된다.
ResponseEntity
@ResponseBody와 마찬가지로 HTTP 응답으로 변환
그러나, @ResponseBody와 달리 응답으로 변환할 정보를 객체로 만들어서 반환함
또한, 응답으로 변화 시 상태코드도 같이 넘겨줄 수 있다.
둘의 차이는 Header를 어디서 설정하느냐의 차이 뿐이다.
- @ResponseBody는 파라미터로 객체를 받아 메서드 내에서 header를 변경
- ResponseEntity는 클래스 객체를 생성 후 객체에서 바로 header 값을 변경
[ 출처 ]
@ResponseBody vs ResponseEntity
Http는 HyperText Transfer Protocol의 약자로, Client와 Server 사이에 요청과 응답을 처리하기 위한 규약이다. HTTP는 요청과 응답 모두 크게 세가지 요소로 구성 됨 HTTP 요청 Start Line : method, URL, 그리고 version으로 이루어져있으며, 서버에서 요청을 받아들이는 첫 줄 Headers : 요청에 대한 접속 OS, 브라우저, 인증 정보와 같은 부가적인 정보를 담고 있음 Body : 요청에 관련된 json, html과 같은 구체적인 내용을 포함 HTTP 응답 Spring에서는 HTTP Response를 만드는 것이 주요한 관심사이다.

728x90
'🛠 백엔드' 카테고리의 다른 글
톰켓이란? (0) | 2023.01.04 |
---|---|
HTTP란 무엇인가? (0) | 2023.01.03 |
Failed to load ApplicationContext 오류 (0) | 2022.12.08 |
Uploaded by Notion2Tistory v1.1.0