본문 바로가기
공부

PUT과 PATCH의 정의 및 차이점

by 나나도 2024. 6. 12.
반응형

 

 

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