- JSON Patch는 RFC 6902에 정의된 표준 형식으로, JSON 문서를 수정하는 방법임
- HTTP를 통해 리소스를 부분적으로 업데이트하는 간단하고 효율적인 방법을 제공
- 기존의 PUT 및 POST 메서드는 전체 데이터를 전송해야 했지만, PATCH 메서드는 부분 업데이트를 허용
- JSON Patch는 JSON 문서에 대한 명확하고 간결한 변경 표현을 제공하여 대역폭을 줄이고 웹 애플리케이션의 성능을 향상시킴
JSON Patch의 작동 원리
- JSON Patch는 JSON 문서에 대한 일련의 원자적 작업으로 작동함.
- 각 작업은 op 필드와 path 필드를 포함하며, 이는 문서의 특정 위치에서 작업을 수행함.
- 예를 들어, add 작업은 새로운 필드를 추가하고, replace 작업은 기존 필드를 대체함.
JSON Pointer
- JSON Patch는 JSON Pointer를 사용하여 문서의 특정 부분을 식별함.
- JSON Pointer는 슬래시(/)로 구분된 토큰 문자열로, 문서의 계층 구조를 식별함.
- 예를 들어, /user/name은 user 객체 내의 name 필드를 식별함.
JSON Patch의 장단점
장점
-
정밀성: 복잡한 구조에서 특정 요소를 정확하게 수정 가능함.
-
효율성: 변경 사항만 전송하여 데이터 전송량과 지연 시간을 최소화함.
-
원자성: 작업 실패 시 전체 작업을 롤백 가능함.
-
멱등성: 안전하게 재시도 가능함.
-
복잡한 작업: 요소를 이동하거나 복사할 수 있음.
-
검증: API는 들어오는 패치를 검증하여 잘못된 요청을 줄임.
-
표준 기반: 다양한 클라이언트 및 서버와 쉽게 통합 가능함.
-
필드 수준 접근 제어: 세밀한 수준에서 수정 제한 가능함.
-
배치 작업: 여러 변경 사항을 하나의 요청으로 처리 가능함.
단점
-
복잡성: 복잡한 JSON 구조를 다루기 어려움.
-
유지보수 비용: API가 발전함에 따라 경로가 무효화될 수 있음.
-
디버깅 어려움: 여러 작업이 함께 배치될 경우 추적이 어려움.
-
객체 순서 보존: 이동 작업이 객체의 순서를 보장하지 않음.
-
보안 문제: 잘못된 요청 처리 시 취약점 발생 가능함.
JSON Patch 작업 예시
-
Add: 새로운 필드를 추가함.
-
Remove: 기존 필드를 제거함.
-
Replace: 기존 필드를 새로운 값으로 대체함.
-
Move: 요소를 다른 위치로 이동함.
-
Copy: 요소를 다른 위치로 복사함.
-
Test: 특정 경로에 값이 설정되어 있는지 테스트함.
도구 및 라이브러리에서의 JSON Patch
- 다양한 프로그래밍 언어에서 JSON Patch를 지원하는 라이브러리가 존재함 : fast-json-patch, python-json-patch, JsonPatch library in .NET 등
- JSON 패치를 배우기 위한 훌륭한 도구는 JSON 패치 명령을 실행하기 위한 무료 온라인 서비스인 jsonpatch.me 임. API도 있음
GN⁺의 정리
- JSON Patch는 JSON 문서의 부분 업데이트를 효율적으로 수행할 수 있는 강력한 도구임.
- 복잡한 JSON 구조를 다루는 데 어려움이 있을 수 있지만, 다양한 라이브러리와 도구를 통해 이를 극복할 수 있음.
- JSON Patch는 데이터 전송량을 줄이고, 웹 애플리케이션의 성능을 향상시키는 데 유용함.
- JSON Merge Patch와 같은 대안도 고려할 수 있으며, API 개발에 있어 JSON Patch의 사용은 효율성을 높일 수 있음.