본문 바로가기
🛠 백엔드

RequestBody, ResponseBody와 ResponseEntity

by meteorfish 2023. 1. 18.
728x90

HTTP 통신

Client와 Server 간 통신 시, HTTPRequest로 요청을 보내고 HTTPResponse로 응답한다.

HTTPRequest와 HTTPResponse는 status line, headers, body 이렇게 세 부분으로 이루어져있음.

 

HTTP 요청, HTTP 응답 구성

  1. Start Line : 메서드, URL, version으로 이루어져있음. 서버에서 요청을 받아들이는 첫 줄
  1. Headers : 오쳥에 대한 접속 OS, 브라우저, 인증 정보 같은 부가적인 정보
  1. 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를 만드는 것이 주요한 관심사이다.
https://velog.io/@poochii96/ResponseBody-vs-ResponseEntity

 

728x90

'🛠 백엔드' 카테고리의 다른 글

톰켓이란?  (0) 2023.01.04
HTTP란 무엇인가?  (0) 2023.01.03
Failed to load ApplicationContext 오류  (0) 2022.12.08