새소식

[5분 내로] 강의실/📋 Spring Annotation이란?

[Spring] @RequestBody와 @ResponseBody은 무엇인가? 어떻게 동작하는가?

  • -
728x90

안녕하세요. 팀드모네입니다.
스프링프레임워크를 잘 다루는 방법은 어노테이션을 열심히 공부하는 것입니다.
무튼, 지난 시간에 이어서 스프링 어노테이션에 관한 포스팅을 진행하겠습니다.
@RequestBody와 @ResponsBody 어노테이션을 이해하기 위해선 HTTP가 뭔지 알아야 합니다.

 

👨‍💻 HTTP(Hypertext Transfer Protocol)란?

-> 인터넷상에서 데이터를 주고 받기 위한 약속
웹 개발자는 꼭 알아야하는 통신 프로토콜으로 인터넷상에서 데이터를 주고 받기 위한 약속입니다. 아래의 사진과 같은 모양으로 HTTP BODY 부분에 JSON이 들어갈 수 있습니다. 이것이 오늘 포스팅의 핵심입니다.

POST /member
Host: www.example.com
Content-Type: applicationjson
Content-Length: 35
{
	"member":
	{
		"firstName":"Joe",
		"lastName":"Bloggs"
	}
}

<그림> HTTP body부분에 JSON이 존재하는 예시

 

👨‍💻 @RequestBody란?

-> HTTP body안에 JSON을 VO에 맵핑하는 스프링 어노테이션
맵핑이 뭐냐면 그냥 값을 넣어줬다는 소립니다. 우리 시스템으로 날아온 JSON 형태의 데이터를 JAVA 객체에 자동으로 값을 넣어주는 어노테이션이 @RequestBody입니다. 따라서, RequestBody를 이해한 개발자는 아래와 같이 코드를 작성하지 않습니다.

dataVO.setName(request.getParameter("name"));
dataVO.setAge(request.getParameter("age"));
dataVO.setAdr(request.getmeteret("adr"));
dataVO.setEml(request.getParameter("eml"));

 

어노테이션을 선언해주는 것으로 VO(value object, 자바 객체)에 값이 자동으로 들어가기 때문이죠. 사용 예제는 아래와 같습니다.

@RestController
public class LoginController{
    
    @RequestMapping("/login")
    public LoginVO test(@RequestBody User user){
        LoginVO loginVo = userService.login(user); 
        return loginVo;
    }
}

 

-> VO 객체를 JSON으로 바꿔서 HTTP body에 담는 스프링 어노테이션

@RequestBody와 반대로 @ResponseBody는 VO(value object, 자바 객체)를 JSON 형태로 변환해서 HTTP BODY에 담는 어노테이션입니다.

 

개발자는 부수적인 작업을 할 필요없이 함수가 VO(value object, 자바 객체)만 리턴하도록 짜면 되는 것이죠.

@ResponseBody
@RequestMapping(value = "/test")
public LoginVO test() throws Exception {

  LoginVO loginVO = new LoginVO();
  loginVO.setId("admin");

  return loginVO;
}

 

@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에 대해서 알아보겠습니다.

다음 포스팅으로 이동하기 : https://doctorson0309.tistory.com/406

End..

질문사항이 있으시면 언제든 댓글 남겨주세요. 감사합니다.


reference : 

continue...

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.