web developer

[java] @RequestBody , @ResponseBody 어노테이션 본문

Framework/Spring [java]

[java] @RequestBody , @ResponseBody 어노테이션

trueman 2022. 3. 4. 15:27
728x90
728x90

@RequestBody , @ResponseBody  어노테이션 


스프링에서 비동기 처리를 하는 경우 @RequestBody , @ResponseBody를 사용한다.

비동기 처리를 위해 이 어노테이션들은 어떻게 작동할까?


클라이언트와 서버의 비동기 통신 


클라이언트에서 서버로 통신하는 메시지를 요청(request) 메시지라고 하며, 서버에서 클라이언트로 통신하는 메시지를 응답(response) 메시지라고 한다.

웹에서 화면전환(새로고침) 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어진다.

1-1. 비동기통신을 하기 위해서 해야할 것은?

 

클라이언트에서 서버로 요청 메세지를 보낼 때는? 혹은 서버에서 클라이언트로 응답을 보낼 떄는? 

본문에 데이터를 담아서 보내야 한다. 이 본문이 body 이다. 

요청 본문은 requestBody, 응답 본문은 responseBody에 담아서 보내야 한다. 

1-2. 이때 본문에 담기는 데이터 형식은 여러가지가 있지만, 가장 대표적으로 사용되는 것은?

 

이는 JSON 이다. 비동기식 클라이언트-서버간의 통신을 위해 JSON 형식의 데이터를 주고받는 것이다. 

더보기
  • 키와 값(key-value) 한쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포맷이다.
  • http통신 시 데이터를 주고받을 때 흔히 쓰이는 데이터 포맷 (josn, xml... ) 중 하나이다. 
  • 비동기식 통신(ajax)을 위해, 넓게는 xml을 대체하는 주요 데이터 포맷이다. 
  • 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다.
  • 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.
var json={"key1":"value1" , "key2":"value2"}
스프링 MVC에서도 클라이언트에서 전송한 xml데이터나 json 등 데이터를 컨트롤러에서 DOM객체나 자바객체로 변환해서 송수신할 수 있다.

1-3. 본문에 데이터를 담기 위해서 사용하는 어노테이션은?

 

@RequestBody 어노테이션은 HTTP요청(request) 바디를 자바객체로 변환한다.

@ResponseBody 어노테이션은 자바객체를 HTTP 응답(response) 바디로 변환해준다. 


@RequestBody 


@RequestBody 어노테이션이 붙은 파라미터에는 http요청의 본문(body)이 그대로 전달된다. 일반적인 GET/POST의 요청 파라미터라면 @RequestBody를 사용할 일이 없을 것이다.

반면에 xml이나 json기반의 메시지를 사용하는 요청의 경우에 이 방법이 매우 유용하다.

HTTP 요청의 본문(body)을 통째로 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다. (json → String / 객체)
JSON요청 데이터 → HTTP메시지 컨버터 → 객체 (@RequestBody HelloData helloData) => ObjectMapper의 역할 대체 생략 불가능

@ResponseBody 


@ResponseBody 어노테이션은 자바객체를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다.

@ResponseBody 가 붙은 파라미터가 있으면 HTTP요청의 미디어타입과 파라미터의 타입을 먼저 확인한다.

dispatcher-servlet.xml 의 <annotation-drvien> 태그 내에 선언하는 <message-converter> 에서 확인.

 

메세지 변환기 중에서 해당 미디어타입과 파라미터 타입을 처리할 수 있다면, HTTP요청의 본문 부분을 통째로 변환해서 지정된 메소드 파라미터로 전달해준다.

@Responsebody 어노테이션을 사용하면 http요청의 본문(body)을 자바 객체로 전달받을 수 있다.

컨트롤러의 처리 결과를 HTTP 바디에 직접 넣어서 전달 가능 (String / 객체 → json)
객체 → HTTP메시지 컨버터 → JSON응답 데이터

@RequestBody, @ResponseBody 정리


1-1. 클라이언트 → 서버 : @RequestBody

클라이언트에서 서버로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 서버로 보내면, 서버에서는 @RequestBody 어노테이션을 사용하여 HTTP 요청 본문에 담긴 값들을 자바객체로 변환시켜, 객체에 저장한다.

 

1-2. 서버 → 클라이언트 : @ResponseBody

서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다. 


출처 : https://cheershennah.tistory.com/179

출처 : https://ocblog.tistory.com/49 

출처 : https://zzznara2.tistory.com/761 [@RequestBody]

 

728x90
728x90