본문으로 바로가기

CSV ↔ JSON 변환 가이드: 엑셀을 API로 바꾸는 법

2026.03.302026.07.10 수정29분 읽기

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

목차

스프레드시트 데이터를 API로 보내야 하거나,
반대로 API 응답을 엑셀로 열어야 할 때마다 CSV ↔ JSON 변환이 필요합니다. 두 형식의 차이를 이해하고 변환 도구를 활용하면 복잡한 코딩 없이 몇 초 만에 처리할 수 있습니다. 다만 한글 인코딩과 쉼표·줄바꿈 이스케이프 같은 함정이 있어 원리 이해가 중요합니다.

이 글은 CSV·JSON 형식 비교, 상호 변환 방법, 한국에서 가장 흔한 인코딩 문제(EUC-KR vs UTF-8),
특수문자 이스케이프 규칙, 대용량 데이터 처리 패턴까지 한 번에 정리합니다.

CSV와 JSON이란?#

CSV(Comma-Separated Values)#

쉼표로 값을 구분하는 텍스트 형식입니다. RFC 4180이 비공식 표준이지만, 실제로는 도구마다 미세하게 다르게 처리합니다. 엑셀, 구글 시트에서 내보낼 때 가장 많이 쓰입니다.

이름,나이,도시
홍길동,30,서울
김철수,25,부산

특징:

  • 사람이 읽기 쉽고 용량이 작음
  • 데이터 구조가 단순한 표 형식에 적합
  • 중첩 구조(배열 속 객체 등) 표현 불가
  • 자료형 정보 없음(모든 값이 문자열)

JSON(JavaScript Object Notation)#

키-값 쌍으로 구성된 계층형 데이터 형식입니다. RFC 8259가 표준이며, REST API·웹 애플리케이션·설정 파일에서 사실상 표준입니다.

[
  { "이름": "홍길동", "나이": 30, "도시": "서울" },
  { "이름": "김철수", "나이": 25, "도시": "부산" }
]

특징:

  • 중첩 구조, 배열, 다양한 데이터 타입(string, number, boolean, null) 지원
  • API 통신·설정 파일에 널리 사용
  • 사람이 읽기는 CSV보다 약간 복잡
  • 표준 명세 명확

언제 어떤 형식을 쓰나?#

상황권장 형식이유
엑셀로 데이터 분석CSV직접 열기 가능
API 요청/응답JSON자료형·중첩 구조
데이터베이스 내보내기CSV단순 테이블
설정 파일JSON복잡한 옵션 트리
대용량 로그 데이터CSV(또는 JSON Lines)용량 효율
중첩 데이터 구조JSON표현력
빅데이터 ETLParquet/JSON Lines스트리밍 처리
비개발자 공유CSV엑셀 호환

변환 도구 사용법#

CSV → JSON#

  1. CSV 텍스트를 도구에 붙여넣기
  2. 첫 번째 행을 헤더(키)로 인식
  3. JSON 배열 형태로 변환 결과 확인
  4. 복사 또는 다운로드
입력 (CSV):
name,score,pass
Alice,92,true
Bob,45,false

출력 (JSON):
[
  { "name": "Alice", "score": "92", "pass": "true" },
  { "name": "Bob", "score": "45", "pass": "false" }
]

주의: CSV는 모든 값을 문자열로 처리합니다. 숫자나 불리언이 필요하다면 변환 후 파싱이 추가로 필요합니다.

JSON → CSV#

  1. JSON 배열을 도구에 붙여넣기
  2. 최상위 키들이 자동으로 헤더 행으로 변환
  3. 중첩 객체는 펼쳐지거나 문자열로 직렬화됨
  4. 다운로드 또는 복사 후 엑셀에 붙여넣기

자주 겪는 문제와 해결법#

1. 한글 인코딩 문제(EUC-KR vs UTF-8)#

엑셀에서 저장한 CSV를 열면 한글이 깨지는 경우가 많습니다.

원인: Microsoft Excel(특히 Windows 한글 버전)의 기본 CSV 인코딩이 EUC-KR/CP949인 반면,
대부분의 도구·웹은 UTF-8 기준으로 처리합니다.

해결법:

  • 엑셀 저장 시: "다른 이름으로 저장" → 형식 "CSV UTF-8(쉼표로 분리)" 선택
  • 메모장 활용: 메모장에서 열어 "다른 이름으로 저장" → 인코딩 "UTF-8" 선택
  • 코드로 변환: PowerShell이나 Python으로 인코딩 변환
# PowerShell
Get-Content .\input.csv -Encoding Default | Set-Content .\output.csv -Encoding UTF8

