본문 바로가기
  • 시 쓰는 개발자
Spring

PUT과 PATCH의 차이점

by poetDeveloper 2023. 2. 19.

PUT과 PATCH는 모두 HTTP 메소드 중에서 데이터를 수정하기 위한 메소드이다. 둘 다 수정을 담당하는 메소드라서 어떤 것을 언제 사용해야하는지 헷갈리는데, 일반적으로 PUT과 PATCH는 다음과 같이 분류한다.

 

  • PUT은 전체 엔티티를 업데이트하기 위해 사용되는 메소드이다. 전체를 교체하기 때문에 PUT을 쓸 때에는 모든 필드가 필요해서 클라이언트가 업데이트하고자 하는 리소스의 전체 표현을 제공해야 한다. 만약 PUT을 쓸 때 필드의 전체가 아니라 일부만을 제공한다면 제공한 일부를 제외하고 나머지 모든 필드값이 NULL이 되거나 default값이 되므로 주의해야한다. → 그래서 이런 실수를 방지하고자 일부러 PATCH만 쓰도록 개발자들끼리 약속하기도 한다.
  • PATCH는 부분적인 업데이트 즉 엔티티의 일부를 수정하기 위해 사용되는 메소드이다. 이는 서버가 리소스를 업데이트하는 것이 아니라, 클라이언트가 제공한 일부 데이터만을 수정하여 업데이트하는 것이다. 따라서 PATCH는 클라이언트가 업데이트하고자 하는 리소스의 일부 필드만을 제공할 수 있다.

 

예시

  PUT 실수 PUT 성공 PATCH 성공
원본 데이터 {
"name" : "김철수",
"hello" : "안녕하세요"
}
보낸 요청 {
"hello" : "안녕하십니까"
}
{
"name" : "홍길동",
"hello" : "안녕하세요"
}
{
"name" : "홍길동"
}
결과 {
"name" : NULL,
"hello" : "안녕하십니까"
}
{
"name" : "홍길동",
"hello" : "안녕하세요"
}
{
"name" : "홍길동",
"hello" : "안녕하세요"
}

 

정리

한마디로, PUT은 전체 리소스를 대체하는데 사용되고 PATCH는 부분적인 업데이트를 하기 위해 사용된다.

 

따라서 클라이언트가 리소스의 전체 표현을 갖고 있고, 업데이트하려는 리소스의 모든 필드를 변경하려고 한다면 PUT을 사용해야 하지만, 클라이언트가 업데이트하고자 하는 리소스가 일부라면 PATCH를 사용해야 한다.

 

그러나 엔드포인트가 PUT만을 지원하거나, PATCH를 사용할 경우에도 서버에서 모든 필드를 업데이트하는 것이라면 상황에 따라서 PUT을 사용할 수도 있다.