[개발지식] POST, PATCH, PUSH의 차이점

Hyo Kyun Lee·3일 전
0

개발지식

목록 보기
68/69

1. 개요

개발의 편의성을 위해 현재 RESTFul API 서버는 GET, POST, DELETE 세가지만 존재한다.

그러나 개발자로서 왜 다른 메서드를 사용하지 않을까하는 의문점이 생겼고, HTTP 표준을 지키고 진정한 REST/RESTful API란 무엇인지 한발자국이라도 더 다가가기 위해 공부한 내용을 남긴다.

이번에 공부하면서 잊어버렸던 개념들도 많이 기억이 나게 되었다.

2. 멱등성

API개념을 바라보기전에 먼저 멱등성이란 개념을 알아야 한다.

멱등성이란 동일한 연산을 수행해도 서버의 상태와 자원의 결과가 달라지지 않는다,
쉽게 말하면 한번 요청한 결과와 여러번 요청한 결과가 동일하며 서버의 상태가 달라지지 않을때 멱등하다 혹은 멱등성을 가진다고 한다.

멱등성이 중요한 이유는 사용자가 결과값을 예측할 수 있고, 이에 따라 데이터 정합성과 무결성을 보장할 수 있기 때문이다.

예를 들어 자원1이 있고, 이 자원 1에 대해 삭제요청을 했다고 하자.
그러면, 자원1은 삭제되었다.
그 후 여러번 보내면 자원1은 삭제된 상태로 그대로 상태가 유지된다. 자원1은 삭제된 상태이므로 아무일도 일어나지 않는다.

사용자와 우리는 이 결과를 예측할 수 있다.

이것이 멱등성이다.

3. API디자인의 중요성

HTTP표준을 준수하고 요청에 맞는 API를 디자인하면 URI에 자원에 대한 상태요청을 명기하지 않고도, 자원의 상태 그대로를 통해 간결한 처리를 진행할 수 있다.

개발표준을 준수하지 못한다는 위험성을 제거한 상태에서 잘 디자인된 API는 더 간결하고, 명확하고 수행할 수 있는 처리 폭이 넓어질 수 있다.

물론 개발자의 협의, 생각보다 깊은 협의가 필요하겠지만 단순한 API 디자인보다는 여러모로 효율성이 좋을 것 같다.

4-1. POST

  • 사용자가 특정 동작에 대한 요청을 보내는 방법으로
  • 서버는 POST 요청을 받아 새로운 리소스를 발급받고 해당 리소스에 대한 처리를 수행한다.
  • 사용자는 리소스를 모른 상태로 동작을 요청하며, 서버는 요청받을때마다 새로운 리소스를 생성하므로 POST는 멱등성을 보장할 수 없으며, 다른 말로하면 다양한 작업을 할 수 있는 요청이다.

4-2. PUT

  • 사용자가 특정 동작에 대한 요청을 보내는 방법으로
  • 사용자는 동작에 대한 요청과 동작 대상의 리소스를 아는 상태로 요청한다.
  • 서버는 이 두개를 그대로 이어받아 처리를 수행하며, 리소스와 동작이 명확하므로 멱등성을 보장할 수 있다.
  • PUT메소드는 리소스 전체를, 일부가 아닌 필드 전체 데이터를 본문에 요청해야 한다.

4-3. PATCH

  • 사용자가 특정 동작에 대한 요청을 보내는 방법으로
  • 사용자는 동작에 대한 요청과 동작 대상의 리소스를 아는 상태로 요청한다.
  • 서버는 이 두개를 그대로 이어받아 처리를 수행하며, 리소스와 동작이 명확하므로 멱등성을 보장할 수 있다.
  • 단 PUT메소드와 반대로 서버에 있는 리소스를 모두 업데이트하지 않고, 일부분만 업데이트 할 수 있다.
  • 멱등성이 보장되지 않는다. 자원 공유 차원의 문제인 듯하다.

5. 참고자료

API디자인/POST-PUT-PATCH - https://docs.tosspayments.com/blog/rest-api-post-put-patch
멱등성 - https://f-lab.kr/insight/understanding-idempotency-in-api-design

0개의 댓글