본문 바로가기
Backend

[JAVA] 비동기처리, @RequestBody 와 @ResponseBody 그리고 @ModelAttribute와의 차이점

by Dddu 2025. 1. 19.
클라이언트와 서버의 비동기 통신 처리

웹에서 이루어지는 데이터 통신은 Client Server 간에서 이루어진다.

ex)  Client = 로그인 폼에 ID/PW를 입력 후 '로그인' 버튼을 클릭하면 입력한 데이터가 서버로 넘어가 요청 

       Server = 서버는 이를 판단해 로그인 여부를 결정한 후 클라이언트에 응답

 

비동기 통신이란 ?

웹페이지를 새로고침하지 않고도 데이터를 불러오는 방식. (데이터가 서버와 주고 받아지는 방식)

ex ) 네이버 블로그나 카페에서 댓글을 작성하고 작성 버튼을 누르면 페이지 전체가 reload 되지 않고 댓글 영역 부분만 업데이트 되어 댓글이 적용됨을 볼 수 있다.

 

 

비동기 통신 시 요청과 응답메세지를 본문(Body)에 담아야하며, 본문에 담는 데이터 형식은 요즘 웹 개발에서 가장 많이 사용하는 JSON 이다. 이 때 @RequestBody와 ResponseBody 를 사용한다.

 

  •  JSON (Javascript Object Notation) = 속성-값 쌍(attribute-value paris)으로 이루어진 데이터 구조로, 비동기 브라우저/서버 통신(AJAX)에서 주로 사용되며, XML을 대체하는 주요 데이터 포맷

 

@RequestBody와 @ResponseBody의 역할

  • @RequestBody : 요청 본문을 자바 객체로 변환
    클라이언트에서 보낸 요청 본문에 담긴 데이터를 자바 객체로 변환함. 
    VO나 DTO를 이용해 데이터를 받을 때 @RequestBody를 사용해 객체로 쉽게 변환 가능. ( 예전에는 HttpServletRequest를 이용해 가져왔었음)
  • @ResponseBody : 자바 객체를 JSON으로 응답
    서버에서 클라이언트로 데이터 응답할 때는 @ResponseBody 사용하여 자바 객체를 JSON 형태로 변환하여 클라이언트에 응답. (서버는 클라이언트가 쉽게 이해할 수 있는 형식으로 데이터 전달할 수 있게 됨)

여기서 든 생각, @RequestBody와 @ModelAttribute의 차이점이 뭘까 ?

공통점 = 클라이언트에서 보낸 데이터를 java object로 변환
차이점

@RequestBody : HttpMessageConverter를 통해 파싱된 HTTP 요청 본문이 Java 객체로 변환

@ModelAttribute : Http 파라미터 데이터를 Java 객체에 매핑 (단 쿼리 string 및 form 형식이 아닌 데이터는 처리 불가)

 

#요약

 클라이언트 > 서버 데이터 보낼 때 JSON 형태로 요청하면 서버는 @RequestBody 어노테이션 이용해 HTTP 요청 본문에 담긴 값을 자바 객체로 변환.

서버에서 클라이언트로 데이터 응답 시에는 자바 객체를 JSON으로 변환해 @ResponseBody 어노테이션 사용하여 응답 본문 전송.