스트림, log, ML 데이터셋 포맷
JSON Lines 는, 사람에 따라 NDJSON 이라고도 부르는데 같은 거야, 줄 하나가 각각 독립된 JSON 값인 파일 포맷이야. 감싸는 배열도 없고, 레코드 사이 콤마도 없고, 최상위 구조라는 것도 없어. 확장자는 .jsonl 이나 .ndjson 을 써.
JSON 이 못 푸는 거 푸는 거
- 스트리밍 — 줄 하나만 덧붙이면 레코드가 하나 추가돼. 평범한 JSON 배열이면 붙일 때마다 닫는 대괄호를 다시 써야 하잖아.
- 부분 읽기 — 파일 전체를 안 올리고 레코드를 하나씩 처리할 수 있어. 로그 파일이나 큰 데이터셋에서는 이게 결정적이야.
- 이어 붙이기와 쪼개기가 쉬워 —
cat a.jsonl b.jsonl이면 합쳐지고,split -l 1000 huge.jsonl이면 나뉘어. 줄 하나하나가 그 자체로 완결이라 둘 다 그냥 돼. - grep 이 먹혀 —
grep error events.jsonl로 파싱 없이 원하는 줄을 바로 찾아.
JSON Lines 만나는 곳
- 애플리케이션 log 파일 (
papertrail,vector.dev,fluentd). - ML 학습 데이터 (HuggingFace 데이터셋, OpenAI fine-tuning, instruction tuning).
- 데이터베이스 export (MongoDB
mongoexport, Firestore export). - 라이브 event tail.
원칙: 데이터가 레코드가 줄줄이 이어지는 모양이면 (로그 이벤트, 학습 샘플, 시계열의 행) 최상위 배열 말고 JSONL 을 잡아. 뒤에 붙이는 비용이 거의 없고, 파싱은 한 번에 한 줄이면 되고, 파일이 GB 로 불어나도 파서가 안 무너져.