JSON 압축이란 무엇인가요?
JSON(JavaScript Object Notation)은 RFC 8259와 ECMA-404가 정의한 가볍고 텍스트 기반의 데이터 교환 형식입니다. 압축은 문자열 리터럴 바깥에 있는 모든 스페이스, 탭, 줄바꿈을 제거합니다 — 모든 값은 바이트 단위로 보존되고, 장식용 공백만 사라집니다. 출력은 입력과 완전히 동일한 값으로 파싱됩니다.
JSON 압축은 어떻게 작동하나요?
입력은 전적으로 브라우저 내부에서 내장된 JSON.parse와 JSON.stringify 함수를 사용해 처리됩니다. 주요 단계는 다음과 같습니다:
- 텍스트 영역의 입력을 한 글자도 빠짐없이 그대로 읽고, 모든 바이트는 로컬 메모리에 보관됩니다.
- 브라우저는
JSON.parse로 입력을 파싱합니다. 유효한 JSON이 아니라면 파서가SyntaxError를 던지고, 그 내용을 그대로 보여드립니다 — 입력 텍스트는 절대 페이지를 벗어나지 않습니다. - 파싱에 성공하면 결과 값은 인덴트 인자 없이
JSON.stringify(value)로 재직렬화되어, 같은 값을 표현하는 가장 짧은 유효 형태로 변환됩니다. - 원본과 압축 텍스트의 바이트 길이는
new TextEncoder().encode(...).byteLength로 계산됩니다 — HTTP 서버가 실제 회선에서 보게 될 UTF-8 바이트 수와 동일합니다. - 결과는 읽기 전용 텍스트 영역에 기록되고, 메트릭 스트립은 절약된 바이트와 비율을 보여주며, 다운로드 버튼은 결과를 배포 가능한
.min.json파일로 묶어줍니다.
이 도구로 JSON을 압축하는 이유는 무엇인가요?
- 프라이버시: 모든 파싱, 압축, 측정 작업이 브라우저 내부에서 진행됩니다. JSON은 절대 저희 서버에 도달하지 않습니다 — 업로드 없음, 텔레메트리 없음, 계정 불필요.
- 실제 바이트 수치: 원본 크기, 압축 후 크기, 절약량은 모두 TextEncoder로 계산되어 CDN이나 API 게이트웨이가 실제로 청구하는 UTF-8 바이트 차이를 그대로 보여줍니다.
- 데이터 손실 없음: 압축은 순수하게 장식용 작업입니다 — 모든 값이 같은 JSON 트리로 파싱되므로, 프로덕션 페이로드, 매니페스트, 임베디드 픽스처에 안전하게 사용할 수 있습니다.
- 빠른 속도: 순수한
JSON.parse+JSON.stringify가 일반적인 클립보드 크기의 페이로드를 즉시 처리하며, 외부 라이브러리를 로드하지 않습니다.
JSON 압축의 일반적인 활용은 무엇인가요?
JSON에서 의미 없는 공백을 제거하는 작업은 웹 개발, 데이터 엔지니어링, 임베디드 시스템 전반에서 자주 보입니다:
- API 페이로드 축소: 종량제 API 게이트웨이, 유료 출구 회선, 위성 회선을 통과하기 전에 요청·응답 본문을 줄입니다.
- HTML 임베딩: 프리티 프린터의 공백이 렌더링된 페이지로 새지 않도록 JSON 블롭을
data-*속성이나<script type="application/json">태그 안에 넣습니다. - 더 작은 localStorage: 프리티 프린트 대신 압축된 JSON을 localStorage / IndexedDB에 저장하면 모바일 브라우저의 엄격한 오리진별 저장 한도에서 특히 도움이 됩니다.
JSON 압축 예시는 어떤 모습인가요?
약 1.2 KB(2 칸 들여쓰기 기준 약 1,225 바이트)의 프리티 프린트된 설정 파일을 붙여넣고 압축을 누르면 보통 0.4 KB 미만으로 줄어듭니다 — 약 66% 절감 — 모든 키와 값이 정확히 보존된 채로 말입니다. 다운로드되는 output.min.json은 포맷팅 미들웨어가 전혀 없는 HTTP 서버가 Content-Type: application/json로 응답하는 것과 바이트 단위로 일치합니다.
정말 브라우저에서 실행되나요?
네. 압축 파이프라인은 브라우저 탭 안에서 도는 순수한 JSON.parse + JSON.stringify입니다. 업로드도 없고, Service Worker가 입력을 프록시하지도 않으며, 압축 단계 자체는 네트워크 요청을 하나도 발생시키지 않습니다. 외부로 나가는 트래픽은 표준 페이지 자원(CSS, 폰트, 분석)뿐이며 — 여러분의 JSON은 Ultim8Soft에 도달하지 않습니다.
왜 JSON을 압축하나요?
압축된 JSON은 프리티 프린트 원본과 완전히 동일한 값으로 파싱되면서도 회선과 저장소에서 더 작습니다. 더 작은 페이로드는 더 적은 CDN 출구 비용, 더 빠른 모바일 다운로드, Service Worker의 메모리 부담 감소, JWT 페이로드·HTML data-* 속성·localStorage 한도 같은 고정 크기 봉투에 더 잘 맞도록 해줍니다. 트래픽이 많은 API에서는 절감이 누적됩니다 — 하루 1 GB 엔드포인트에서 30%를 줄이면 월 약 9 GB를 절약합니다.
압축하면 데이터가 손실되나요?
아니요. JSON 압축은 문자열 리터럴 외부에 있는 공백 — 스펙이 이미 비의미로 분류하는 스페이스·탭·줄바꿈 — 만 제거합니다. 모든 키, 값, 숫자, 이스케이프 시퀀스, 문자열 안의 문자는 바이트 단위로 보존됩니다. 출력은 입력과 deepEqual인 값으로 파싱되고, 사라지는 것은 장식용 들여쓰기뿐입니다.
포매터와 압축기의 차이는 무엇인가요?
동반 도구인 JSON 포매터는 반대 방향으로 동작합니다: 중첩 구조를 사람이 읽을 수 있도록 공백을 펼칩니다. 압축기는 그 공백을 다시 걷어내 전송과 저장을 위한 형태로 만듭니다. 두 도구는 서로의 역연산입니다 — JSON 문서를 포매터 → 압축기를 거치게 하면 처음 압축기에 넣었던 바이트열과 동일한 결과가 돌아옵니다. 둘 다 장식용 마크업이 아니라 파싱된 값에 대해 동작하기 때문입니다.
이 JSON 압축기는 여러분의 Node.js, Deno, 브라우저 런타임과 동일한 파서를 사용하며, 군더더기 없는 HTTP 서버가 내보내는 것과 바이트 단위로 동일한 출력을 만듭니다. 위에 JSON을 붙여넣고, 결과를 복사하거나 .min.json으로 다운로드하세요.