티스토리 뷰

클라이언트와 서버의 비동기 통신처리

스프링에서 비동기 처리를 할 때에 @RequestBody와 @ResponseBody 를 사용한다.

웹에서 이루어지는 데이터를 가져오고 전송하는 동작들은 클라이언트와 서버간의 통신이 이루어지기 때문에 가능하다.

 

검색의 경우

  1. 검색 버튼을 누른다. 
  2. 검색 키워드가 클라이언트(Javascript)에서 서버(Java)로 전송된다.
  3. 서버에서 검색키워드를 이용해 클라이언트에서 요청한 메세지를 처리한다.
  4. 응답을 만들어 다시 클라이언트로 보낸다.
  5. 클라이언트는 서버로부터 온 데이터를 화면에 보여준다.

요청과 응답, 비동기통신

앞서 말한 검색의 예에서 볼 수 있듯이 클라이언트는 서버로 '요청'하며 서버는 클라이언트에게 메시지를 '응답'한다. 

이러한 동작들은 대부분 비동기 통신을 통해 이루어지며 비동기 통신을 하기 위해 클라이언트는 서버로 메시지의 본문에 데이터를 담아서 보내며, 서버도 클라이언트로 응답을 보내기 위해 본문에 데이터를 담아서 보낸다.

 

따라서 여기서 본문을 연결해서 단어를 만들어 

요청본문(RequestBody), 응답 본문(ResponseBody)가 만들어 진다.

 

 

@RequestBody, @ResponseBody

스프링에서는 어노테이션을 통해 응답과 요청을 처리한다.

각각의 의미를 살펴보면 다음과 같다.

  • @RequestBody
    • HTTP 요청 몸체를 자바 객체로 전달받음
    • HTTP 요청의 body내용을 자바 객체로 매핑하는 역할
      • Body자체를 가져오므로 POST에서만 사용가능함
      • 주로 객체 단위로 받아서 사용
  • @ResponseBody
    • 자바 객체를 HTTP 응답 몸체로 전송
    • 자바 객체를 HTTP 요청의 Body내용을 매핑하는 역할

 

요청과 관련된 스프링 어노테이션

  • @RequestParam
    • GET에서 넘긴 파라미터를 메서드의 인자로 매칭하는 방법으로 사용 
  • @PathVariable
    • URI로부터 placeholder를 얻음
  • @RequestParam vs @PathVariable
    @GetMapping("/user/{userId}/invoices")
    public List<invoice> listUserInvoices(
    				@PathVariable("userId") int user,
                    @RequestParam(value = "date", required = false) Date dateOrNull){
        ...
    }    
  • 만약 http://localhost:8080/user/1234/invoices?date=05-23-2020 이라고 한다면
    • @PathVariable은 {userId} 위치의 1234를 얻고
    • @RequestParam은 date에 해당하는 05-23-2020을 얻는다.

참고

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함