✨ PUT vs PATCH
put과 patch 모두 리소스를 수정할 때 사용하는 HTTP Method이다. 둘의 차이점은 put은 리소스의 전체 내용을 수정할 때 사용하고, patch는 리소스의 일부 내용만 수정할 때 사용한다는 정도로 알고 있는데, 좀 더 자세히 둘의 차이점과 실제 예시를 정리해보겠다.
✨ 멱등성
멱등성이란 어떤 대상에 같은 연산을 여러번 실행해도 변하지 않는 성질을 말한다.
예를 들어 곱하기 연산을 한다고 가정하면,
어떤 수에 * 1하는 연산을 여러번 실행했을 때, 몇번을 실행하던지 그 결과는 동일하다.
이 연산은 멱등성이 보장된다고 할 수 있다.
다른 예로 더하기 연산을 한다고 하면,
어떤 수에 + 1하는 연산을 여러번 실행했을 때, 항상 동일한 결과를 반환하지 않는다.
이 연산은 멱등성을 보장하지 않는다.
HTTP 메소드도 CRUD의 의미를 가지므로 각 메소드의 특성에 따라 멱등성 여부가 달라진다.
HTTP Method | 멱등성 여부 |
GET | O |
POST | X |
PUT | O |
PATCH | △ |
DELETE | O |
✨ PUT
put은 앞서 말했듯이 리소스의 전체 내용을 수정할 때 사용하는 메소드이다. 기존의 리소스 전체를 완전히 대체한다. 그래서 리소스를 수정할 때 전달받지 못한 필드는 초기화되거나 null 처리가 되기 때문에 주의해야 하며 일부가 아닌 리소스의 전체 내용을 전달해야 한다.
또한 해당 리소스를 완전히 교체하는 작업이기 때문에 멱등하다고 할 수 있다. PUT을 여러번 실행해도 리소스의 내용이 변하지 않는 이상 기존의 리소스를 동일한 내용으로 교체하기 때문에 결과는 동일하다.
✨PATCH
patch는 리소스의 부분을 수정하는 메소드이다. 부분을 수정하는 것이기 때문에 일부 필드를 필요로 한다.
찾아보니 상황에 따라 수정은 무조건 put으로 하는 경우도 있고, patch와 put을 나누어서 하는 경우도 있는 것 같다.
부분 수정은 무조건 patch로 해야하는 것이 아니라 상황이나 정의에 따라서 put과 patch를 적절히 사용하면 될 것 같다.
위 표에서 patch는 멱등성이 보장되지 않는다고 했지만 구현 방법에 따라 멱등성이 보장될 수도, 안될수도 있다.
예를 들어 user 엔티티에 id, name, age 필드가 있다고 가정해보겠다.
patch 메소드로 아래와 같은 리소스를 담아 요청했을 경우에는 멱등성이 보장된다고 할 수 있다.
해당 요청을 몇번을 실행하여도 age는 26으로 변하지 않기 때문에 멱동성이 보장되는 것이다.
{
"age": 26
}
반면 patch 메소드로 아래와 같은 리소스를 담아 요청했을 경우에는 멱등성이 보장되지 않는다.
아래 요청은 age 필드를 1 증가하는 요청이다.
이 요청이 여러번 반복되면 age의 값은 요청이 될 때마다 1씩 증가하므로 동일한 결과를 갖지 않으며 멱등성이 보장되지 않는 것이다.
{
$increase: 'age',
value: 1
}
✨ 결론
put은 전체 리소스를 교체하는 메소드이고, 멱등성을 보장한다.
patch는 리소스 일부를 교체하는 메소드이고, 멱등성을 보장할 수도, 보장하지 않을 수도 있다.
put과 patch 중 어떤 것을 사용할지는 경우에 따라 다르므로 상황에 맞추어 적절한 메소드를 사용하면 된다.
'Spring' 카테고리의 다른 글
[BilRyoZo] JPA Soft Delete 구현, @SQLDelete, @Where, JPQL (2) | 2024.09.14 |
---|---|
Spring 페이징 처리 시 Pageable vs @RequestParam 비교 (0) | 2024.09.10 |
데이터 전달 시 Map보다 DTO를 사용해야 하는 이유 (0) | 2024.09.04 |
[AreYouTravelers] CodeDeploy와 CodeDeploy Agent, EC2 IAM Role이 필요한 이유 (0) | 2024.06.27 |
[AreYouTravelers] 시스템 아키텍처 (0) | 2024.06.26 |