반응형
PUT
HTTP PUT 메서드는 요청 페이로드를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체한다.
PATCH
HTTP PATCH 메서드는 리소스의 부분적인 수정을 할 때 사용된다.
PUT과 PATCH의 차이점
- Update 방식의 차이
- 요청한 URI에 자원이 존재하지 않을 때
- 멱등성 관점
1. Update 방식의 차이
PUT
리소스가 다음과 같이 있다고 가정한다.
id | balance | name |
1 | 100 | 민석 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
예시 1 :
PUT /customers?id=1
{
"name": "민돌",
"balance": 0
}
결과 :
id | balance | name |
1 | 0 | 민돌 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
예시 2 :
PUT /customers?id=1
{
"name": "민돌"
}
결과 :
id | balance | name |
1 | null | 민돌 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
설명 : 전자의 경우 모든 상태를 새로운 값으로 대체하며, 후자의 경우 보내지 않은 값은 null로 대체된다.
PATCH
같은 리소스에 대해 다음과 같이 요청한다.
예시 1 :
PATCH /customers?id=1
{
"name": "민돌",
"balance": 0
}
결과 :
id | balance | name |
1 | 0 | 민돌 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
예시 2 :
PATCH /customers?id=1
{
"name": "민돌"
}
결과 :
id | balance | name |
1 | 100 | 민돌 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
설명 : 보내지 않은 값은 그대로 유지된다.
2. 요청한 URI에 자원이 존재하지 않을 때
PUT
새로운 자원을 생성한다.
예시 :
PUT /customers?id=4
{
"name": "갑수",
"balance": 99999
}
결과 :
id | balance | name |
1 | 100 | 민돌 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
4 | 99999 | 갑수 |
PATCH
새로운 자원을 생성하지 않는다.
예시 :
PATCH /customers?id=4
{
"name": "갑수",
"balance": 99999
}
결과 :
id | balance | name |
1 | 100 | 민돌 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
설명 : 서버는 오류를 응답으로 보낸다.
3. 멱등성 관점
멱등성이란?
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다.
- PUT은 멱등성을 가진다 : 동일한 요청을 여러 번 보내도 결과는 동일함
- PATCH는 멱등성을 가지지 않는다 : 특정한 경우에 PATCH 요청이 멱등성을 가지지 않는 상황을 만들어낼 수 있음
PATCH가 멱등성을 가지지 않는 예시
다음과 같이 요청을 보낸다고 가정한다.
리소스 상태 :
id | balance | name |
1 | 100 | 민석 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
예시 :
PATCH /customers
{
"name": "갑수",
"balance": 99999
}
첫 번째 요청 후 결과 :
id | balance | name |
1 | 100 | 민석 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
4 | 99999 | 갑수 |
두 번째 요청 후 결과 :
id | balance | name |
1 | 100 | 민돌 |
2 | 20 | 민찬 |
3 | -120 | 민종 |
4 | 99999 | 갑수 |
5 | 99999 | 갑수 |
설명 : 동일한 PATCH 요청을 여러 번 보낼 경우, 새로운 리소스가 계속 생성되어 서버 상태가 변경된다.
결론
- PUT : 전체 리소스를 대체함 / 멱등성 O / 존재하지 않는 리소스에 대해 요청 시 새로운 리소스 생성
- PATCH : 리소스의 부분만 수정 / 멱등성 X / 존재하지 않는 리소스에 대해 요청 시 오류 반환
반응형
'공부' 카테고리의 다른 글
[Spring] AOP란? (0) | 2024.06.19 |
---|---|
Given-When-Then 패턴 (0) | 2024.06.14 |
프록시(Proxy) (0) | 2024.06.07 |
[JPA] JPA, Hibernate, Spring Data JPA (1) | 2024.06.04 |
REST / RESTful API 란? (0) | 2024.06.03 |