<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>CSV on Dev TLDRLSS</title>
        <link>https://dev.tldrlss.com/ko/tags/csv/</link>
        <description>Recent content in CSV on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ko</language>
        <lastBuildDate>Sat, 01 Aug 2026 14:05:42 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/ko/tags/csv/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>JSONL 포맷이란 무엇인가? JSON 및 CSV와의 차이점과 AI 모델 미세조정에 JSONL이 필수인 이유!</title>
        <link>https://dev.tldrlss.com/ko/article/2026/08/jsonl-vs-json-csv-guide/</link>
        <pubDate>Sat, 01 Aug 2026 14:05:42 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/ko/article/2026/08/jsonl-vs-json-csv-guide/</guid>
        <description>&lt;img src="https://dev.tldrlss.com/global-assets/images/data/jsonl-intro-cover-1.jpg" alt="Featured image of post JSONL 포맷이란 무엇인가? JSON 및 CSV와의 차이점과 AI 모델 미세조정에 JSONL이 필수인 이유!" /&gt;&lt;p&gt;우리 모두 &lt;code&gt;JSON&lt;/code&gt;과 &lt;code&gt;CSV&lt;/code&gt;에는 익숙하지만, 수 GB에 달하는 대용량 &lt;code&gt;JSON&lt;/code&gt; 파일을 처리하다가 메모리가 폭발해 다운되거나, &lt;code&gt;CSV&lt;/code&gt;로 중첩된 다층 데이터를 기록할 때 이스케이프 문자로 고통받은 적이 있으신가요?&lt;/p&gt;
&lt;p&gt;최신 AI 학습 및 대용량 데이터 처리 분야에서 조용히 표준으로 자리 잡고 있는 데이터 포맷이 있습니다. 바로 &lt;strong&gt;JSONL(JSON Lines)&lt;/strong&gt; 입니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;JSONL의 핵심 가치: 기존 JSON의 스트리밍 읽기 불가와 CSV의 중첩 구조 미지원이라는 두 가지 단점을 완벽히 해결!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;jsonl이란-무엇인가-1분-만에-이해하는-한-줄에-하나의-json-핵심-정의&#34;&gt;JSONL이란 무엇인가? 1분 만에 이해하는 &amp;ldquo;한 줄에 하나의 JSON&amp;rdquo; 핵심 정의
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;JSONL&lt;/code&gt;의 풀네임은 &lt;code&gt;JSON Lines&lt;/code&gt;입니다(때로는 &lt;code&gt;NDJSON&lt;/code&gt;, 즉 &lt;code&gt;Newline Delimited JSON&lt;/code&gt;으로도 불립니다). 핵심 개념은 매우 명확합니다: &lt;strong&gt;각 줄이 하나의 독립적이고 완전한 JSON 객체&lt;/strong&gt;라는 점입니다.&lt;/p&gt;
&lt;p&gt;기존의 &lt;code&gt;JSON&lt;/code&gt; 파일에서는 최외곽에 거대한 대괄호 &lt;code&gt;[]&lt;/code&gt;가 모든 데이터를 감싸고 있으며, 객체 사이는 쉼표 &lt;code&gt;,&lt;/code&gt;로 구분해야 합니다. 반면 &lt;code&gt;JSONL&lt;/code&gt;은 최외곽 대괄호와 쉼표를 완전히 없애고 줄바꿈 기호 &lt;code&gt;\n&lt;/code&gt;를 사용하여 데이터를 구분합니다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://dev.tldrlss.com/global/common/data/jsonl-vs-json-csv-1.jpg&#34;width=&#34;1024&#34;height=&#34;1024&#34;srcset=&#34;https://dev.tldrlss.com/global/common/data/jsonl-vs-json-csv-1_hu_64d704071b051a58.jpg 480w, https://dev.tldrlss.com/global/common/data/jsonl-vs-json-csv-1_hu_21dfe6d4bedc9b3b.jpg 1024w&#34;loading=&#34;lazy&#34;alt=&#34;JSONL, JSON, CSV 데이터 포맷 비교&#34;
	
	class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;100&#34;data-flex-basis=&#34;240px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;3대-주요-데이터-포맷-비교&#34;&gt;3대 주요 데이터 포맷 비교
&lt;/h3&gt;&lt;p&gt;더욱 직관적으로 이해할 수 있도록 &lt;code&gt;JSONL&lt;/code&gt;, &lt;code&gt;JSON&lt;/code&gt;, &lt;code&gt;CSV&lt;/code&gt;를 함께 비교해 보겠습니다:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;데이터 포맷&lt;/th&gt;
          &lt;th&gt;레이아웃 구조&lt;/th&gt;
          &lt;th&gt;중첩 데이터 지원&lt;/th&gt;
          &lt;th&gt;스트리밍 읽기/쓰기&lt;/th&gt;
          &lt;th&gt;적합한 활용 시나리오&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;단일 계층 트리 구조, 한 번에 전체 로드 필요&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;네이티브 지원&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;어려움 (전체 파일 로드 필요)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Web API&lt;/code&gt; 전송, 설정 파일&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;2D 평면 테이블, 쉼표로 필드 구분&lt;/td&gt;
          &lt;td&gt;어려움 (이스케이프/인코딩 필요)&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;네이티브 지원&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Excel 보고서, 평면 데이터&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;한 줄에 하나의 독립 JSON, 줄바꿈으로 구분&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;네이티브 지원&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;매우 우수 (줄 단위 읽기 및 추가)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;AI 학습 데이터셋, 대용량 &lt;code&gt;Log&lt;/code&gt; 기록&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;왜-ai-모델-학습과-빅데이터-etl에서는-jsonl을-선호할까&#34;&gt;왜 AI 모델 학습과 빅데이터 ETL에서는 JSONL을 선호할까?
