본문으로 건너뛰기
AZ Tools

JSON Patch 빌더 (RFC 6902)

source/target 쌍에서 RFC 6902 JSON Patch 생성, 또는 기존 patch를 문서에 적용. add·remove·replace·move·copy·test 작업 지원.

Patch (RFC 6902)
[
  {
    "op": "replace",
    "path": "/age",
    "value": 31
  },
  {
    "op": "replace",
    "path": "/address/city",
    "value": "Busan"
  },
  {
    "op": "remove",
    "path": "/address/zip"
  },
  {
    "op": "add",
    "path": "/address/country",
    "value": "KR"
  },
  {
    "op": "replace",
    "path": "/tags/1",
    "value": "owner"
  },
  {
    "op": "add",
    "path": "/tags/2",
    "value": "user"
  }
]

순수 RFC 6902입니다. add, remove, replace, move, copy, test 연산과 JSON Pointer 이스케이프(~는 ~0, /는 ~1)를 지원합니다.

사용법

  1. Diff 모드: source와 target 붙여넣기 → patch JSON 확인. 한쪽 편집 → patch 변화 확인.
  2. Apply 모드: source와 patch 배열 붙여넣기 → 결과 문서 확인. 에러(잘못된 포인터·실패한 test) 인라인 표시.
  3. JSON Pointer 구문: /foo/0/bar는 foo.0.bar 탐색. /는 ~1로, ~는 ~0으로 이스케이프. 배열 경로의 후행 -는 '추가' 의미.

자세한 설명

펼치기

RFC 6902 JSON Patch는 JSON 문서 변경 사항 기술하는 와이어 포맷 — PATCH 요청·낙관적 업데이트·되돌리기 히스토리·운영 변환에 유용. 이 툴은 양방향 처리: source와 target JSON 붙여넣기 → 하나를 다른 하나로 변환하는 최소 patch 획득, 또는 source와 patch 붙여넣기 → 적용 후 결과 확인. diff는 슬래시·틸드 포함 키에 ~0/~1 JSON Pointer 이스케이프 사용한 재귀 구조 비교. apply 쪽은 6개 작업 모두 존중 — test(어설션 실패 시 에러)·copy·move 포함. 서버 호출 전 patch 테스트, 예시로 올바른 작업 찾을 때 유용.

자주 묻는 질문

왜 새 문서 그냥 안 보내?

첫째 대역폭. 둘째 동시성: Alice와 Bob 둘 다 문서 편집 시 patch는 의미적으로 병합 가능(replace /name은 add /tags/-과 호환), 두 전체 문서는 승자 선택해야 함. 게다가 patch는 무엇이·언제 변경됐는지 정확한 감사 기록.

JSON Merge Patch (RFC 7396)와 같나?

아니. Merge Patch는 더 단순 — 존재하는 키가 덮어쓰고 null이 삭제하는 부분 문서 전송. 사람엔 쉽지만 정밀도 손실(배열 추가 불가·리터럴 null 값 표현 불가·원자적 test 없음). RFC 6902(이 툴)은 정밀 와이어 포맷. RFC 7396은 편의 포맷.

패치가 두 사람이 서로를 덮어쓰는 것을 어떻게 막나?

test 연산으로 막고, 그게 이 연산이 존재하는 이유다. 변경 앞에 기대하는 값에 대한 test를 붙이면, 다른 사람이 이미 그 필드를 바꿨을 때 패치 전체가 실패한다. 조용히 이기는 대신 충돌을 알게 되는 것이다. test가 없으면 패치도 문서 전체를 보내는 것만큼이나 동시 편집을 뭉갤 수 있다.

차이로 생성한 패치를 보내면 안 되는 경우는?

두 문서의 차이가 데이터 관점에서는 의미 없는 종류일 때다. 생성된 패치는 구조를 대상으로 하므로, 객체 배열의 순서만 바뀌어도 이동 하나가 아니라 긴 교체 목록으로 나올 수 있고, 키 직렬화 순서가 다른 객체는 잡음을 만든다. 받는 쪽이 무엇이 바뀌었는지 기록하거나 감사한다면, 의도한 연산만 담은 패치를 직접 보내라.

관련 도구