POST와 PUT의 차이?

대체 POST와 PUT의 차이는 무엇일까~? 총정리
윤여찬's avatar
Dec 21, 2023
POST와 PUT의 차이?
내가 공부했던 post와 put의 차이는
post는 서버에 데이터를 생성할 때 사용하는 것이고
put은 서버에 있는 데이터를 수정하는데 사용한다는 것이었다.
하지만 질문을 받았을 때 막상 어떻게 대답할 지 몰랏단 것은 결국 몰랏단 것이다.
그렇기에 제대로 공부하고 넘어가보고자 한다.
 
우선,
POST : 데이터 생성
PUT : 데이터 생성 및 수정
post/data { "name": "youn", "age": 32, } RESPONSE 200 { "id": 1, "name": "youn", "age": 32, }
post 방식으로 요청했을 경우 id가 1로 잘 생성 된다.
post/data/2 { "name": "hello", "age": 2, } RESPONSE 200 { "id": 2, "name": "hello" "age": 2 }
2번 data/2가 없었기 때문에 새롭게 생성되어 반환하는 것을 확인할 수 있다.
만약에 2번에 데이터가 있었다면 hello 나이는 2로 바뀌었을 것이다.

post/data { "name":"youn", "age":32, } { "name":"youn", "age":32, } { "name":"youn", "age":32, } Response 200 { "id":1, "name":"youn", "age":32, } { "id":2, "name":"youn", "age":32, } { "id":3, "name":"youn", "age":32, }
3번을 요청하면 그아래로 3개의 데이터가 새롭게 생성 된 것을 확인할 수 있다.
put/data/2 { "name":"hello", "age":2, } { "name":"hello", "age":2, } { "name":"hello", "age":2, } Response 200 { "id":2, "name":"hello", "age":2, }
put/data/2 경로로 put 메소드를 세번 사용하더라도 처음에만 한번 만들어지고 더 생성되지 않는 것을 확인할 수 있다.
 
이것은 멱등하다라고 하는데 프로그램에서 사용하는 멱등하다 는 무엇을 뜻하는 것일까?
이 블로그에서 멱등성을 이해할 수 있었다.
→ 첫 번째 수행을 한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성을 뜻한다. 즉 멱등한 작업의 결과는 한 번 수행하든 여러번 수행하든 같다.
MDN에서는 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다.
라고 적혀있다.

정리

공식문서를 찾아보면서 느낀점은
postrequest message로 포함된 엔티티를 이용해 새로운 자원을 생성해 내는 것이고,
putrequest message와 함께 넘어온 식별자의 자원을 만드는 것이다.
즉 만약 게시판에 글을 쓰는 요청을 보내는 api가 있다고 가정해보자.
post는 똑같은 요청이 두번 날라오면 두번의 게시물을 만들어낸다.
put은 동일한 요청이 두번 날라오면 멱등성 때문에 한개의 게시물이 생긴다.
그리고 put은 식별자를 보내주어야한다.
하지만 post는 식별자를 보내지 않아도 된다.
 
아래는 다른 블로그 글 중 이해하기 쉬웠던 부분을 가져와봤다.
당신은 만드는 URL 개체에 이름을 명시적으로 지정하시나요, 아니면 서버가 결정하게 하시나요?
이름을 지정하면 PUT을 사용해주세요.
서버가 결정하게 한다면 POST를 사용해주세요.
 
PUT는 멱등성을 보장하도록 정의됩니다.
따라서 객체를 두 번 PUT하면 추가 효과가 없어야합니다.
이것은 좋은 특성입니다. 가능한 경우 PUT를 사용하십시오.
단, 서버에서 PUT-멱등성이 올바르게 구현되었는지 확인하십시오.
 
이렇게 PUT과 POST의 차이를 알아보았다.
 
다시금 정리 해보면 크게 멱등성을 이용하는 방법을 잘 고려하면 좋은 api를 설계하고 사용할 수 있을 것같단 생각을 하게 되었다.
 
Share article

찬찬잉