# Python
import codecs
with codecs.open("input.csv", "r", "cp949") as f_in, \
     codecs.open("output.csv", "w", "utf-8") as f_out:
    f_out.write(f_in.read())

BOM(Byte Order Mark) 이슈: 엑셀이 UTF-8 CSV를 정확히 열려면 파일 앞에 BOM(EF BB BF)이 있어야 합니다. UTF-8 BOM 없이 저장된 CSV는 한글이 깨질 수 있습니다.

2. 쉼표가 포함된 필드#

값 안에 쉼표가 있으면 필드 구분이 깨집니다.

잘못된 예: 서울,경기,인천,30세 이상,남성  (필드 5개)
올바른 예: "서울,경기,인천",30세 이상,남성  (필드 3개)

쉼표를 포함하는 필드는 큰따옴표(")로 감싸야 합니다. 변환 도구는 이 규칙을 자동으로 처리합니다.

3. 큰따옴표가 포함된 필드#

값 안에 큰따옴표가 있으면 큰따옴표 두 개("")로 이스케이프합니다.

원본: 그가 말하길 "안녕하세요"
CSV: "그가 말하길 ""안녕하세요"""

4. 줄바꿈이 포함된 텍스트#

셀 안에 줄바꿈이 있는 경우도 큰따옴표로 감싸는 것이 표준입니다.

"첫 번째 줄
두 번째 줄",다음필드

엑셀 셀에서 Alt+Enter로 줄바꿈한 텍스트를 CSV로 저장하면 자동으로 큰따옴표 처리됩니다.

5. JSON 배열이 아닌 경우#

JSON → CSV 변환은 최상위가 배열일 때 가장 자연스럽게 동작합니다. 단일 객체({})는 1행 CSV로 변환하거나, 중첩 구조를 평탄화해야 합니다.

변환 어려움:
{
  "users": [
    { "id": 1, "name": "홍길동" }
  ],
  "meta": { "total": 1 }
}

해결: users 배열만 추출
[{ "id": 1, "name": "홍길동" }]

6. 중첩 객체 평탄화#

입력:
[
  { "id": 1, "user": { "name": "홍길동", "age": 30 } }
]

출력 옵션 A (평탄화):
id,user.name,user.age
1,홍길동,30

출력 옵션 B (JSON 문자열):
id,user
1,"{""name"":""홍길동"",""age"":30}"

대부분의 변환 도구는 옵션 A(점 표기 평탄화)를 기본값으로 사용합니다.

7. null·undefined 처리#

JSON의 null은 CSV에서 빈 칸으로 변환됩니다. 데이터 분석 시 빈 값이 진짜 빈 값인지 누락된 값인지 구분이 어렵습니다.

입력: { "name": "홍길동", "phone": null }
CSV:  홍길동,

데이터 정제 시 null을 명시적으로 "NULL" 또는 빈 문자열 ""로 처리하는 것이 좋습니다.

자료형 자동 추론(Auto Type)#

일부 변환 도구는 CSV → JSON 시 숫자·불리언을 자동 추론합니다.

입력:
name,age,active
Alice,30,true
자동 추론 ON:
[{ "name": "Alice", "age": 30, "active": true }]

자동 추론 OFF:
[{ "name": "Alice", "age": "30", "active": "true" }]

자동 추론은 편리하지만 의도치 않은 변환이 일어날 수 있습니다(예: 우편번호 "01234"가 숫자 1234가 됨). 정확성이 중요한 데이터는 OFF로 두고 후처리합니다.

대용량 데이터 처리#

JSON Lines(NDJSON) 형식#

대용량 데이터는 표준 JSON 배열 대신 JSON Lines를 사용합니다. 한 줄에 하나의 JSON 객체로, 스트리밍 처리에 적합합니다.

{"id": 1, "name": "홍길동"}
{"id": 2, "name": "김철수"}
{"id": 3, "name": "이영희"}

빅데이터 도구(Spark·Hive·Athena 등), 로그 파이프라인, AI 모델 학습 데이터 형식의 표준입니다.

메모리 효율 변환#

수백 MB 이상의 CSV를 한 번에 메모리에 로드하면 OOM(Out of Memory)이 발생합니다. 스트리밍 변환 라이브러리를 활용합니다.

  • Node.js: fast-csv, csv-parser
  • Python: pandas.read_csv(chunksize=10000)
  • Go: encoding/csv(라인별 스캔)

브라우저 기반 변환 도구는 보통 수 MB까지가 안정적입니다. 그 이상은 서버 측 또는 명령줄 도구를 사용합니다.

보안: CSV Injection#

CSV 파일에 =, +, -, @로 시작하는 값을 넣으면 엑셀에서 수식으로 해석되어
의도치 않은 동작을 합니다(CSV Injection / Formula Injection).

악의적 예:
name,formula
Alice,=cmd|'/c calc'!A1

엑셀로 열면 계산기가 실행될 수 있습니다(설정에 따라 차단 가능). 사용자 입력을 CSV로 내보낼 때는 다음 처리가 필요합니다.

  • 첫 글자가 =, +, -, @이면 앞에 작은따옴표(') 추가
  • 또는 큰따옴표로 감싸고 첫 글자 앞 공백 추가

OWASP가 권장하는 보안 처리이며, 사용자 데이터를 CSV로 내보내는 모든 서비스에 적용해야 합니다.

라이브러리 비교(개발자용)#

JavaScript / TypeScript#

라이브러리특징권장 상황
papaparse가장 인기, 다양한 옵션일반 웹
csv-parserNode.js 스트리밍대용량
fast-csv스트리밍 + PromiseNode.js 서버
JSON.parse / JSON.stringify내장작은 JSON

Python#

라이브러리특징권장 상황
csv(내장)표준, 충분히 강력일반
pandas.read_csv데이터 분석용분석·통계
polars최신, 빠름대용량

예시(Python pandas)#

import pandas as pd

# CSV → JSON
df = pd.read_csv("data.csv", encoding="utf-8")
df.to_json("data.json", orient="records", force_ascii=False)

# JSON → CSV
df = pd.read_json("data.json")
df.to_csv("data.csv", index=False, encoding="utf-8-sig")  # BOM 포함

실무 활용 예시#

마케팅 담당자#

구글 시트의 고객 데이터 → CSV 내보내기 → JSON 변환 → CRM API 업로드

개발자#

API 테스트 결과(JSON) → CSV 변환 → 엑셀로 열어 기획팀에 전달

데이터 분석가#

데이터베이스 쿼리 결과(CSV) → JSON 변환 → 프론트엔드 차트 라이브러리에 바로 사용

QA 엔지니어#

테스트 데이터(CSV) → JSON 변환 → API 자동화 테스트 input

자주 묻는 질문#

Q. 엑셀에서 직접 JSON으로 저장할 수는 없나요?

A. 엑셀 자체에는 JSON 내보내기 기능이 기본 제공되지 않습니다. CSV로 저장 후 변환 도구를 거치는 방식이 일반적입니다. Microsoft 365 Excel은 Power Query를 통해 JSON 임포트/익스포트가 가능합니다.

Q. JSON 파일을 엑셀에서 열려면 어떻게 하나요?

A. 두 가지 방법이 있습니다.

  1. JSON → CSV 변환 후 엑셀로 열기
  2. 엑셀의 데이터 → JSON에서 가져오기(Get Data → From File → From JSON)

Q. 큰 CSV를 변환하려면 어떻게 해야 하나요?

A. 브라우저 기반 도구는 보통 5–10MB까지 안정적입니다. 그 이상은 명령줄(csvkit, jq) 또는 Python 스크립트를 권장합니다.

Q. CSV의 구분자가 쉼표가 아닌 경우(세미콜론·탭)는?

A. CSV의 변형으로 TSV(Tab-Separated Values), SSV(Semicolon)가 있습니다. 변환 도구에서 구분자 옵션을 변경하거나, 텍스트 에디터에서 일괄 치환 후 처리합니다. 유럽 일부 국가는 쉼표를 소수점에 사용해 세미콜론을 구분자로 씁니다.

Q. 한글이 깨진 CSV를 복구할 수 있나요?

A. 인코딩이 명확하면 가능합니다. 텍스트 에디터(VS Code, Notepad++)에서 인코딩을 EUC-KR/CP949로 다시 열어 보세요. 한 번 잘못된 인코딩으로 저장된 파일은 복구가 어렵습니다.

Q. JSON에 주석을 넣을 수 있나요?

A. 표준 JSON은 주석을 지원하지 않습니다. 주석이 필요하면 JSON5나 JSONC(JSON with Comments) 같은 변형을 사용합니다. CSV는 일부 도구에서 #으로 시작하는 주석 행을 지원합니다.

CSV ↔ JSON 변환 도구 활용#

CSV ↔ JSON 변환 도구에 텍스트를 붙여넣으면 양방향 변환을 즉시 처리합니다. UTF-8 인코딩 기본, 쉼표·줄바꿈 이스케이프 자동 처리, 대용량 텍스트도 빠르게 변환합니다.

텍스트 작업이 더 필요하다면 글자 수 세기 가이드에서 분량 관리를,
대소문자 변환 가이드에서 명명 규칙 변환을,
텍스트 비교(Diff) 활용법에서 데이터 변경 추적을 확인할 수 있습니다.

이런 글도 읽어보세요

전체 글 보기

관련 도구