본문 바로가기
웹개발/Springboot

HTTP 메서드 - PUT

by HoPpangg 2021. 6. 24.
SMALL

위 게시물과 내용이 이어집니다.

 

이번엔 PUT 방식을 사용해봅니다.

Body로 가서 이번엔 데이터 타입을 raw로 선택해줍니다.

raw는 원시데이터를 의미합니다.

STS툴로 이동해서 put 메서드에 매개변수를 입력해줍니다.

다시 postman으로 이동해서 send를 해주면

이번엔 콘솔창에 null이 반환이됩니다. 왜 이럴까요?


 

데이터는 byte stream을 통해서 1bit씩 이동합니다.

1bit --------------------byte stream ---------------------1bit

자바에서는 InputStream이 bit데이터로 받은 이진수를 정수(아스키코드)로 전환시켜줍니다.

이를 부호화라고 합니다. 하지만 사람이 이해하기 위해선 아스키코드보단 문자가 더 좋으니 문자로 부호화시켜줘야 합니다. 아스키코드를 하나하나 문자화시킬 수 있지만 InputStream을 InputStreamReader로 감싸 정수를 문자화 시켜줄 수 있습니다.

InputStreamReader는 여러개의 데이터를 처리할 수 있는 장점이 있지만 크기를 정해놓아야 한다는 단점이 있습니다. 

InputStream은 메모리 공간이 있어야 데이터를 받을 수 있는데 예를들어 실시간으로 메세지를 주고받는 프로그램의 경우 하루에 어느정도 양의 메시지를 주고 받을지 모르기때문에 InputStream으로 데이터를 처리하는데에는 무리가 있습니다.

이 단점을 보완해주는 것이 Buffer입니다.

InputStreamReader를 BufferedReader로 감사면 가변계열 데이터통신이 가능해집니다. 

 

<Buffer 동작 원리>

[Buffer] -------------------byte stream------------------- [Buffer]

Buffer의 크기는 4byte입니다.

우리가 입력했던 hello를 보내는 것을 가정하면

[h e l l] -------------------byte stream------------------- [ ]

                                        o (Buffer에 들어가지 못한 데이터)

[ ] -------------------byte stream------------------- [h e l l]

이동된 문자열은 readline()메서드를 통해서 빼내고 string 변수에 저장해줍니다.

[ o ] -------------------byte stream------------------- [ ]

Buffer에 들어가지 못했던 o가 들어갔지만 Buffer는 이동하지 않습니다.

그 이유는 Buffer의 4byte가 꽉 차야 데이터를 이동시키는 특성때문입니다.

이럴때는 flush()메서드로 강제로 데이터를 이동시켜줍니다. 

[ ] -------------------byte stream------------------- [ o ]

다시 readLine()메서드로 데이터를 빼내고 앞의 데이터를 저장한 변수에 이어 붙여주면

hello 전송이 완료됩니다.


Spring에서는 위의 절차가 다 담겨있습니다.

 

메서드가 실행될 때 @RequestBody가 매개변수로 전달받은 데이터를 bufferedReader로 읽어주는 것입니다.

그럼 다시 postman으로 가서 send를 해보면

콘솔창에 제대로 전달된 것을 볼 수 있습니다.

 

이번엔 원시코드 종류를 JSON으로 해봅니다.

간단한 예시코드를 입력하고 send를 눌러줍니다.

JSON코드를 보냈는데 이번엔 원시코드 그대로 출력합니다.

조금 더 활용해보기 위해 STS툴에서 com.cos.example패키지에  User class를 하나 생성해줍니다.

변수 2개와 getter/setter도 생성해줍니다.

이때 변수2개는 postman에 입력한 KEY값과 이름이 같아야합니다.

매개변수의 타입을 Object로 바꿔줍니다.

그리고 다시 postman에서 send를 해주면

입력한 username 키값이 콘솔창에 출력되는 것을 볼 수 있습니다.

이는 spring이 파싱된 데이터를 배개변수 타입인 오브젝트로 변환해서 받아주기 때문입니다.

 

키값을 다르게 했을 때 어떻게 되는지도 보겠습니다.

아까와 같은 상황에서 postman에서 보내는 데이터의 키값을 다르게 하고 send를 하면

콘솔창에 null 값이 뜨는 것을 볼 수 있습니다.

따라서 같은 이름을 쓰도록 주의합시다!

 

spring은 파싱된 데이터를 이렇게 한번에 오브젝트화해서 받을 수 있기때문에 회원가입 같은 여러가지 데이터를 받아올 때 굉장히 유용합니다. 회원가입 시 입력받은 데이터를 오브젝트로 받아서 데이터베이스로 넣어버리면 되기 때문입니다.

728x90
LIST

'웹개발 > Springboot' 카테고리의 다른 글

IoC 컨테이너  (0) 2021.06.24
HTTP 메서드 - POST  (0) 2021.06.24
HTTP 메서드 - 기초  (0) 2021.06.24

댓글