일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- effectivejava
- 카카오
- 클린아키텍처
- 오블완
- Sort
- Effective Java 3
- 티스토리챌린지
- 스프링
- 이펙티브 자바
- JavaScript
- Spring
- 이펙티브자바
- 엘라스틱서치
- 알고리즘
- java
- 스프링 핵심원리
- 스프링핵심원리
- kubernetes
- 알고리즘정렬
- 스프링부트
- 카카오 면접
- 예제로 배우는 스프링 입문
- Effective Java
- 자바스크립트
- 자바
- 이차전지관련주
- 김영한
- ElasticSearch
- k8s
- 코딩테스트
- Today
- Total
Kim-Baek 개발자 이야기
POST, PUT 차이 본문
POST
post 메서드는 기존에 알고있던대로 등록에 관한 내용이다. http 메세지로 넘어온 엔티티를 새로운 자원으로 등록한다.
새로운 자원으로 등록하지않을 수도있는데 이런 경우엔 200(ok)이나 204(no content) response code로 응답한다. 새로운 자원으로 만들어진 경우에는 201(created) response code로 응답하며 신규 생성된 자원의 위치를 헤더에 포함해야한다. 무슨 말이냐하면 예를들어 게시판에 새로 게시물을 등록하면 이를 따라갈수있는 위치를 응답 헤더에 넣어야한다는 의미다.
201 created Location: /board/2
PUT
post와 가장 큰차이는 put 메서드는 자원의 식별자를 이미 알고있는 상태여야한다는 점이다. put 메서드는 식별자의 자원을 http 메세지로 함께 넘어온 엔티티로 교체한다. response code는 200(ok), 204(no content)를 사용한다. 다만 put 메서드로 넘어온 식별자가 꼭 존재하고있는 식별자일 필요는 없다. 존재하지않는 식별자를 넘길수도있는데 이런 경우엔 넘어온 식별자를 id로 하는 새 자원을 생성하고 201(created) 응답을 한다. 식별자를 id로 사용할수없는 경우엔 에러코드로 응답한다.
차이
새 자원을 생성한다는 점에서 POST랑 같네?! 라고 생각할수도있지만 POST와 PUT의 가장 큰 차이는 POST는 request message로 포함된 엔티티를 이용해 새로운 자원을 생성해 내는것이고, PUT은 request message와 함께 넘어온 식별자의 자원을 만드는것이다. 음 말이 좀 이해하기 어려운데 똑같은 요청이 POST로 2번 날아오면 POST는 2개의 자원을 생성한다. 게시판에 글쓰기 요청을 2번 날리면 2개의 게시물이 등록되는것이다. PUT으로 동일한 요청을 2번 날린다고 생각해보자. 이때 PUT은 식별자를 포함해야한다. 다만 꼭 존재하는 식별자를 포함할 필요는 없으므로 존재하지않는 식별자로 요청을 하게되면 이때는 POST와 동일하게 자원을 생성한다. 하지만 두번째 요청에선 이미 첫번째 요청에서 생성된 자원이 있으므로 자원을 생성하지않고 교체하게된다. 이 부분이 POST와 PUT이 달라지게된다.
post request 예제(요청할때 식별자를 보내지않음)
POST /board
put request 예제(요청할때 식별자를 보내야함, 그게 실제로 존재하는것인지는 중요치 않음)
PUT /board/2
정리
참고 자료들을 보면 idempotent 라는 단어가 등장한다. 우리말로하면 멱등성이라는건데 1번을 실행하든 100번을 실행하든 결과가 같은 성질을 의미한다. POST나 PUT이나 존재하지않는 자원으로 요청을하면 신규 등록을 하는건 동일하나 동일한 요청을 2번 이상했을때는 확연히 결과가 달라지게된다. POST메서드는 멱등성을 만족하지못하고, PUT은 만족하게된다. 평소에 궁금했던 내용인데 이번기회에 블로그에 정리해놓는다. 나중에 면접때 질문한번 들어왔음좋겠다.
'컴퓨터 공학 > 네트워크' 카테고리의 다른 글
WAS, Tomcat 그리고 Jetty (0) | 2020.10.17 |
---|---|
브라우저로 웹 사이트에 접속할 때 일어나는 일 (0) | 2020.10.16 |
OSI 7계층, TCP/IP 4계층 (1) | 2020.10.15 |
HTTP, HTTPS, TCP, UDP (0) | 2020.10.14 |
CORS(Cross-Origin Resource Sharing)란 (0) | 2020.09.22 |