JSON은 현재 가장 널리 사용되는 데이터 교환 형식으로, 거의 모든 API와 프론트엔드·백엔드 통신에 활용됩니다. 그런데 들여쓰기와 줄바꿈으로 인해 길어진 포맷된 JSON에서 이 '공백'이 정말 필요한 걸까요? 이것이 바로 JSON 압축(Minify)이 해결하려는 문제입니다.
1. JSON 압축이란 무엇인가?
JSON 압축(Minify 또는 Compact)이란 JSON 텍스트에서 컴퓨터 파싱에 불필요한 문자를 모두 제거하는 것입니다. 구체적으로는:
- 들여쓰기용 공백과 탭
- 키-값 쌍 사이의 줄바꿈
- 콜론과 쉼표 앞뒤의 불필요한 공백
예를 들어, 아래의 포맷된 JSON은:
{
"name": "Alice",
"age": 30,
"active": true
}
압축하면 다음과 같이 됩니다:
{"name":"Alice","age":30,"active":true}
데이터 내용은 동일하지만 크기는 크게 줄어듭니다.
2. 압축된 JSON도 유효한가?
그렇습니다. JSON 사양(RFC 8259)에 따르면 공백 문자(스페이스·탭·줄바꿈·캐리지리턴)는 구문 요소 사이에 나타날 수 있지만 데이터 의미에 영향을 주지 않습니다. 들여쓰기나 줄바꿈의 유무는 JSON 파서에게 아무런 차이가 없습니다. 압축된 JSON과 포맷된 JSON은 구문적으로 완전히 동일합니다.
3. JSON 압축을 사용해야 하는 시점은?
모든 상황에서 JSON을 압축해야 하는 것은 아닙니다. 실제로 효과적인 상황을 살펴봅시다.
API 응답과 네트워크 전송
백엔드 API가 대량의 데이터를 프론트엔드나 모바일 앱에 전송할 때, JSON 압축으로 전송 바이트 수를 크게 줄일 수 있습니다. 모바일 네트워크나 저속 연결에서 특히 효과적입니다. API가 초당 수만 번 호출되는 환경에서는 호출당 몇 KB만 절약해도 누적 트래픽 감소가 상당합니다.
정적 JSON 설정 파일 번들링
React, Vue 등의 프론트엔드 프로젝트는 프로덕션 빌드 시 JSON 형식의 설정이나 언어 파일을 함께 번들링합니다. 빌드 도구가 이 JSON을 자동으로 압축하여 최종 결과물의 크기를 줄입니다.
localStorage와 Cookie 저장
브라우저 localStorage에는 용량 제한(보통 5MB)이 있고, Cookie는 더 엄격한 제한(약 4KB)이 있습니다. 복잡한 객체를 직렬화하여 저장해야 할 때 압축된 형식을 사용하면 더 많은 데이터를 저장할 수 있습니다.
데이터베이스 필드 저장
시스템이 JSON을 데이터베이스 TEXT 필드에 저장할 경우, 압축을 통해 저장 공간을 절약하고 필드 길이 제한을 피할 수 있습니다.
4. JSON 압축을 사용하지 않는 것이 좋은 경우는?
압축에는 장점이 있지만, 권장되지 않는 상황도 있습니다:
- 개발·디버깅 단계: 압축된 JSON은 거의 읽을 수 없어 문제가 발생했을 때 수동으로 조사하기 어렵습니다. 개발 환경에서는 보통 포맷된 형식을 유지합니다.
- 사람이 수동으로 편집하는 설정·번역 파일: 개발자가 JSON을 직접 수정해야 하는 경우 가독성을 우선시하는 것이 좋습니다.
- HTTP 압축(gzip/Brotli)이 활성화된 경우: 주요 웹 서버는 전송 시 텍스트 형식을 자동으로 gzip 또는 Brotli 압축합니다. 이 경우 JSON Minify의 효과는 미미합니다. 반복되는 공백 문자는 gzip 후 거의 공간을 차지하지 않습니다.
Content-Encoding가 있는지 먼저 확인한 후 JSON 압축이 필요한지 판단하세요.
5. JSON 압축과 포맷은 반대 작업인가?
그렇게 이해해도 무방합니다. JSON 포맷(Prettify / Beautify)은 압축된 JSON을 펼쳐 들여쓰기와 줄바꿈을 추가해 가독성을 높이고, JSON 압축(Minify / Compact)은 반대로 포맷된 JSON을 압축 형식으로 되돌립니다. 둘 다 동일한 데이터의 '시각적 표현'만 바꾸는 것으로, 데이터 자체의 값은 변경되지 않습니다.
일부 도구(이 사이트의 JSON 포맷 도구 포함)는 두 기능을 모두 제공하여 상황에 따라 전환할 수 있습니다.
6. JSON 압축에 보안 우려가 있나?
압축 자체는 데이터 내용을 변경하지 않으므로 새로운 보안 문제를 일으키지 않습니다. 다만 다음 사항에 주의하세요:
- 압축은 암호화가 아닙니다. 압축된 JSON은 여전히 평문으로, 누구든 바로 읽을 수 있습니다.
- JSON에 토큰, 비밀번호 등 민감한 정보가 포함된 경우, 반드시 HTTPS를 통해 전송하세요.
- 온라인 도구로 민감한 데이터가 포함된 JSON을 압축할 때는 해당 도구가 데이터를 제3자 서버로 전송하는지 확인하세요.
마치며
JSON 압축은 간단하지만 실용적인 기법입니다. 데이터의 의미를 바꾸지 않고 컴퓨터에 불필요한 공백 문자를 제거함으로써 전송량과 저장 공간을 절약할 수 있습니다. API 전송, 정적 리소스 번들링, 브라우저 저장 등의 상황에서 유용합니다. 하지만 서버에 gzip 압축이 설정되어 있거나 JSON이 사람이 직접 편집하는 설정 파일이라면 Minify가 반드시 필요하지는 않습니다.