///////
Search
🦌

put과 patch는 무엇이고 각각 언제 사용되나요?

PUT 메서드는 새로운 리소스의 모든 것을 수정하지만 PATCH부분만 수정한다.
PUT은 항상 멱등성을 가지지만, PATCH는 항상 멱등성을 보장하지 않는다.

1. Update 방식

customers
id
name
age
1
마리오
10
2
루이지
20

리소스의 일부만 새로운 값을 보냈을 때

PUT은 보내지 않은 값은 null로 대체한다 (대상 리소스를 나타내는 데이터를 대체한다)
PUT /customers?id=1 { name : 데이지 }
JSON
복사
id
name
age
1
데이지
null
2
루이지
20
Patch 는 보내지 않은 값은 그대로 유지한다
PATCH /customers?id=1 { name : 데이지 }
JSON
복사
id
name
age
1
데이지
10
2
루이지
20

요청한 URI에 자원이 존재하지 않을 때

PUT은 새로운 자원을 생성한다
PUT /customers?id=4 { name : 와리오, age: 99999 }
Plain Text
복사
id
name
age
1
마리오
10
2
루이지
20
4
와리오
99999
PATCH는 새로운 자원을 생성하지 않고, 서버에 오류를 응답으로 보낸다
PATCH /customers?id=4 { name : 와리오, age: 99999 }
Plain Text
복사
id
name
age
1
마리오
10
2
루이지
20

2. 멱등성

동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다
PUT은 항상 멱등성을 보장하지만, PATCH는 멱등성을 보장하도록 설계할 수 있지만, 멱등성을 보장하지 않도록 설계할 수도 있다. PUT은 요청에 대하여 리소스를 통째로 바꿔버리기 때문에 멱등성이 보장되지만, PATCH는 리소스의 일부에 대하여 변화를 명령할 수 있기 때문이다.
멱등인 PATCH
PATCH /customers?id=1 { age = 100 }
Plain Text
복사
id
name
age
1
마리오
100
2
루이지
20
멱등이 아닌 PATCH
나이를 변경하는 기능이 있고, 한번 호출할 때 마다 나이를 10 더하는 식으로 변경 할 수 있다고 가정
PATCH /customers?id=1 { "operation": "add", "age": 10"} }
JSON
복사
customers
id
name
age
1
마리오
10
2
루이지
20
첫번째
id
name
age
1
마리오
20
2
루이지
20
두번째
id
name
age
1
마리오
30
2
루이지
20
같은 요청을 보냈지만 요청할 때마다 반환되는 값이 변하기 때문에 해당 PATCH는 멱등성을 가지고 있지 않다.
참고: