JSON Beautify, Minify, Validate를 상황별로 쓰는 방법
JSON 문법에서 자주 걸리는 오류와 원인, 그리고 정렬과 압축을 각각 언제 써야 하는지 정리했습니다.
세 가지 동작의 목적이 다르다
Beautify는 사람이 읽기 위한 것입니다. 중첩 구조에 맞춰 줄바꿈과 들여쓰기를 넣어 데이터의 형태를 눈으로 파악할 수 있게 만듭니다.
Minify는 기계가 주고받기 위한 것입니다. 공백과 줄바꿈을 모두 제거해 전송 크기를 줄입니다. API 응답이 대부분 한 줄로 오는 이유입니다.
Validate는 문법이 올바른지 확인하는 것입니다. 사실 Beautify나 Minify를 수행하려면 먼저 파싱을 해야 하므로, 변환에 성공했다는 것 자체가 유효한 JSON이라는 증명이 됩니다.
JSON에서 가장 흔한 문법 오류
JSON은 JavaScript 객체 리터럴과 비슷해 보이지만 훨씬 엄격합니다. 아래는 실무에서 반복적으로 발생하는 오류입니다.
- 마지막 요소 뒤의 쉼표: {"a":1,} 는 JavaScript에서는 허용되지만 JSON에서는 오류입니다. 배열 끝의 쉼표도 마찬가지입니다.
- 작은따옴표 사용: JSON은 문자열과 키 모두 큰따옴표만 허용합니다.
- 키를 따옴표로 감싸지 않음: {name:"a"} 는 JavaScript 객체이지 JSON이 아닙니다.
- 주석: // 나 /* */ 는 JSON 표준에 없습니다. 설정 파일에 주석이 필요하면 JSON5나 YAML을 고려해야 합니다.
- 이스케이프 누락: 문자열 안의 큰따옴표는 백슬래시로 이스케이프해야 하고, 줄바꿈은 \n 으로 표기해야 합니다.
- NaN, Infinity, undefined: JSON에는 이런 값이 없습니다. null을 사용하거나 문자열로 표현해야 합니다.
큰 숫자를 다룰 때의 함정
JSON 자체는 숫자의 크기를 제한하지 않지만, 이를 처리하는 JavaScript는 안전하게 표현할 수 있는 정수 범위가 정해져 있습니다. 이 범위를 넘는 값은 정밀도가 손실되어 마지막 자리가 달라집니다.
데이터베이스의 큰 ID 값이나 스노우플레이크 방식으로 생성한 식별자를 JSON으로 주고받을 때 이 문제가 발생합니다. 서버에서는 정확한 값을 보냈는데 브라우저에서 읽으면 끝자리가 바뀌어 있는 것입니다.
해결책은 큰 식별자를 숫자가 아니라 문자열로 전달하는 것입니다. 많은 API가 ID를 문자열로 내려주는 이유가 여기에 있습니다.
언제 무엇을 쓰는가
디버깅할 때는 Beautify입니다. 로그에 한 줄로 찍힌 응답을 정렬해 보면 어떤 필드가 비어 있는지, 배열의 길이가 몇인지 바로 보입니다.
설정 파일을 수정한 뒤에는 Validate입니다. 배포한 다음에 문법 오류를 발견하면 서비스가 시작되지 않는 사고로 이어집니다. 커밋 전에 한 번 검사하는 습관이 도움이 됩니다.
요청 본문이나 응답 크기를 줄여야 할 때는 Minify입니다. 다만 gzip 압축이 적용된 환경에서는 공백 제거의 효과가 크지 않으므로, 실제 전송량을 측정해 보고 판단하는 것이 좋습니다.