[Spring] @RequestBody와 @ResponseBody은 무엇인가? 어떻게 동작하는가?
728x90
안녕하세요. 팀드모네입니다. 스프링프레임워크를 잘 다루는 방법은 어노테이션을 열심히 공부하는 것입니다. 무튼, 지난 시간에 이어서 스프링 어노테이션에 관한 포스팅을 진행하겠습니다. @RequestBody와 @ResponsBody 어노테이션을 이해하기 위해선 HTTP가 뭔지 알아야 합니다.
👨💻 HTTP(Hypertext Transfer Protocol)란?
-> 인터넷상에서 데이터를 주고 받기 위한 약속 웹 개발자는 꼭 알아야하는 통신 프로토콜으로 인터넷상에서 데이터를 주고 받기 위한 약속입니다. 아래의 사진과 같은 모양으로 HTTP BODY 부분에 JSON이 들어갈 수 있습니다. 이것이 오늘 포스팅의 핵심입니다.
-> HTTP body안에 JSON을 VO에 맵핑하는 스프링 어노테이션 맵핑이 뭐냐면 그냥 값을 넣어줬다는 소립니다. 우리 시스템으로 날아온 JSON 형태의 데이터를 JAVA 객체에 자동으로 값을 넣어주는 어노테이션이 @RequestBody입니다. 따라서, RequestBody를 이해한 개발자는 아래와 같이 코드를 작성하지 않습니다.
어노테이션을 선언해주는 것으로 VO(value object,자바 객체)에 값이 자동으로 들어가기 때문이죠. 사용 예제는 아래와 같습니다.
@RestController
public class LoginController{
@RequestMapping("/login")
public LoginVO test(@RequestBody User user){
LoginVO loginVo = userService.login(user);
return loginVo;
}
}
👨💻@ResponseBody란?
-> VO 객체를 JSON으로 바꿔서 HTTP body에 담는 스프링 어노테이션
@RequestBody와 반대로 @ResponseBody는 VO(value object,자바 객체)를JSON 형태로 변환해서 HTTP BODY에 담는 어노테이션입니다.
👨💻@ResponseBody예제
개발자는 부수적인 작업을 할 필요없이 함수가 VO(value object, 자바 객체)만 리턴하도록 짜면 되는 것이죠.
@ResponseBody
@RequestMapping(value = "/test")
public LoginVO test() throws Exception {
LoginVO loginVO = new LoginVO();
loginVO.setId("admin");
return loginVO;
}
👨💻꿀팁) @ResponseBody를 생략하는 방법??
@RestController을 사용하면 됩니다.@RestController를 사용하면 리턴 값에 자동으로 @ResponseBody가 붙는 효과가 있습니다. 따라서 @ResponsBody를 명시하지 않아도 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달되는 것이죠. 아래의 예시를 잘 살펴보세요! @ResponsBody 어노테이션이을 선언하지도 않았는데, loginVO를 리턴하도록 함수를 구현한 것을 확인할 수 있습니다.
@RestController
public class LoginController{
@RequestMapping("/login")
public LoginVO test(@RequestBody User user){
LoginVO loginVo = userService.login(user);
return loginVo;
}
}
혹시 내용이 조금 어려우신가요? 어렵다고 생각하신 부분을댓글에 남겨주세요. 친절히 답변드리겠습니다.
다음 포스팅은@ModelAttribute, @RequestParam, @Configuration에 대해서 알아보겠습니다.