공백은 사람 몫이고, 파서는 그냥 무시해
JSON 은 토큰 사이 공백을 통째로 무시해. {"a":1} 와
{
"a": 1
}
는 완전히 같은 값으로 파싱돼. 공백은 사람 보라고 있는 거니까 읽을 사람에 맞춰 골라.
JSON 두 형태
- Compact — 공백을 다 뺀 최소 바이트 형태야. 오가는 데이터에 써 (HTTP 응답, 로그, 메시지 큐). Nginx 로그도, gzip 파이프라인도, 네트워크 대역폭도 다 여기서 덕을 봐.
- Pretty-printed — 2 칸 들여쓰고 키마다 한 줄씩 쓰는 형태야. 소스 파일 (config) 과 문서, 디버깅에 써. git diff 가 깔끔하게 나와.
알아야 할 도구
어느 언어든 pretty-print 도구가 있어. Bash 를 쓴다면 jq (강력하고 쿼리 언어까지 들어 있어). Python 은 python -m json.tool (표준 라이브러리라 설치할 게 없어). JS 나 Node 는 JSON.stringify(obj, null, 2), Rust 는 serde_json::to_string_pretty. 하는 일은 다 같아. 데이터를 한 번 왕복시키고 포맷만 새로 입혀서 뱉는 거야.
원칙: git 에는 pretty-print 한 JSON 을 넣고, 네트워크로는 compact 한 JSON 을 보내. 반대로만 안 하면 돼. 디스크에 있는 pretty-print 는 읽히는 diff 를 주고, 오가는 compact 는 대역폭과 속도를 줘. 이렇게 나눠 쓰는 비용은 포매터 한 번 돌리는 게 전부지만, 둘을 섞어 쓰는 비용은 읽을 수 없는 diff 와 쓸데없이 뚱뚱한 payload 야.