
브라우저를 멈추게 하지 않고 거대한 JSON 파일 보는 법
게시일 2026년 7월 23일
50MB짜리 API 덤프나 데이터베이스 전체 내보내기를 브라우저 기반 JSON 도구에 — 이 사이트의 도구를 포함해서 — 붙여넣으면 탭이 느려지거나 아예 얼어 버립니다. 특정 도구의 버그가 아니라, 브라우저가 텍스트와 DOM을 렌더링하는 방식 자체의 특성입니다. 실제로 무슨 일이 벌어지는지, 어떻게 우회하는지 살펴봅시다.
큰 JSON 파일이 “느리게 로드”되는 게 아니라 브라우저를 얼리는 이유
두 가지 별개의 비용이 쌓입니다.
- 파싱 비용. 잘 형성된 50MB 문자열에 대한
JSON.parse는 일반 노트북에서 대략 0.5초에서 몇 초 걸립니다. 체감은 되지만 진짜 문제는 아닙니다. - 렌더링 비용. 탭을 실제로 얼리는 건 이쪽입니다. 도구가 포맷된 결과를 거대한 텍스트 덩어리로(혹은 더 나쁘게, 키마다 DOM 노드 하나씩인 접이식 트리로) 렌더링하면, 브라우저는 잠재적으로 수백만 개의 DOM 노드를 배치하고 그려야 합니다. 탭을 응답 불능으로 만드는 건 파싱이 아니라 이것입니다.
즉 여러분이 부딪히는 크기 한계는 JSON 명세나 파서에서 오는 게 거의 아닙니다. 브라우저에게 엄청난 양의 텍스트나 중첩 UI를 한꺼번에 그리라고 요구하는 데서 옵니다.
정말 큰 파일을 위한 실제 워크플로
파일 전체를 브라우저 어디에서도 열지 마세요. 대신:
- 필요한 부분만 먼저 추출하세요. 200MB 덤프 안의 망가진 레코드 하나를 디버깅한다면, 나머지 199MB를 눈앞에 둘 필요가 없습니다. 커맨드라인 도구는 브라우저 탭처럼 전체 파일을 메모리에 올리지 않고 이를 처리합니다.
# pull out one top-level key from a huge file, streaming jq '.results[42]' huge-file.json > fragment.json # or just grep for context around a known string first grep -n '"user_id": 88214' huge-file.json - 그 조각만 브라우저에서 포맷하세요. 추출된 몇 KB의 JSON은 즉시 포맷되고 실제로 읽을 만합니다. 이건 이 특정 에러만이 아니라 어떤 큰 로그나 덤프에서든 들여 둘 가치가 있는 “관심 있는 조각만 포맷하기” 습관입니다.
- 값이 아니라 구조를 살펴야 한다면, 무엇을 추출할지 정하기 전에 로컬에서
jq 'keys'나jq '. | length'를 먼저 돌려 형태를 파악하세요. 배열에 50,000개 항목이 있다는 걸 알기 위해 50,000개 항목을 눈으로 볼 필요는 없습니다.
브라우저 도구로 충분한 경우
실제 디버깅의 압도적 다수 — API 응답, 설정 파일, 웹훅 페이로드 — 는 수백 MB가 아니라 킬로바이트에서 몇 MB 수준입니다. 그 범위에서는 포매터에 바로 붙여넣고 정확한 에러 위치와 함께 즉각적이고 읽기 좋은 출력을 얻는 쪽이 커맨드라인을 꺼내는 것보다 빠릅니다. 이 방식이 무너지는 크기는 대부분의 예상보다 훨씬 큽니다. 진짜 문제를 일으키는 건 “한 페이지 넘는” 크기가 아니라 구체적으로 “수십 MB 이상”입니다.
빠른 참조표
| 파일 크기 | 할 일 |
|---|---|
| 약 5MB 미만 | 브라우저 포매터에 바로 붙여넣기 — 즉각적이고 문제 없음 |
| 약 5–30MB | 여전히 가능하지만 짧은 멈춤 예상. 읽어야 할 부분만 포맷 |
| 30MB 이상 | jq/grep으로 관련 조각을 먼저 추출한 뒤 그것만 포맷 |
이 문제를 고치는 데 도구의 “대용량 파일 모드”는 필요 없습니다. 해결책은 보기 전에 추출하는 것 — 도구의 한계가 아니라 워크플로의 변화입니다.