TL;DR

  • NDJSON์€ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”„๋กœํ† ์ฝœ(TCP, UNIX pipe ๋“ฑ)์—์„œ ์—ฌ๋Ÿฌ JSON ์ธ์Šคํ„ด์Šค๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ์ค„๋ฐ”๊ฟˆ ๊ตฌ๋ถ„ ํฌ๋งท์ด๋‹ค.
  • ํ•œ ์ค„์— ํ•˜๋‚˜์˜ ์œ ํšจํ•œ JSON ํ…์ŠคํŠธ, \n์œผ๋กœ ๊ตฌ๋ถ„, UTF-8 ์ธ์ฝ”๋”ฉ ํ•„์ˆ˜.

NDJSON (Newline Delimited JSON)

๋ฐฐ๊ฒฝ

JSON ์ž์ฒด์—๋Š” ์ŠคํŠธ๋ฆผ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ JSON ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. NDJSON์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ค„๋ฐ”๊ฟˆ(\n)์„ ๊ตฌ๋ถ„์ž ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์•ฝ์„ ์ •์˜ํ•œ๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ ์ „์†ก๋ฟ ์•„๋‹ˆ๋ผ ๋ฐ˜๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ์—๋„ ์ ํ•ฉํ•˜๋‹ค.

ํ•ต์‹ฌ ๊ทœ์น™

Serialization (์ง๋ ฌํ™”)

  1. ๊ฐ JSON ํ…์ŠคํŠธ๋Š” RFC 8259๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค.
  2. ๊ฐ JSON ํ…์ŠคํŠธ ๋’ค์— ๋ฐ˜๋“œ์‹œ \n (0x0A) ๋ฅผ ๋ถ™์ธ๋‹ค.
  3. \r (0x0D)๋Š” \n ์•ž์— ์„ ํƒ์ ์œผ๋กœ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค (\r\n ํ—ˆ์šฉ).
  4. JSON ํ…์ŠคํŠธ ๋‚ด๋ถ€์— ์ค„๋ฐ”๊ฟˆ(\n)์ด๋‚˜ ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด(\r)์ด ํฌํ•จ๋˜๋ฉด ์•ˆ ๋œ๋‹ค.
  5. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” UTF-8 ์ธ์ฝ”๋”ฉ์ด์–ด์•ผ ํ•œ๋‹ค.

Parsing (ํŒŒ์‹ฑ)

  1. ํŒŒ์„œ๋Š” \n (0x0A)๊ณผ \r\n (0x0D0A) ๋ชจ๋‘๋ฅผ ์ค„ ๊ตฌ๋ถ„์ž๋กœ ์ˆ˜์šฉํ•ด์•ผ ํ•œ๋‹ค.
  2. ํŒŒ์‹ฑํ•  ์ˆ˜ ์—†๋Š” JSON์€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์•ผ ํ•œ๋‹ค.
  3. ๋นˆ ์ค„ ๋ฌด์‹œ ์—ฌ๋ถ€๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ, ํ•ด๋‹น ๋™์ž‘์„ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์„ค์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.

๋ฏธ๋””์–ด ํƒ€์ž… & ํ™•์žฅ์ž

  • Media Type: application/x-ndjson
  • File Extension: .ndjson

์˜ˆ์‹œ

{"some":"thing"}
{"foo":17,"bar":false,"quux":true}
{"may":{"include":"nested","objects":["and","arrays"]}}

๊ฐ ์ค„์ด ํ•˜๋‚˜์˜ ์œ ํšจํ•œ JSON ๊ฐ์ฒด์ด๋ฉฐ, ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

ํ™œ์šฉ ๋งฅ๋ฝ

  • ๋กœ๊ทธ ์ŠคํŠธ๋ฆฌ๋ฐ: ๊ฐ ๋กœ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ํ•œ ์ค„์˜ JSON์œผ๋กœ ๊ธฐ๋ก โ†’ ํŒŒ์ดํ”„๋ผ์ธ ์ฒ˜๋ฆฌ ์šฉ์ด
  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ตํ™˜: ์ „์ฒด ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์ง€ ์•Š๊ณ  ์ค„ ๋‹จ์œ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ๋ฐ์ดํ„ฐ์…‹ ํฌ๋งท: ML ํ•™์Šต ๋ฐ์ดํ„ฐ, ๋ฒค์น˜๋งˆํฌ ๋ฐ์ดํ„ฐ์…‹ ๋“ฑ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ (์˜ˆ: JSON Lines์™€ ์‚ฌ์‹ค์ƒ ๋™์ผ)

NDJSON vs JSON Lines

NDJSON๊ณผ JSON Lines (.jsonl)๋Š” ์‚ฌ์‹ค์ƒ ๋™์ผํ•œ ํฌ๋งท์ด๋‹ค. ๋ฏธ๋””์–ด ํƒ€์ž…๊ณผ ํ™•์žฅ์ž๋งŒ ๋‹ค๋ฅด๋‹ค.


Connections

  • JSON Lines โ€” ์‚ฌ์‹ค์ƒ ๋™์ผ ํฌ๋งท, ํ™•์žฅ์žยท๋ฏธ๋””์–ด ํƒ€์ž…๋งŒ ์ƒ์ด
  • SSE (Server-Sent Events) โ€” SSE๋Š” HTTP ์ด๋ฒคํŠธ ํ”„๋กœํ† ์ฝœ(id, retry, event type ๋‚ด์žฅ), NDJSON์€ ํ”„๋กœํ† ์ฝœ ๋ฌด๊ด€ ์ˆœ์ˆ˜ ์ง๋ ฌํ™” ํฌ๋งท
  • Base64 ์ธ์ฝ”๋”ฉ โ€” JSON ๋‚ด ๋ฐ”์ด๋„ˆ๋ฆฌ ํ•„๋“œ๋ฅผ Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ NDJSON์— ์‹ค์„ ์ˆ˜ ์žˆ๋‹ค

Source Trail