들어가며
일반적으로 CRUD가 기본이라고 이야기하고, 신입이라면 넉넉잡게 기간을 잡아도 일주일이면 CRUD에 대한 구현을 완성해야 한다는 이야기를 들은 적이 있다.
CRUD는 말 그대로 Create, Read, Update, Delete로 생성, 읽기, 수정, 삭제를 의미를 가지고 있다.
클라이언트가 서버로 요청을 보내는 방법으로는 GET 요청과 POST 요청이 있는데, GET의 경우는 가지고온다. POST의 경우는 수행한다.라는 개념으로 이해하면 쉬운 개념이다. 처음 HTTP요청을 배웠을 때는 뭐가 뭔지 잘 이해도 안 가고 용도 구분도 하지 않고 진행했던 적도 있었다.
본론으로 돌아가서, 각 메소드들을 내가 알고 있는 기능들을 구분하여 진행하려고 하니 문제점이 생겼다.
- Create - Post
- Read - Get
- Update - Put, Patch
- Delete - Delete
위 처럼 Update만 Put과 Patch 두 개의 메서드가 있었다. 이것 GET과 POST처럼 용도를 구분하지 않고 사용하였는데, 아무리 생각해도 다른 기능이 없는데 굳이 분리해 둔 이유가 없을 것이라고 생각하여 찾아보게 되었다.
PUT VS PATCH
둘의 가장 큰 차이점은 전체 수정이냐, 부분 수정이냐 로 구분이 된다.
PUT의 경우는 대상의 모든 부분을 수정하는 것이고, PATCH의 경우는 부분 수정을 하는 것이다.
예를 들어 PUT의 경우는 요청시 반드시 모든 값의 정보를 넘겨야 하는 것이고, PATCH의 경우는 부분/전체 정보를 넘기기만 해도 되는 것이다.
PUT | PATCH |
/car/10/ {"color": "blue", "price": 200} | /car/10/ {"color": "blue"} 또는 {"price": 200} 또는 {"color": "blue", "price": 200} |
PATCH만 사용하면 안되는 걸까?
PATCH만 사용해서 부분 수정, 전체 수정 전부 하면 되는 것이 아닌가?라는 생각을 하였다. 찾아보니 PATCH를 이용하여 전체 업데이트를 하는 것도 가능하지만 아래의 이유로 별로 권장되지 않는다고 한다.
- 명확성과 의도:
- PATCH 메서드는 부분적인 업데이트를 수행하는 것으로 인식되므로, 전체 리소스를 수정하는 것은 의도를 명확하게 전달하지 않을 수 있습니다. 클라이언트 및 다른 개발자들이 코드를 읽을 때, PATCH가 사용되었을 때 부분적인 업데이트가 예상됩니다.
- 안정성과 예측 가능성:
- PATCH 메서드를 반복적으로 사용하여 일부 리소스를 수정할 때는 예측 가능한 결과를 얻을 수 있습니다. 하지만 PATCH를 사용하여 전체 리소스를 수정할 때는 리소스의 현재 상태와 이전 PATCH 요청에 따라 결과가 달라질 수 있습니다.
- RESTful 디자인 원칙:
- RESTful API의 디자인 원칙은 HTTP 메서드가 해당하는 의미를 가지고 있어야 한다는 것입니다. 따라서 PUT 메서드는 전체 리소스를 업데이트하는 데 사용되고, PATCH 메서드는 부분적인 업데이트에 사용되어야 합니다.
마무리
PUT,PATCH를 의미와 용도에 맞게 사용하는 개발팀은 많이 않다고 하고, 이미 PUT방식으로 개발된 내용을 수정하는 건 프론트적인 수정도 필요하여 비용이 많이 발생하며 충분히 잘 작동하는 코드는 수정작업 중 이슈가 발생한다면 그닥 좋은 상황은 아니기 때문에 기존에 작업해 둔 방식대로 진행하는 게 좋을 것 같다.
출처
'Django, DRF' 카테고리의 다른 글
[Convention] Django Import 순서에 대해서 (0) | 2024.04.11 |
---|---|
venv 가상환경 명령어 (0) | 2024.04.09 |
DRF 댓글 대댓글 모델 정의, Post와 serializer 연동 (0) | 2024.03.21 |
[Authentication] DRF Authentication, Permission (인증, 권한) (0) | 2024.03.20 |
[View] DRF CBV 뷰의 종류와 차이점 (APIView, Mixins, Generic APIView, ViewSet) (2) | 2024.03.19 |