1. 🌐 스프링에서 비동기 처리와 @RequestBody, @ResponseBody 사용 이유
이번 포스팅에서는 스프링에서 비동기 처리를 어떻게 하는지, 그리고 @RequestBody와 @ResponseBody를 사용하는 이유에 대해 알아보겠습니다.
🔹 클라이언트와 서버의 비동기 통신 처리
웹에서 이루어지는 데이터 통신은 클라이언트(Client)와 서버(Server) 간에서 이루어집니다. 예를 들어, 로그인 버튼을 누르면 입력한 아이디와 비밀번호가 서버로 넘어가 요청(Request)을 하게 됩니다. 서버는 이를 판단해 로그인 여부를 결정한 후 클라이언트에 응답(Response)을 보내죠.
🔹 요청(Request)과 응답(Response)의 중요성
- 클라이언트가 서버로 보내는 메시지를 요청 메시지라고 하며, 서버가 클라이언트로 보내는 메시지를 응답 메시지라고 합니다.
- 여기서 중요한 점은 요청(Request)과 응답(Response)이 서버와 클라이언트 간의 기본적인 통신 방식이라는 것이죠.
🔹 비동기 통신이란?
- 비동기 통신은 화면 전환(F5, Refresh) 없이 데이터가 서버와 주고받아지는 방식입니다.
- 비동기 통신을 굳이 써야 하나? 라고 생각할 수 있지만, 예를 들어 회원가입을 할 때, 아이디 중복 체크 버튼을 누르고 페이지가 리프레시되면서 입력한 값들이 모두 사라진다면 정말 곤란하겠죠? 이때 비동기 통신을 통해 이런 문제를 해결할 수 있습니다.
🔹 요청과 응답 메시지의 본문: @RequestBody와 @ResponseBody
비동기 통신을 할 때는 요청과 응답 메시지를 본문(Body)에 담아야 합니다. 이때 사용하는 것이 바로 @RequestBody와 @ResponseBody입니다.
🔹 본문에 담는 데이터 형식: JSON
요즘 웹 개발에서 가장 많이 사용하는 데이터 형식은 JSON(Javascript Object Notation)입니다. JSON은 속성-값 쌍(attribute-value pairs)으로 이루어진 데이터 구조로, 비동기 브라우저/서버 통신(AJAX)에서 주로 사용되며, XML을 대체하는 주요 데이터 포맷으로 알려져 있습니다.
2. 🔧 @RequestBody와 @ResponseBody의 역할
🔹 @RequestBody: 요청 본문을 자바 객체로 변환
@RequestBody는 클라이언트에서 보낸 요청 본문에 담긴 데이터를 자바 객체로 변환해줍니다. 예전에는 HttpServletRequest
를 이용해 데이터를 가져오는 방법이 있었지만, 최근에는 VO나 DTO를 이용해 데이터를 받을 때 @RequestBody를 사용해 객체로 쉽게 변환할 수 있습니다.
🔹 @ResponseBody: 자바 객체를 JSON으로 응답
반대로 서버에서 클라이언트로 데이터를 응답할 때는 @ResponseBody를 사용해 자바 객체를 JSON 형태로 변환하여 클라이언트에 응답합니다. 이렇게 하면 서버는 클라이언트가 쉽게 이해할 수 있는 형식으로 데이터를 전달할 수 있게 됩니다.
3. 🛠️ 코드 예시: 비동기 처리에서 @RequestBody와 @ResponseBody 사용
아래는 간단한 예시 코드입니다. 클라이언트에서 요청 본문을 JSON으로 보내면, 서버에서는 이를 자바 객체로 변환해 처리하고, 응답할 때는 다시 자바 객체를 JSON으로 변환하여 클라이언트로 전달합니다.
@RestController
@RequestMapping("/api")
public class HttpMessageController {
/**
* @RequestBody를 통해 자바 객체로 변환할 때 HttpMessageConverter를 사용하여
* 헤더에 담긴 컨텐츠 타입을 보고 어떤 메시지 컨버터를 사용할 것인지 판단하여
* 요청 본문에 담긴 값을 자바 객체로 변환
*/
@GetMapping
@ResponseBody
public ResponseEntity<JsonResponse<Object>> create(@RequestBody Event event) {
// 생략
return new JsonResponse<Object>()
.setBody("JSON data")
.setStatusCode("S0000")
.buildResponse(HttpStatus.OK);
}
}
4. ✨ 결론
- 클라이언트에서 서버로 데이터를 보낼 때, JSON 형태로 데이터를 만들어 요청하면 서버는 @RequestBody 어노테이션을 이용해 HTTP 요청 본문에 담긴 값을 자바 객체로 변환합니다.
- 반대로 서버에서 클라이언트로 데이터를 응답할 때는 자바 객체를 JSON으로 변환해 @ResponseBody 어노테이션을 사용하여 응답 본문으로 전송합니다.
- 즉, @RequestBody와 @ResponseBody는 비동기 통신에서 매우 중요한 역할을 하며, JSON 데이터 형식으로 서버와 클라이언트 간의 데이터 교환을 원활하게 해줍니다.
'Java' 카테고리의 다른 글
[JAVA] Spring Annotation @MapperScan이란? (0) | 2022.08.17 |
---|---|
[JAVA]Spring Boot 압축 파일 다운받기(Spring boot zip file download) (0) | 2022.05.09 |
[JAVA] Primitive type(기본 타입) VS Reference type(참조 타입) (0) | 2022.04.11 |
[JAVA] DTO vs VO (0) | 2022.02.10 |
[JAVA]Mapper vs DAO (0) | 2022.02.08 |