JSON 비교 도구: 온라인으로 JSON 객체 차이를 즉시 확인하는 방법
📷 Ilya Pavlov / PexelsJSON 비교 도구: 온라인으로 JSON 객체 차이를 즉시 확인하는 방법
API 응답, 설정 파일, 데이터 내보내기 사이에서 무엇이 변경됐는지 확인하는 방법 — 브라우저 기반 무료 JSON 비교 도구로 즉시 파악하세요.
이 도구가 필요하다는 걸 깨닫는 순간
상황을 그려보겠습니다. 밤 11시. 버그 리포트가 메일함에 들어와 있습니다. API 응답에 뭔가 이상하다는데, 티켓 내용은 구체적이지 않습니다. 로그에서 배포 전후 응답 페이로드를 꺼내보니 둘 다 몇백 줄짜리 깊게 중첩된 JSON입니다. 에디터에 나란히 붙여넣고 스크롤을 내리면서 눈으로 차이를 찾기 시작합니다.
20분 뒤, 발견했습니다. 187번째 줄 어딘가에서 "status": "active"가 "status": "pending"으로 조용히 바뀌어 있었습니다. 필드 하나. 단어 두 개. 그리고 날아간 20분.
JSON 비교 도구가 존재하는 이유가 바로 이것입니다. 저도 이런 20분짜리 세션을 너무 많이 날리고 나서야 북마크에 고정해두기 시작했습니다.
JSON 비교가 실제로 필요한 상황들
사람들이 JSON diff를 찾는 상황은 몇 가지로 정리할 수 있는데, 각각 요구사항이 조금씩 다릅니다.
API 버전 비교 및 응답 검증. 백엔드 서비스의 새 버전을 배포할 때 응답 구조가 의도치 않게 바뀐 건 없는지 확인하고 싶을 때입니다. v1과 v2의 샘플 응답을 하나씩 꺼내서 비교하면 새로 생긴 것, 사라진 것, 값이 바뀐 것이 바로 보입니다. 정확하지 않을 수도 있는 체인지로그를 읽는 것보다 훨씬 빠릅니다.
설정 드리프트 감지. 프로덕션, 스테이징, 로컬 설정은 시간이 지나면서 조금씩 달라지기 마련입니다. 누군가 프로덕션에 피처 플래그를 추가했는데 스테이징에는 반영을 안 했거나, 타임아웃 값을 슬쩍 바꿔놓고 커밋을 안 했거나. 두 설정 스냅샷을 비교하면 그 드리프트가 몇 초 만에 드러납니다.
데이터베이스 레코드 비교. MongoDB 문서나 PostgreSQL JSON 컬럼의 변경 전후 스냅샷 비교입니다. 백그라운드 잡이 실행됐거나, 마이그레이션이 엉뚱한 행을 건드렸거나 할 때 두 스냅샷을 비교하면 무엇이 바뀌었는지 바로 알 수 있습니다.
데이터 내보내기 검증. ETL 파이프라인을 다시 돌려서 새 데이터 덤프를 받았습니다. 지난 주 것과 같은가요? 대부분은 같겠지만, 혹시 다른 게 있지는 않을까요? 비교하면 답이 나옵니다.
이 모든 경우에서 원하는 것은 구조적 비교입니다. "47번 줄이 바뀌었다"가 아니라 "user.preferences.notifications.email 필드가 true에서 false로 바뀌었다"는 정보입니다.
도구가 동작하는 방식
브라우저 기반 JSON 비교 도구들은 대부분 비슷한 방식으로 작동합니다. 먼저 두 입력값을 JSON으로 파싱한 다음, 두 객체 트리를 재귀적으로 탐색하며 키 단위로 비교합니다.
핵심은 경로 기반 비교입니다. 원본 텍스트를 직접 비교하는 대신, 두 객체를 점(.)으로 구분된 키 경로와 값의 목록으로 펼칩니다:
변경 전:
user.id = 1001
user.name = "Alice"
user.role = "admin"
user.email = "alice@example.com"
변경 후:
user.id = 1001
user.name = "Alice"
user.role = "viewer"
user.email = "alice@example.com"
user.department = "engineering"
이 펼쳐진 표현에서 즉시 알 수 있는 것:
user.role이"admin"에서"viewer"로 변경됨user.department가 두 번째 객체에만 존재함 (추가됨)
공백에 의한 오탐 없음. 키 순서 때문에 생기는 노이즈 없음. 실제 의미 있는 변경만 표시됩니다.
색상 코딩도 중요합니다. 좋은 diff UI는 추가된 항목을 초록색, 삭제된 항목을 빨간색, 변경된 항목을 노란색이나 주황색으로 표시합니다. 큰 객체를 훑을 때 이 색상 신호 덕분에 모든 줄을 읽지 않아도 바뀐 부분으로 시선이 바로 갑니다.
실전 예시
사용자 권한 문제를 디버깅하고 있다고 가정해봅시다. 역할 변경 전후 객체가 있습니다:
변경 전:
{
"userId": "u-8821",
"name": "Jordan Kim",
"role": "admin",
"permissions": {
"canEdit": true,
"canDelete": true,
"canInvite": true
},
"lastLogin": "2026-03-15T08:22:00Z",
"accountStatus": "active"
}
변경 후:
{
"userId": "u-8821",
"name": "Jordan Kim",
"role": "member",
"permissions": {
"canEdit": true,
"canDelete": false,
"canInvite": false
},
"lastLogin": "2026-03-29T14:05:00Z",
"accountStatus": "active"
}
JSON 비교 도구에 붙여넣으면 즉시 명확한 결과가 나옵니다:
role:"admin"→"member"(변경됨)permissions.canDelete:true→false(변경됨)permissions.canInvite:true→false(변경됨)lastLogin: 값 변경됨
이것이 전부입니다. 수작업 스캔 없이 즉시. 그리고 중요한 건, accountStatus, name, userId는 바뀌지 않았으니 결과에 나타나지 않는다는 점입니다. 노이즈가 없습니다.
비교하기 전에 두 객체를 일관된 형식으로 정리해두면 도움이 됩니다. JSON 포매터가 그 역할을 합니다. 압축된 JSON을 붙여넣으면 일정한 들여쓰기로 예쁘게 출력해줘서, 원본 텍스트를 직접 봐야 할 때도 읽기 훨씬 편합니다.
JSON 비교 도구의 한계
솔직하게 말하겠습니다. 저도 이 한계들을 직접 겪어봤고, 미리 알지 못하면 꽤 답답할 수 있습니다.
큰 배열은 처리가 엉성합니다. 500개짜리 객체 배열이 있고 그 중 하나가 바뀌었다면, 단순한 JSON diff는 배열 전체가 수정된 것으로 표시하는 경우가 많습니다. 공유 ID 필드를 찾아서 배열 항목을 매칭하려는 영리한 도구도 있지만, 일반적인 경우에는 여전히 풀리지 않은 문제입니다. JSON이 배열 중심 구조라면 더 전문적인 도구나 커스텀 스크립트가 필요할 수 있습니다.
병합 기능이 없습니다. JSON 비교 도구는 무엇이 바뀌었는지 알려줍니다. 무엇을 유지할지 결정하거나 충돌을 해결하는 것은 도와주지 않습니다. 그 과정은 여전히 수동이고, 복잡한 경우엔 원래 문제만큼 번거로울 수 있습니다.
스키마 검사기가 아닙니다. 비교 도구는 데이터가 변경됐다는 것을 알려주지, 새 데이터가 예상 스키마에 맞는지는 알려주지 않습니다. 그 용도로는 JSON 스키마 생성기나 각 언어의 유효성 검사 라이브러리를 써야 합니다.
큰 파일은 브라우저에서 한계가 있습니다. 브라우저 기반 도구는 500 KB 부근부터 느려지기 시작하고, 수 MB 이상의 파일에서는 시간이 초과되거나 탭이 멈출 수 있습니다. 정말 큰 JSON 파일을 다뤄야 한다면 커맨드라인에서 jq를 쓰는 게 낫습니다:
diff <(jq --sort-keys . before.json) <(jq --sort-keys . after.json)
jq가 두 파일의 키를 일관된 순서로 정렬한 뒤 시스템 diff로 넘깁니다. 예쁘진 않지만 효과적입니다.
JSON diff vs. 텍스트 diff
자주 나오는 질문이고, 실무에서 차이가 실제로 납니다.
텍스트 diff — git이나 텍스트 비교 도구에서 쓰는 것 — 는 줄 단위로 내용을 비교합니다. 어떤 텍스트 형식에도 쓸 수 있습니다. 하지만 JSON에 적용하면 큰 약점이 하나 있습니다: 서식에 민감하다는 것입니다. 두 JSON 객체 중 하나는 2칸 들여쓰기, 다른 하나는 4칸 들여쓰기라면, 데이터가 완전히 동일해도 텍스트 diff는 전부 다르다고 표시합니다. 포매터가 한쪽만 돌아가거나, 직렬화기가 키를 다른 순서로 출력했을 때도 마찬가지입니다.
JSON diff는 먼저 파싱을 하기 때문에 이 문제를 피합니다. 비교 전에 구조를 이미 이해하고 있습니다. {"a":1,"b":2}와 {"b":2,"a":1}은 JSON 객체가 스펙상 순서가 없으므로 동일한 것으로 올바르게 처리됩니다.
텍스트 diff가 더 나은 경우는 언제일까요? 구조나 키 순서가 실제로 의미를 가질 때입니다. 예를 들어 특정 순서가 의미 있는 템플릿 파일이나, 기술적으로 JSON 형식이지만 순서에 의존하는 설정 파일 같은 경우입니다. 하지만 표준 JSON 데이터 비교라면 구조 기반 비교가 항상 이깁니다.
다른 도구와 함께 쓰기
JSON 비교는 작은 워크플로의 일부로 쓸 때 가장 유용합니다. 제가 보통 사용하는 방식입니다:
- API 로그, DB 스냅샷, 파일 내보내기 등에서 두 JSON 객체를 가져옵니다.
- 둘 다 JSON 포매터에 돌려서 공백을 정규화하고 파싱이 제대로 되는지 확인합니다.
- 비교 도구에 붙여넣고 결과를 검토합니다.
- 비교 결과에서 변경된 URL이 나온다면 URL 파서로 쿼리 파라미터를 분해해서 확인합니다.
- 모르는 필드가 있으면 API 문서를 찾아보거나 JSON 스키마 생성기로 구조를 파악합니다.
각 도구가 단독으로 특별히 대단한 건 아닙니다. 브라우저를 벗어나지 않고 이것들을 빠르게 조합할 수 있다는 게 가치입니다.
엣지 케이스 처리
알아두면 유용한 몇 가지:
null과 키 부재의 차이. 필드 값이 null인 것과 필드 자체가 없는 것은 다릅니다. 일부 직렬화기는 이 둘을 같게 취급하지만, 애플리케이션 코드는 다르게 처리할 수 있습니다. 좋은 JSON 비교 도구는 이 두 경우를 구분해줍니다. 다만 모든 도구가 그렇지는 않으니, 이 차이가 중요하다면 간단한 예시로 테스트해보는 게 좋습니다.
타입 변경. "count": 5와 "count": "5"는 JSON에서 다른 값입니다. 하나는 숫자, 하나는 문자열입니다. 구조적 diff는 이걸 잡아내지만, 텍스트 diff는 원본 문자가 같으면 못 잡을 수 있습니다.
깊게 중첩된 객체. 대부분의 도구는 임의 깊이의 중첩을 처리하지만, 매우 깊은 구조에서는 표시가 복잡해질 수 있습니다. 깊게 중첩된 JSON을 비교할 때는 신경 쓰이는 서브트리만 추출해서 비교하면 더 깔끔합니다.
결론
JSON 비교 도구는 실제로 필요해지기 전까지는 약간 틈새 도구처럼 느껴지다가, 막상 필요해지면 없이 어떻게 버텼는지 의아해지는 종류의 도구입니다. 수동 대안 — 두 JSON 덩어리를 스크롤하면서 눈으로 차이를 찾는 것 — 은 수십 개의 필드만 넘어도 느리고 오류가 발생하기 쉽고 솔직히 고통스럽습니다.
브라우저 기반 도구는 일반적인 경우를 잘 처리합니다. 서식 정규화, 키 순서 독립성, 색상 코딩 출력, 경로 기반 표시. 엣지 케이스 — 대용량 파일, 배열 비교, 스키마 검증 — 에는 추가 도구나 커맨드라인이 필요하지만, 일상적인 API 디버깅, 설정 비교, 레코드 검사에는 빠르게 해결해줍니다.
JSON 포매터 옆에 북마크해두세요. 생각보다 자주 쓰게 될 겁니다.
자주 묻는 질문
JSON 파일 두 개를 비교하는 가장 좋은 방법은?
온라인 JSON 비교 도구를 사용하는 것이 가장 편리합니다. 두 객체를 파싱한 후 키 단위로 차이를 강조 표시해줍니다. 일반 텍스트 diff와 달리 구조를 이해하기 때문에 키 순서가 달라도 의미상 동일한 내용은 차이로 표시되지 않습니다. 파일이 매우 크다면 jq와 diff를 조합한 커맨드라인 방식이 더 안정적입니다.
두 API 응답 사이의 차이점은 어떻게 찾나요?
두 응답 본문을 JSON 비교 도구에 붙여넣으면 됩니다. 좋은 도구는 두 객체를 키 경로 단위로 펼쳐서 추가된 항목, 삭제된 항목, 변경된 항목을 정확하게 보여줍니다. 응답이 압축된 형태라면 먼저 JSON 포매터로 정리하는 것이 좋습니다.
키 순서가 다른 JSON 객체도 비교할 수 있나요?
네. 제대로 만들어진 JSON 비교 도구는 줄 순서가 아닌 키 경로 기준으로 비교합니다. JSON 객체는 스펙상 순서가 없기 때문에 {"a":1,"b":2}와 {"b":2,"a":1}은 동일한 것으로 처리됩니다. 이것이 일반 텍스트 diff 대비 핵심 장점입니다.
대용량 JSON 파일도 이 도구로 비교할 수 있나요?
파일 크기에 따라 다릅니다. 브라우저 기반 도구는 대부분 수백 KB까지는 무리 없이 처리합니다. 수 MB 이상의 파일은 브라우저가 느려지거나 탭이 멈출 수 있습니다. 그런 경우에는 커맨드라인에서 jq를 사용하는 것이 낫습니다: diff <(jq --sort-keys . a.json) <(jq --sort-keys . b.json).
JSON diff와 텍스트 diff의 차이점은 무엇인가요?
텍스트 diff는 줄 단위로 비교하며 서식, 공백, 키 순서에 민감합니다. JSON diff는 데이터 구조를 이해하고 비교하기 때문에 서식이나 키 순서가 달라도 의미상 변경된 내용만 정확하게 잡아냅니다. JSON 데이터라면 구조적 diff가 거의 항상 더 적합합니다. 정확한 서식이 중요한 경우에는 텍스트 비교 도구가 유용합니다.