[TIL] @RequestBody & @ResponseBody

SSOYEONG·2022년 7월 26일
0

스프링 MVC 1편

목록 보기
6/6
post-thumbnail

클라이언트-서버 비동기 통신

  • 클라이언트 > 서버 로 통신하는 메시지: 요청(request) 메시지
  • 서버 > 클라이언트 로 통신하는 메시지: 응답(response) 메시지
  • 웹에서 화면전환(새로고침) 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어진다.
  • 비동기 통신을 위해서는 클라이언트 > 서버로 요청 메시지를 보낼 때, 서버 > 클라이언트로 응답 메시지를 보낼 때 본문에 데이터를 담아서 보내야 한다.
  • 이 본문이 바로 body
  • 즉, 요청 본문 requestBody & 응답 본문 responseBody 를 담아서 보내야 한다.
  • 이때 본문에 담기는 데이터 형식은 여러 가지 형태가 있으며 가장 대표적으로 사용되는 것이 JSON이다.

요약 | 비동기식 클라이언트-서버 통신을 위해 JSON 형식의 데이터를 주고 받는다.

  • 스프링 부트에서는 resquest/response에 대한 JSON > 자바 객체 > JSON에 대한 변환이 가능
  • 이를 가능케 해주는 것이 @RequestBody@ResponseBody이다.
  • 깊게 들어가면 Message Converter가 이 역할을 한다고 볼 수 있다.
  • 이제 @RequestBody@ResponseBody에 대해 알아보자.

@RequestBody

JSON 요청 > HTTP 메시지 컨버터 > 자바 객체

@ResponseBody
    @PostMapping("/request-body-json-v5")
    public HelloData  RequestBodyJsonV5(@RequestBody HelloData data) {

        log.info("username={}, age={}", data.getUsername(), data.getAge());
        return data;
    }
  • POST 메서드로 넘어온 JSON 데이터를 잡아낸다.
  • 클라이언트 요청에 담긴 JSON Object가 스프링 부트에 정의된 HelloData 객체로 변환되어 data에 담긴다.

@ResponseBody

자바 객체 > HTTP 메시지 컨버터 > JSON 응답

  @ResponseStatus(HttpStatus.OK)
  @ResponseBody
  @GetMapping("/response-body-json-v2")
  public HelloData responseJsonV2() {
      HelloData helloData = new HelloData();
      helloData.setUsername("userA");
      helloData.setAge(20);

      return helloData;
  }
  • 클라이언트 요청에 대해 서버에서 그에 대한 응답으로 HelloData 객체를 HTTP의 BODY에 직접 반환한다.
  • viewResolver 대신에 HttpMessageConverter가 동작

References
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
인프런 - 김영한님의 [스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술] 수강하며 필기한 내용입니다.
https://cheershennah.tistory.com/179

profile
Übermensch

0개의 댓글