JSON 트리뷰, 시각화 도구
복잡하게 중첩된 JSON 데이터를 텍스트 에디터에서 눈으로 추적하는 것은 한계가 있습니다. JSON 트리뷰 시각화 도구는 텍스트 형태의 JSON을 직관적인 노드(Node)와 연결선으로 구성된 트리 다이어그램으로 변환하여, 데이터 간의 계층 관계를 한눈에 파악할 수 있도록 돕습니다. 노드 접기/펴기, 실시간 검색, 고화질 이미지 다운로드, 정밀도 보존 파싱까지 지원합니다.
1. json 포맷터로는 한계가 있었습니다.
기존에 Json Formatter를 만들어두었으나, 이걸로 더 복잡한 json 구조를 분석하는 것이 . 역부족이다.
이런 저런 이유때문에 - 시각화할 도구가 필요하다는 취지로 작성해줘.
{
"payment": {
"orderId": "ORD-20240115-0042",
"amount": { "total": 59000, "tax": 5363, "discount": { "coupon": 3000, "point": 1200 } },
"buyer": { "name": "홍길동", "contact": { "email": "hong@example.com", "phone": "010-1234-5678" } },
"items": [
{ "id": "ITEM-001", "name": "무선 키보드", "quantity": 1, "options": { "color": "black", "layout": "KR" } },
{ "id": "ITEM-002", "name": "마우스패드", "quantity": 2, "options": { "size": "XL" } }
],
"shipping": { "address": { "zipCode": "06236", "city": "서울", "detail": "강남구 테헤란로 123" }, "method": "EXPRESS" }
}
}
텍스트 에디터에서 중괄호를 세어가며 discount가 amount 안에 있는지, options가 items 배열의 각 요소 안에 있는지를 추적하다 보면 금방 혼란스러워집니다. 특히 배열 안에 객체가, 객체 안에 또 배열이 있는 구조에서는 들여쓰기만으로 계층을 파악하는 것이 사실상 불가능에 가까웠습니다.
트리 다이어그램으로 변환하는 순간, payment → amount → discount → coupon이라는 경로가 시각적으로 선 하나로 연결되어 보입니다. 데이터의 전체 윤곽을 먼저 파악하고, 필요한 가지만 펼쳐 세부 값을 확인하는 방식은 텍스트 기반 분석과는 차원이 다른 효율을 제공합니다.
2. JSON 트리뷰 시각화 도구 사용 방법
복잡한 설치 과정 없이 웹 브라우저에서 즉시 JSON 데이터를 시각화할 수 있습니다. 다음 단계에 따라 도구를 활용해 보세요.

