streaming real-time ndjson sse websockets data-formats

스트리밍 및 실시간 데이터 형식 완벽 가이드: NDJSON, SSE 등

NDJSON, JSON Lines, Server-Sent Events (SSE) 등 스트리밍 데이터 형식을 심층 분석합니다. 웹 애플리케이션에서 실시간 데이터를 효율적으로 처리하는 법을 배워보세요.

2026-04-15

스트리밍 및 실시간 데이터 형식: 실무 가이드

현대 웹 개발에서 데이터는 더 이상 정적인 파일이나 단일 API 응답에 머물지 않습니다. 실시간 업데이트, 로그, 대규모 데이터셋은 스트리밍 형식을 필요로 합니다. 이는 전체 페이로드가 준비될 때까지 기다리는 대신, 데이터가 도착하는 즉시 전송하고 처리하는 방식입니다. 이 가이드에서는 스트리밍 및 실시간 통신을 위한 가장 대중적인 형식들을 살펴봅니다.

1. 행 구분 형식 (NDJSON & JSON Lines)

객체 리스트(데이터베이스 레코드나 로그 엔트리 등)를 스트리밍할 때, 표준 JSON 배열 [...]은 파서가 닫는 괄호 ]가 올 때까지 처리를 시작할 수 없다는 문제가 있습니다. 행 구분 형식은 이를 해결합니다.

NDJSON (Newline Delimited JSON)

NDJSON은 각 행이 유효한 JSON 객체인 데이터를 저장하거나 스트리밍하기 위한 표준입니다.

  • 작동 원리: {"id":1}\n{"id":2}\n...
  • 핵심 장점: 개행 문자 \n을 수신하는 즉시 각 객체를 개별적으로 파싱하고 처리할 수 있습니다.
  • 사용 사례: 대규모 데이터베이스 내보내기, 구조화된 로깅, 데이터 파이프라인.

JSON Lines (JSONL)

JSON Lines는 본질적으로 NDJSON과 동일합니다. 각 행이 유효한 JSON 값인 텍스트 기반 형식입니다.

  • 핵심 장점: grep, awk, sed와 같은 Unix 도구와의 뛰어난 호환성.
  • 사용 사례: AI/ML 학습용 데이터셋 저장 및 로그 분석.

CSV 스트림 (CSV Stream)

NDJSON과 마찬가지로, CSV 스트림은 콤마로 구분된 값을 한 줄씩 전송합니다.

  • 핵심 장점: 극도로 낮은 오버헤드.
  • 사용 사례: 수백만 행의 데이터를 실시간으로 Excel 호환 형식으로 내보내기.

2. Server-Sent Events (SSE)

**Server-Sent Events (SSE)**는 서버가 HTTP를 통해 웹 페이지로 데이터를 푸시할 수 있게 해주는 표준입니다. WebSockets와 달리 서버에서 클라이언트로의 단방향 통신 채널입니다.

  • 작동 원리: 서버가 HTTP 연결을 계속 열어두고 특정 text/event-stream 형식으로 데이터를 보냅니다.
  • 프로토콜 형식:
    event: user-update
    data: {"name": "Alice"}
    
    event: chat-message
    data: "Hello world!"
    
  • 핵심 장점: 자동 재연결, 가볍고 표준 HTTP/HTTPS를 통해 작동함.
  • 사용 사례: 실시간 스포츠 점수, 주가 정보 티커, 소셜 미디어 알림.

3. WebSockets 및 메시지 형식

SSE가 단방향 스트리밍인 반면, WebSockets는 전이중(양방향) 통신 채널을 제공합니다.

WebSocket 메시지 형식

WebSockets는 전송 계층만 제공하므로 개발자가 메시지 형식을 직접 선택해야 합니다.

  • JSON: 사용 편의성 덕분에 가장 일반적인 선택입니다.

  • 바이너리 (Protobuf/MessagePack): 저지연 및 작은 페이로드 크기가 중요할 때 사용됩니다.

  • 커스텀 텍스트 프로토콜: 간단한 명령을 처리할 때 가끔 사용됩니다.

  • 사용 사례: 실시간 협업 편집(Google Docs 등), 온라인 게임, 채팅 애플리케이션.


스트리밍 접근 방식 비교

형식 / 기술 방향 오버헤드 재연결 최적 용도
NDJSON / JSONL 단방향 낮음 해당 없음 (파일/스트림) 로그, 데이터 내보내기
SSE 서버 -> 클라이언트 매우 낮음 자동 실시간 대시보드
WebSockets 양방향 중간 수동 대화형 앱
CSV 스트림 단방향 최소 해당 없음 대규모 보고서 생성

FAQ: 자주 묻는 질문

Q: 스트리밍에 왜 JSON 배열을 그냥 사용하지 않나요?

A: 표준 JSON 파서는 "전부 아니면 전무" 방식입니다. 배열 전체가 닫히기 전까지는 객체를 반환할 수 없습니다. NDJSON은 "점진적" 파싱을 가능하게 하여 메모리를 절약하고 지연 시간을 줄여줍니다.

Q: 언제 WebSockets 대신 SSE를 사용해야 하나요?

A: 서버에서 클라이언트로의 알림과 같이 단방향 푸시만 필요한 경우 SSE를 사용하세요. SSE는 구현이 더 쉽고, 연결 끊김을 자동으로 처리하며, WebSockets보다 방화벽 친화적입니다.

Q: Node.js에서 대용량 NDJSON 파일을 어떻게 처리하나요?

A: readline과 같은 스트리밍 파서나 전용 NDJSON 라이브러리를 사용하세요. 이를 통해 수 기가바이트의 데이터도 아주 적은 양의 메모리만 사용하여 처리할 수 있습니다.

관련 도구 (Tool3M)