클라이언트와 서버의 통신(HTTP)
HTTP(HyperText Transfer Protocol) 통신이란,
브라우저와 서버가 통신하기 위한 여러 프로토콜 가운데 한 종류로 웹 브라우저와 웹 서버 사이에 HTML(하이퍼텍스트) 문서를 주고받는 데 사용되는 통신 프로토콜이다.
HTTP의 통신 방식은 기본적으로 '요청과 응답(request, response)'으로 이루어져 있다.
클라이언트가 요청(HttpRequest)을 서버에 보내면 서버는 클라이언트에게 응답(HttpResponse)하는 구조이다.
HttpRequest는 start line, headers, body 세 부분으로 나누어져 있으며,
HttpResponse 역시 비슷하게 status line, headers, body 세 부분으로 나누어져 있다.
클라이언트와 서버 간의 HTTP 통신에서 요청과 응답을 보낼 때, 필요한 데이터를 담아서 보내는 공간이 바로 body이다.
이때 요청하는 요청 본문을 requestBody, 응답하는 응답 본문을 responseBody라고 한다.
본문에 담기는 데이터 형식은 여러 가지가 있지만 가장 대표적으로 사용되는 것이 JSON이며, xml 형식도 사용된다.
Spring에서는 @RequestBody, @ResponseBody 어노테이션을 명시함으로써 MessageConverter를 통한 데이터 변환 과정을 거치게 된다.
ex) 클라이언트에서 서버에 JSON 형식의 requestBody로 요청 데이터를 전송했을 때, Java에서는 해당 JSON 형식의 데이터를 받기 위해서 JSON -> Java Object로의 변환이 필요하다.
마찬가지로 요청된 데이터를 처리 후, 서버에서 클라이언트로 다시 응답 데이터 responseBody를 보낼 때도 Java Object에서 JSON 또는 XML 같은 형식으로의 변환이 필요하다.
이러한 과정을 해당 Annotation들이 처리해주는 것입니다.
web에서 받은 data는 java에서 사용 시 : web -> (javaObject로 변환 ) - > java에서 활용
java에서 web으로 data 보낼 시 : java -> ( json Object로 변환) -> web
자바객체를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다.
@ResponseBody 가 붙은 파라미터가 있으면 HTTP요청의 미디어타입과 파라미터의 타입을 먼저 확인한다.
서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다.
이 어노테이션이 붙은 파라미터에는 http요청의 본문(body)이 그대로 전달된다.
일반적인 GET/POST의 요청 파라미터라면 @RequestBody를 사용할 일이 없을 것이다.
반면에 xml이나 json기반의 메시지를 사용하는 요청의 경우에 이 방법이 매우 유용하다.
HTTP 요청의 바디내용을 통째로 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다.
클라이언트에서 서버로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 서버로 보내면, 서버에서는 @RequestBody 어노테이션을 사용하여 HTTP 요청 본문에 담긴 값들을 자바객체로 변환시켜, 객체에 저장한다.