1단계: JSON 데이터 입력하기
화면 왼쪽의 '데이터 입력' 패널에 시각화하고자 하는 원본 JSON 텍스트를 복사하여 붙여넣습니다. (추후 상단의 파일 업로드 아이콘을 통해 로컬 기기의 .json 파일을 직접 불러오는 기능도 지원할 예정입니다.)
2단계: 트리 다이어그램 탐색 및 옵션 설정
데이터를 입력하면 오른쪽 시각화 패널에 즉시 트리 구조가 생성됩니다. 마우스 휠을 사용하여 다이어그램을 확대하거나 축소할 수 있으며, 빈 공간을 클릭한 채 드래그(Pan)하여 넓은 화면을 자유롭게 이동할 수 있습니다. 구조가 너무 방대하다면 특정 노드를 접어(Collapse) 원하는 수준의 상세 정보만 화면에 띄워보세요.
3단계: 데이터 검색 및 결과 저장
특정 값을 찾아야 한다면 상단의 검색창을 활용하세요. 입력한 텍스트가 포함된 노드가 즉시 하이라이트 됩니다. 분석이 끝난 트리 구조를 공유하거나 기록으로 남기고 싶다면, 툴바의 '다운로드' 버튼을 클릭하여 json-tree.png 파일로 저장할 수 있습니다.
3. 트리 구조와 JSON 계층 시각화의 핵심 개념
트리(Tree)는 컴퓨터 과학에서 가장 기본적인 자료구조 중 하나로, 하나의 루트(Root)에서 시작하여 자식 노드들이 가지치기하며 뻗어나가는 계층형 구조입니다. JSON의 중첩된 객체/배열 구조는 본질적으로 트리와 동일한 형태이기 때문에 트리 시각화가 가장 자연스러운 표현 방식입니다.
a. 트리 구조의 기본 용어
| 용어 | 설명 | JSON에서의 대응 |
|---|---|---|
| 루트 노드 (Root) | 트리의 최상위 노드 | 최외곽 {} 또는 [] |
| 부모 노드 (Parent) | 자식을 가진 노드 | 하위 객체/배열을 포함하는 키 |
| 자식 노드 (Child) | 부모에 연결된 하위 노드 | 객체의 각 키-값 쌍, 배열의 각 요소 |
| 리프 노드 (Leaf) | 자식이 없는 말단 노드 | 원시 값 (string, number, boolean, null) |
| 깊이 (Depth) | 루트에서 해당 노드까지의 거리 | JSON 중첩 단계 수 |
| 간선 (Edge) | 노드 간 연결선 | 부모-자식 간의 포함 관계 |
b. JSON 노드 타입별 시각화 방식
트리뷰 도구는 JSON의 각 요소 타입에 따라 노드를 다르게 표현합니다.
| JSON 요소 | 노드 표현 | 특징 |
|---|---|---|
Object {} | 접기/펴기 가능한 그룹 노드 | 하위 키-값 쌍을 자식 노드로 표시 |
Array [] | 접기/펴기 가능한 그룹 노드 | 인덱스([0], [1], ...)로 자식 구분 |
String "text" | 리프 노드 (값 직접 표시) | 따옴표 포함 원본 값 표시 |
Number 42 | 리프 노드 (값 직접 표시) | 정밀도 보존 (BigInt 포함) |
| Boolean / Null | 리프 노드 (값 직접 표시) | true, false, null 그대로 표시 |
c. json 트리가 노드를 찾는 방법
트리 시각화 도구가 JSON을 노드로 분해하는 과정은 트리 탐색 알고리즘을 기반으로 합니다.
// DFS (깊이 우선 탐색) — 한 가지를 끝까지 파고든 뒤 다음 가지로 이동
function dfs(node, depth = 0) {
console.log(' '.repeat(depth) + node.key + ': ' + node.value)
for (const child of node.children) {
dfs(child, depth + 1)
}
}
// → payment → orderId → amount → total → tax → discount → coupon → ...
// BFS (너비 우선 탐색) — 같은 깊이의 노드를 모두 방문 후 다음 깊이로
function bfs(root) {
const queue = [root]
while (queue.length > 0) {
const node = queue.shift()
console.log(node.key + ': ' + node.value)
queue.push(...node.children)
}
}
// → payment → orderId, amount, buyer, items, shipping → total, tax, discount → ...
Note
이 도구의 트리 렌더링은 DFS 방식으로 JSON을 순회하며 노드를 생성합니다. 접기(Collapse) 기능은 특정 노드의 하위 탐색을 중단하는 것과 동일한 원리로, 대용량 데이터에서도 필요한 부분만 선택적으로 렌더링하여 성능을 유지합니다.
4. 실무에서 JSON 트리 시각화가 필요한 상황들
이것도 코드단위가 아니라 진짜 필요한 상황에 대해서 서술해줄래?
json이 복잡해지는 그럼. ㅏㅇ황들? 그런 상황에서 파싱 트리를 부넉해서 좀 . 시각화 할 . 잇도록
e. API 명세서 및 테스트 보고서에 다이어그램 첨부
API 설계 문서나 QA 테스트 결과 보고서에 JSON 응답 구조를 텍스트로 붙여넣는 것보다, 트리 다이어그램 이미지를 첨부하면 비개발 직군(PM, 디자이너, QA)도 데이터 구조를 직관적으로 이해할 수 있습니다.
Important
이 도구의 PNG 다운로드 기능을 활용하면 별도의 다이어그램 도구(draw.io, Mermaid 등) 없이도 문서 품질의 시각 자료를 즉시 만들 수 있습니다. 이미지 해상도가 높아 확대해도 노드 텍스트가 선명하게 유지됩니다.
5. 트리가 제대로 안 그려질 때 — 흔한 오류와 해결법
a. 유효하지 않은 JSON 입력
JSON 문법 오류가 있으면 트리 자체가 생성되지 않습니다. 가장 흔한 실수는 후행 쉼표, 작은따옴표, 주석 포함입니다.
// ❌ 트리 생성 실패 — 후행 쉼표
{
"name": "홍길동",
"age": 30,
}
// ✅ 후행 쉼표 제거 후 정상 렌더링
{
"name": "홍길동",
"age": 30
}
Note
JSON 트리뷰에 붙여넣기 전 JSON 포맷터로 먼저 유효성을 검증하면 문법 오류를 사전에 잡을 수 있습니다.
b. 대용량 JSON의 렌더링 성능 저하
수만 개의 노드가 포함된 JSON을 한 번에 시각화하면 브라우저 렌더링이 느려질 수 있습니다.
// ❌ 10만 개 항목의 배열을 통째로 시각화
{ "logs": [ {...}, {...}, ... ] } // 100,000개 요소
// ✅ 전략적으로 데이터를 잘라서 시각화
// 1. 전체 구조만 먼저 파악: 배열 첫 2~3개 요소만 추출
{ "logs": [ { "첫 번째 항목": "..." }, { "두 번째 항목": "..." } ] }
// 2. 노드 접기(Collapse) 기능으로 관심 영역만 펼치기
c. 큰 숫자가 반올림되어 표시되는 경우 (일반 파서)
JavaScript의 JSON.parse()는 2⁵³을 초과하는 정수의 정밀도를 손실합니다. 백엔드에서 Long 타입 ID를 반환하면 마지막 자릿수가 달라질 수 있습니다.
// ❌ 일반 JSON.parse — 정밀도 손실
JSON.parse('{"id": 9007199254740993}')
// → { id: 9007199254740992 } ← 마지막 자리 변경
// ✅ 이 도구의 정밀도 보존 파싱 — 원본 그대로 표시
// 내부적으로 BigInt 안전 파싱을 적용하여
// 9007199254740993이 그대로 노드에 표시됨
d. 순환 참조가 포함된 JavaScript 객체
JavaScript 객체를 JSON.stringify()로 직렬화할 때, 순환 참조(circular reference)가 있으면 직렬화 자체가 실패합니다.
// ❌ 순환 참조 — JSON.stringify 실패
const obj = { name: '부모' }
obj.self = obj // 자기 자신을 참조
JSON.stringify(obj)
// → TypeError: Converting circular structure to JSON
// ✅ 순환 참조 제거 후 직렬화
JSON.stringify(obj, (key, value) => {
if (key === 'self') return '[Circular]'
return value
})
// → '{"name":"부모","self":"[Circular]"}'
// 이 결과를 트리뷰에 붙여넣으면 정상 렌더링
e. 입력 데이터의 유효성을 먼저 확인하지 않음
위 모든 문제의 핵심은 시각화 도구에 넣기 전에 데이터 자체를 점검하지 않은 것입니다. JSON 문법 검증 → 데이터 크기 확인 → 특수 값(BigInt, 순환 참조) 처리 순서로 전처리하면 대부분의 렌더링 문제를 사전에 방지할 수 있습니다.
6. 생각해볼 거리
JSON에 트리 시각화가 자연스러운 이유는 무엇일까요?
JSON은 본질적으로 방향성 비순환 그래프(DAG)이자 트리 구조입니다. 루트 객체에서 시작하여 중첩된 객체/배열이 자식 노드를, 원시 값(문자열, 숫자 등)이 리프 노드를 구성합니다. 순환 참조가 허용되지 않으므로 완전한 트리 형태를 유지합니다. 파일 시스템의 디렉토리 구조, HTML의 DOM 트리, XML 문서 구조가 모두 같은 이유로 트리로 시각화됩니다. 인간의 뇌가 계층적 정보를 처리할 때 트리 형태가 가장 직관적이라는 인지과학적 근거도 있습니다.
대용량 JSON을 다룰 때 가상 렌더링(Virtual Rendering)이란 무엇인가요?
수만 개의 노드를 한 번에 DOM에 렌더링하면 브라우저가 느려지거나 멈출 수 있습니다. 가상 렌더링은 화면에 실제로 보이는 영역(뷰포트)의 노드만 DOM에 그리고, 스크롤할 때 동적으로 노드를 추가/제거하는 기법입니다. React의 react-window나 react-virtualized가 대표적인 구현체입니다. 트리 시각화에서도 같은 원리를 적용하여, 접혀 있는 노드의 자식을 아예 렌더링하지 않음으로써 성능을 확보합니다.
JSON 트리 시각화와 JSON Path, 어떤 관계가 있을까요?
JSON Path는 트리 내 특정 노드의 위치를 문자열로 표현하는 쿼리 언어입니다(예: $.payment.items[0].options.color). 트리 시각화에서 루트에서 특정 노드까지 따라가는 경로가 곧 JSON Path가 됩니다. 시각화 도구에서 노드를 클릭하여 JSON Path를 자동 생성하는 기능이 있다면, API 응답에서 원하는 값을 추출하는 코드를 즉시 작성할 수 있습니다. jq(CLI), JSONPath-Plus(JavaScript) 같은 도구와 함께 사용하면 데이터 추출 작업이 크게 효율적이 됩니다.
브라우저 탭 하나로 복잡하게 중첩된 JSON을 직관적인 트리 다이어그램으로 즉시 변환하고 원하는 노드를 검색·탐색할 수 있습니다 — API 응답 분석부터 팀 문서 작성까지, 텍스트로 추적하던 시간이 시각적 이해로 대체됩니다. 그것만으로도 이 도구의 역할은 충분하다고 생각합니다.