Programming/Spring

REST API에서 PATCH와 PUT의 차이점

기록하는 백앤드개발자 2024. 6. 16. 10:10
반응형

ㅁ 들어가며

SOAP과 REST 비교에 대한 글을 작성하였다.

ㅇ Restful는 웹 서비스와 모바일 애플리케이션 경량화의 필요에 맞춘 아키텍처 원칙 세트이다.

ㅇ 기존에 업데이트를 위한 PUT 메서드만 알고 있었는데, 더욱 경량화된 PATCH메서드를 알게 되었다.

ㅇ PATCH와 PUT의 차이점을 알아보고 멱등성의 보장 여부에 대해서 정리하였다.

 

ㅁ REST API에서 PATCH와 PUT의 차이점

ㅇ REST API에서 자원을 업데이트할 때 사용하는 두 가지 일반적인 HTTP 메서드는 PATCH와 PUT가 있다.

ㅇ 두 메서드 모두 기존 자원을 변경하는 데 사용되지만, 변경 범위와 방식에 있어 중요한 차이점을 가지고 있다.

 

PUT 변경 범위

ㅇ PUT 메서드는 전체 자원을 수정한다.

 요청 시 전달된 모든 데이터가 기존 데이터를 덮어쓴다.

ㅇ PUT 요청을 보낼 때는 반드시 변경하려는 모든 데이터를 포함해야 한다.

 

PATCH 변경 범위

PATCH 메서드는 부분적인 자원을 업데이트한다.

 요청 본문에 포함된 일부 필드만 변경하고 나머지 필드는 기존 값을 유지한다. 

ㅇ PATCH 요청을 보낼 때는 변경하려는 필드만 명시하면 된다.

ㅇ 불필요한 데이터의 전송 시 발생하는 오버헤드를 감소시키는 장점이 있다.

 

ㅁ 변경 방식, 멱등성(idempotence)의 차이

ㅇ PUT 메서드는 멱등성(idempotence)을 보장한다.

  ㄴ 즉, 동일한 PUT 요청을 여러 번 전송해도 자원의 상태는 한 번만 변경된다.

ㅇ PATCH 메서드는 일반적으로 멱등성을 보장하지 않는다.

  ㄴ 즉, 동일한 PATCH 요청을 여러 번 전송하면 자원의 상태가 여러 번 변경될 수 있다.

  ㄴ 단, 요청 본문에 적절한 조건을 명시하면 멱등성을 보장하도록 구현할 수도 있다.

 

ㅁ 사용 방식 

ㅇ PUT과 PATCH의 멱등성(idempotence)의 차이로 인해 사용 방식에도 차이가 있다.

  • PUT: 다음과 같은 경우 PUT 메서드를 사용하는 것이 좋다.
    • 자원을 새로운 상태로 완전히 변경해야 하는 경우
    • 자원의 모든 데이터를 정확하게 파악하고 있는 경우
    • 멱등성이 중요한 경우
  • PATCH: 다음과 같은 경우 PATCH 메서드를 사용하는 것이 좋다.
    • 자원의 일부 필드만 변경해야 하는 경우
    • 자원의 모든 데이터를 파악하지 못하거나 파악하기 어려운 경우
    • 멱등성이 중요하지 않거나 명확하게 정의되지 않은 경우

 

ㅁ 예시

  • 사용자 정보 업데이트:
    • PUT 요청: 사용자의 모든 정보 (이름, 이메일, 주소 등)를 변경하려는 경우 PUT 요청을 사용한다.
    •  요청 본문에는 변경하려는 모든 정보를 포함된다.
    {
        "name": "홍길동 개선",
        "email": "hong@example.com",
        "address": "서울특별시 강남구"
    }
    
     
    • PATCH 요청: 사용자의 이름과 이메일만 변경하려는 경우 PATCH 요청을 사용한다.
    • 요청 본문에는 변경하려는 필드만 포함하면 된다.
    {
        "name": "홍길동 개선",
        "email": "hong@example.com"
    }
    
     
  • 상품 정보 업데이트:
    • PUT 요청: 상품의 가격, 재고, 설명 등 모든 정보를 변경하려는 경우 PUT 요청을 사용한다.
      • 요청 본문에는 변경하려는 모든 정보를 포함해야 한다.
    • PATCH 요청: 상품의 가격만 변경하려는 경우 PATCH 요청을 사용한다.
      • 요청 본문에는 변경하려는 필드만 포함하면 된다.

 

ㅁ 마무리

PATCH와 PUT은 모두 REST API에서 자원을 업데이트하는 데 사용되는 유용한 메서드이지만, 변경 범위, 방식, 사용 시나리오에 따라 적절한 메서드를 선택해야 한다.

  • 전체 자원을 대체하고 멱등성이 중요한 경우 PUT 메서드를 사용한다.
  • 부분적인 자원 업데이트 또는 멱등성이 중요하지 않은 경우 PATCH 메서드를 사용한다.
  • 일부 API는 자체적인 규칙을 정의하여 PATCH와 PUT의 사용 방식을 명시적으로 제한할 수 있다.
  • 개발 팀 내에서 일관된 방식으로 PATCH와 PUT을 사용하도록 약속하여 불필요한 데이터의 전송 오버헤드를 줄일 수 있다. 

 

요약표

HTTP 메소드 요청 Body 응답 Body 안전 멱등성 캐시 가능
GET 선택 사항
HEAD 선택 사항 아니요
POST 아니요 아니요
PUT 아니요 아니요
DELETE 선택 사항 아니요 아니요
CONNECT 선택 사항 아니요 아니요 아니요
OPTIONS 선택 사항 아니요
TRACE 아니요 아니요
PATCH 아니요 아니요 아니요니요

wikipedia HTTP에 수록된 메서드별  메소드에 대한 도표이다. 

ㅇ PATCH 뿐만 아니라 다른 선택적 메소드가 존재한다.

반응형