Post

TIL- PUT과 PATCH 차이점

TIL- PUT과 PATCH 차이점

2024-06-04

2024-06-05

오늘의 학습 🌠


1


PUT과 PATCH


  • PUT 과 PATCH는 리소스를 업데이트 한다는 점에서 같은 역할을 하는 메서드처럼 보이지만 두 개의 요청에는 약간의 차이가 있습니다.

  • PUT : 리소스의 모든 것을 업데이트
  • PATCH : 리소스의 일부를 업데이트

회원(member)1
이름(name)영나이
나이(age)24
성별(gender)W

상기와 같은 회원이라는 리소스가 있을 때 다음과 같이 요청을 보내면

1
2
3
4
5
6
PUT /members/1
{
	name : "이두유",
	age : 4,
	gender : "W"
}

회원(member)1
이름(name)이두유
나이(age)4
성별(gender)W

  • 상기의 표처럼 이름, 나이, 성별이 변화됩니다.

  • 이번에는 나이, 성별을 빼고 요청을 보내겠습니다.

1
2
3
4
PUT /members/1
{
	name : "이두유",
}

회원(member)1
이름(name)이두유
나이(age) 
성별(gender) 

  • 이름의 값이 변경되고 나이와 성별은 null 값으로 변화됩니다.

  • 이번에는 PATCH를 보겠습니다. 앞서 본 회원과 마찬가지로 다음과 같은 리소스가 존재합니다.


회원(member)1
이름(name)영나이
나이(age)24
성별(gender)W

1
2
3
4
PATCH /members/1
{
	name : "마루",
}
  • 해당 요청을 보낸다면

회원(member)1
이름(name)마루
나이(age)24
성별(gender)W

  • PATCH는 다음과 같이 요청에 포함되어 있는 부분(이름)만 변경이 됩니다.

  • 결과적으로 클라이언트가 기존 리소스를 완전히 교체해야 하는 경우 PUT을 사용하고 부분 업데이트를 수행할 떄 PATCH를 사용합니다.

  • 앞서 회원 리소스의 예시를 본 것처럼 단일 필드를 업데이트할 때 전체 리소스 표현을 보내는 것은 번거롭고 불필요한 비용이 들어갑니다!

  • 이런한 경우는 PATCH를 사용하는 것을 권장합니다. 여기서 고려해야 할 중요한 측면은 멱등성입니다.


멱등성이란?


  • 멱등성은 어떤 대상에 같은 연산을 여러번 적용해도 결과가 달라지지 않는 성질을 뜻합니다.

  • SW에서 몇 번을 호출하던지 결과가 동일해야 한 경우를 멱등하다고 합니다. 예시로 엘레베이터를 볼 수 있습니다. 엘레베이터 버튼을 몇 번 누르던지 엘레베이터가 호출한 층으로 온다는 사실은 변하지 않습니다.

  • 또 다른 예로 어떠한 수에 1을 곱하는 x = x * 1과 같은 함수는 어떠한 값에 100000번을 적용하든지 그 이상을 적용하던 항상 x를 반환하므로 이런 연산은 멱등성이 보장된다고 할 수 있습니다.

  • 하지만 1을 더하거나 빼는 함수라면 한 번 호출될 때마다 인자로 주어진 값을 계속 증가시키거나 감소시키므로 항상 같은 값을 반환하지 않습니다. 이런 연산은 멱등성을 보장하지 않는 예시입니다.

  • HTTP 메서드 또한 결국 어떤 자원을 쓰고 읽고 수정하고 지우는 CRUD의 의미를 가집니다.

HTTP 메서드에서의 멱등성


  • PUT 메서드는 요청에 담긴 리소스로 기존 리소스를 그대로 대체하므로 여러번 수행하여도 요청에 담긴 리소스가 변하지 않는 이상 연산 결과가 동일합니다.

  • PATCH 메서드는 구현 방법에 따라 멱등성이 보장될 수 있고 보장되지 않을 수 있습니다.

  • PATCH 메서드는 PUT 메서드처럼 리소스를 대체하는 행위가 아니기 때문에 요청을 어떤 방식으로 사용 하는지에 대한 제한이 딱히 없습니다. PATCH 메서드는 단지 리소스의 일부를 수정한다는 의미를 가지고 있습니다.

1
2
3
4
5
PATCH /members/1
{
	$increase:  'age', 
	 value:  1,
}
  • 다음과 같은 요청을 할 때 $increase 필드의 값은 증가시키고 싶은 속성을 의미하고 value 필드의 값은 그 속성을 얼마나 증가시킬 것인지를 나타냅니다. 이 경우 API가 호출될 때마다 나이가 1씩 증가하기 때문에 멱등성을 보장하지 않습니다.

추가 🕤


  • 숙련주차 팀 프로젝트를 진행하며 기능을 나눠서 개발하니 누가 작성하냐에 따라 PUT을 사용하기도 하고 PATCH를 사용하기도 했습니다..

  • 튜터님께 피드백을 받고 API 명세서를 확인하니 과연 둘의 명확한 차이가 무엇일까 궁금해져서 해당 내용을 정리하게 되었습니다. 🎊 오늘도 끝~

1

🐱‍🏍— —🤸🏻‍♀️ ~~~ 야~호~

This post is licensed under CC BY 4.0 by the author.