&lt;/h2&gt;&lt;p&gt;최근 &lt;code&gt;OpenAI&lt;/code&gt;, &lt;code&gt;Anthropic&lt;/code&gt; 등의 대형 언어 모델(LLM)이 부상함에 따라 &lt;code&gt;JSONL&lt;/code&gt;은 미세조정(Fine-tuning) 및 데이터셋 준비의 최선책으로 떠올랐습니다. 여기에는 두 가지 핵심 장점이 있습니다:&lt;/p&gt;
&lt;h3 id=&#34;1-극도로-낮은-메모리-점유율-streaming-스트리밍-처리-지원&#34;&gt;1. 극도로 낮은 메모리 점유율 (Streaming 스트리밍 처리 지원)
&lt;/h3&gt;&lt;p&gt;학습 데이터베이스가 50 GB에 달할 때, 기존 &lt;code&gt;JSON&lt;/code&gt; 파일 형태라면 프로그램이 50 GB 파일 전체를 메모리에 읽어와 구문 트리를 분석해야 하므로 즉시 메모리 초과(OOM)가 발생합니다.&lt;/p&gt;
&lt;p&gt;반면 &lt;code&gt;JSONL&lt;/code&gt;은 **줄 단위 스트리밍 읽기(Line-by-line Streaming)**를 지원합니다. 프로그램은 한 번에 한 줄(몇 KB 수준)만 읽어와 처리한 뒤 메모리를 해제하고 다음 줄을 읽어옵니다.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    subgraph TraditionalJSON[&amp;#34;기존 JSON 읽기 방식&amp;#34;]
        A1[&amp;#34;50 GB JSON 파일 읽기&amp;#34;] --&amp;gt; A2[&amp;#34;전체 파일 구문 트리 분석&amp;#34;]
        A2 --&amp;gt; A3[&amp;#34;메모리에 한 번에 50 GB 로드&amp;#34;]
        A3 --&amp;gt;|고위험| A4[&amp;#34;메모리 초과 다운 (OOM)&amp;#34;]
    end

    subgraph JSONLStreaming[&amp;#34;JSONL 스트리밍 읽기 방식&amp;#34;]
        B1[&amp;#34;50 GB JSONL 파일 열기&amp;#34;] --&amp;gt; B2[&amp;#34;1번째 줄 읽기 (5 KB)&amp;#34;]
        B2 --&amp;gt; B3[&amp;#34;단일 데이터 분석 및 처리&amp;#34;]
        B3 --&amp;gt; B4[&amp;#34;메모리 해제 후 다음 줄 읽기&amp;#34;]
        B4 --&amp;gt; B5[&amp;#34;안정적이고 효율적인 대용량 데이터 처리&amp;#34;]
    end
&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;대용량 데이터 처리에 있어 JSONL은 메모리 소비를 O(N)에서 O(1)로 줄여줍니다!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-락-없는-무제한-추가-지원-append-only-logging&#34;&gt;2. 락 없는 무제한 추가 지원 (Append-Only Logging)
&lt;/h3&gt;&lt;p&gt;분산 시스템이나 로그 수집 환경에서 파일 끝에 데이터를 추가하려는 경우:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;기존 &lt;code&gt;JSON&lt;/code&gt;: 파일 전체를 읽은 뒤 끝부분의 &lt;code&gt;]&lt;/code&gt;를 제거하고, 쉼표 &lt;code&gt;,&lt;/code&gt;를 붙인 후 새 데이터를 쓰고 다시 &lt;code&gt;]&lt;/code&gt;를 붙여야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSONL&lt;/strong&gt;: 파일 끝에 문자열과 줄바꿈 기호 &lt;code&gt;\n&lt;/code&gt;를 직접 추가(append)하기만 하면 쓰기가 완료됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-빅데이터-병렬-처리-parallel-processing&#34;&gt;3. 빅데이터 병렬 처리 (Parallel Processing)
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;JSONL&lt;/code&gt;은 각 줄이 독립된 JSON 객체이므로, 대용량 파일을 임의의 줄바꿈 위치에서 여러 블록으로 분할하여 여러 CPU 코어나 계산 노드로 보내 서로 방해 없이 병렬 연산을 수행할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&#34;개발자가-알아야-할-jsonl-5가지-엄격한-포맷-규칙&#34;&gt;개발자가 알아야 할 JSONL 5가지 엄격한 포맷 규칙
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;JSONL&lt;/code&gt;은 매우 유연하지만, 파서가 원활하게 읽을 수 있도록 공식 사양(&lt;code&gt;jsonlines.org&lt;/code&gt;)에서 5가지 엄격한 포맷 제약을 규정하고 있습니다:&lt;/p&gt;
&lt;h3 id=&#34;규격-상세-설명&#34;&gt;규격 상세 설명
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;규격 번호&lt;/th&gt;
          &lt;th&gt;엄격한 규칙 항목&lt;/th&gt;
          &lt;th&gt;설명 및 올바른 예시&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;규칙 1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;모든 줄은 유효한 JSON이어야 함&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;각 줄을 독립적으로 추출했을 때 표준 &lt;code&gt;JSON.parse()&lt;/code&gt;로 파싱 가능해야 합니다.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;규칙 2&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;이스케이프되지 않은 줄바꿈 금지&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;문자열 내에 줄바꿈이 포함된 경우 &lt;code&gt;\n&lt;/code&gt;으로 이스케이프해야 하며, &lt;strong&gt;다중 줄 배치는 금지&lt;/strong&gt;됩니다.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;규칙 3&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;최외곽 기호 사용 금지&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;최외곽 대괄호 &lt;code&gt;[]&lt;/code&gt; 사용이 엄격히 금지되며, 줄과 줄 사이에 &lt;strong&gt;쉼표 &lt;code&gt;,&lt;/code&gt;를 붙여서는 안 됩니다&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;규칙 4&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;BOM 없는 UTF-8 인코딩&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;엄격하게 &lt;code&gt;UTF-8&lt;/code&gt; 인코딩을 사용해야 하며, &lt;strong&gt;BOM 헤더를 포함해서는 안 됩니다&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;규칙 5&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;기본적으로 빈 줄 미포함&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;모든 줄은 유효한 데이터여야 하며, 파일의 마지막 줄에만 끝 빈 줄이 허용됩니다.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;실전-분석-안전성이-높은-jsonl-읽기-코드-작성-방법&#34;&gt;실전 분석: 안전성이 높은 JSONL 읽기 코드 작성 방법
&lt;/h2&gt;&lt;p&gt;실제 개발에서 &lt;code&gt;JSONL&lt;/code&gt;은 &lt;strong&gt;고정 스키마가 없는(Schema-less)&lt;/strong&gt; 특성을 가지므로, 줄마다 &lt;code&gt;Key&lt;/code&gt;가 완전히 다를 수 있습니다. 코드 파싱 시 다음 방어적 원칙을 준수하는 것이 좋습니다:&lt;/p&gt;
&lt;h3 id=&#34;방어적-코드-예시-python&#34;&gt;방어적 코드 예시 (Python)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;process_jsonl_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encoding&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line_num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;enumerate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;# 1. 빈 줄 자동 건너뛰기 (빈 줄로 인한 파싱 오류 방지)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loads&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;# 2. 방어적 값 가져오기: .get()을 사용하여 KeyError 방지&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;user_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Unknown&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;# 3. 필드 타입 식별 (다형성 데이터 처리)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;doc_type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Line &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line_num&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;doc_type&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; - &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JSONDecodeError&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Error parsing line &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line_num&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 읽기 실행&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;process_jsonl_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dataset.jsonl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;핵심 방어 팁: &lt;code&gt;strip()&lt;/code&gt;으로 양끝 공백을 제거하고, 키에 직접 접근하는 대신 &lt;code&gt;.get()&lt;/code&gt;을 사용하여 런타임 다운의 90% 이상을 방지하세요!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;jsonl-json-csv의-활용-시나리오-선택-가이드&#34;&gt;JSONL, JSON, CSV의 활용 시나리오 선택 가이드
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;JSONL&lt;/code&gt;의 강력한 기능을 확인한 후, 모든 데이터를 &lt;code&gt;JSONL&lt;/code&gt;로 바꿔야 할까요? 정답은: 사용 시나리오에 따라 다릅니다!&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;시나리오 요구사항&lt;/th&gt;
          &lt;th&gt;추천 포맷&lt;/th&gt;
          &lt;th&gt;이유 설명&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Web 프론트엔드/백엔드 API 전송&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;브라우저 기본 지원이 우수하며, 단일 전송 데이터량이 적절함.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;비개발자/마케팅 데이터 내보내기&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Excel&lt;/code&gt;로 직접 열어서 확인 가능.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;AI 모델 미세조정 (Fine-tuning)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;OpenAI&lt;/code&gt; / &lt;code&gt;Anthropic&lt;/code&gt; API 공식 지정 학습 포맷.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;시스템 대용량 Log 기록&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;쓰기 비용이 낮고, 무제한 추가 및 초저메모리 모니터링 지원.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;빅데이터 ETL 파이프라인&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;분산 분할 및 병렬 처리가 용이함.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;각 포맷의 특징을 파악하고 올바른 상황에 올바른 도구를 선택하면 데이터 처리 성능을 대폭 향상시킬 수 있습니다!&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://jsonlines.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JSON Lines Official Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://jsonlines.org/examples/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JSON Lines Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
