본문 바로가기

로딩 중...


CSV 편집기

1. CSV 파일을 커스터마이징 하고 싶어요

서비스 개발을 하다 보면 공공 API를 연동해야 할 때가 종종 있습니다. 그런데 API를 요청하고 내 서비스에 연동하려면 승인 절차를 밟아야 했고, 그 과정이 꽤 번거롭게 느껴졌습니다. 그래서 차라리 CSV 파일을 직접 다운로드받아 처리하기로 했습니다.

그런데 막상 CSV 파일을 열어보니 수십 개의 필드가 빼곡히 들어차 있었습니다. 정작 내가 필요한 필드는 서너 개에 불과했고, 최종적으로는 JSON 형태로 변환해서 사용하고 싶었습니다. 결국 원하는 필드만 골라내는 전용 파서를 직접 작성해야 했는데, 매번 이 과정을 반복하는 것이 너무 비효율적으로 느껴졌습니다.

그래서 고민했습니다 — 어떤 CSV 파일이든 온라인에서 열어 원하는 필드만 빠르게 뽑아낼 수 있다면 어떨까? 그 고민 끝에 CSV를 빠르게 가공할 수 있는 이 유틸리티 도구를 만들게 되었습니다. 이 도구는 그 과정을 붙여넣기 → 필드 선택 → 포맷 변환이라는 세 단계로 줄여, 비개발자도 즉시 데이터를 정제할 수 있는 환경을 제공합니다.
 

그래서 만든 도구입니다. CSV를 붙여넣으면 필드를 자동으로 인식하고, 클릭 몇 번으로 불필요한 열을 제거한 뒤, JSON·YAML·XLSX 등 원하는 포맷으로 바로 변환해 주는 — 엑셀 없이, 코드 없이, 브라우저 하나로 끝나는 데이터 전처리 도구입니다.

 

2. 도구 사용법 및 가이드

복잡한 텍스트를 복사하여 붙여넣기만 하면 즉시 표 형태의 데이터를 시각화하고 편집할 수 있습니다.

CSV 편집기 사용법1

a. 데이터 입력 및 추출

  • 준비된 쉼표로 구분된 원본 텍스트 데이터를 좌측 입력창에 붙여넣습니다. 입력된 값은 즉각적으로 시스템에 인식되며, 첫 번째 행을 기준으로 각 열의 필드 목록이 자동으로 추출되어 중앙 화면에 나열됩니다.
     

CSV 편집기 사용법2

b. 불필요한 필드 제거 처리

  • 중앙의 필드 관리 창에서 추출된 데이터의 속성 이름 목록을 확인합니다. 결과물에서 제외하고 싶은 항목 우측의 엑스 모양 버튼을 클릭하면 해당 열이 비활성화 처리됩니다. 실수로 지웠거나 다시 복구하고 싶다면 되돌리기 아이콘을 눌러 손쉽게 원상복구합니다.
     

CSV 편집기 사용법3

c. 포맷 변환 및 저장

  • 우측 결과 화면에서 JSON, YAML, CSV 등 원하는 최종 데이터 형식을 선택합니다. 실시간으로 변환된 텍스트를 확인한 뒤 클립보드에 복사하거나, 하단의 다운로드 기능을 통해 엑셀 파일(XLSX) 형태로 내 컴퓨터에 즉시 저장합니다.

 

3. CSV를 다차원 데이터로 표현하기

단순히 CSV 파일을 그대로 출력하는 것만으로도 유용하지만, 이 도구는 JSON, YAML처럼 다차원 구조를 지원하는 포맷으로의 변환 기능도 제공하고 있습니다. 이를 위해 중첩(nested) 구조를 어떻게 표현할 것인지가 핵심 과제였습니다. 현재는 필드명을 people.name과 같은 점(dot) 표기법으로 작성하면 최대 3차원 깊이까지 중첩 구조를 표현할 수 있습니다. 그 이상의 차원이나 배열 구조에 대한 지원은 아직 개발 중인 단계입니다.

a. CSV 파일의 기본 구조

CSV는 2차원 데이터만 표현이 가능합니다. 엑셀이라고 생각하면 편한데, 행과 열로만 데이터를 표기할 수 있습니다.

name,email,age,city
김개발,kim@dev.com,28,서울
이디자인,lee@design.kr,32,부산
박마케팅,park@mkt.io,25,대전
구성 요소설명예시
헤더 행첫 번째 줄 — 각 열의 이름(필드명)을 정의name,email,age,city
데이터 행두 번째 줄부터 — 실제 값이 쉼표로 구분되어 나열김개발,kim@dev.com,28,서울
구분자필드를 나누는 문자 (기본: 쉼표),
줄바꿈행을 나누는 문자 (\n 또는 \r\n)개행

b. 다차원 데이터로 변환

실무에서는 단순한 2차원 표 형태를 넘어, 데이터를 다차원 구조로 변환해야 하는 경우가 빈번합니다. 대표적으로 JSON이 그렇습니다. 앞서 언급한 것처럼 공공기관에서 발급받은 CSV 데이터를 서비스에 활용하기 위해 JSON으로 변환하는 작업이 대표적인 사례입니다. JSON은 하나의 값 안에 또 다른 객체나 배열을 담을 수 있어, CSV로는 표현하기 어려운 계층적 데이터 구조를 자연스럽게 나타낼 수 있습니다.

c. JSON 중첩 구조 변환

JSON의 중첩 구조를 표현하려면 평면적인 CSV 헤더에 계층 정보를 인코딩해야 합니다. 이 도구에서는 점(dot) 표기법을 적용하여 이 문제를 해결했습니다. 예를 들어 헤더를 address.city, address.zipcode로 작성하면, 변환 결과에서 address 객체 안에 cityzipcode가 중첩된 형태로 출력됩니다.

name,address.city,address.zipcode
김개발,서울,06100
[
  {
    "name": "김개발",
    "address": {
      "city": "서울",
      "zipcode": "06100"
    }
  }
]

향후 배열 표현(items[0].name 등)과 더 깊은 차원의 중첩 구조를 지원하기 위한 확장 파서를 개발할 예정입니다.

4. 실무에서 CSV 편집기를 만나는 순간들

요즘에는 개발자뿐만 아니라 마케터, 기획자, 데이터 분석가 등 다양한 직군에서 직접 데이터를 다루는 일이 많아졌습니다. 그만큼 CSV 파일을 열어 편집해야 하는 순간도 자연스럽게 늘어나고 있습니다. 아래에 실무에서 자주 마주치는 대표적인 사례들을 정리했습니다.

a. 마케팅 고객 연락처 정리

이메일 캠페인이나 문자 발송을 위해 추출된 고객 데이터에서, 이름과 연락처 등 필수 열만 남기고 가입일·내부 ID 등 불필요한 열을 빠르게 제거하여 가벼운 주소록을 완성할 때 사용합니다.

b. 백엔드 로그 → JSON 테스트 데이터 변환

서버에서 SELECT * FROM users 결과를 CSV로 내보낸 뒤, 프론트엔드 목(mock) 데이터로 활용하기 위해 JSON 배열 형태로 즉시 변환할 때 유용합니다. 별도의 파싱 스크립트 없이 붙여넣기 한 번으로 해결됩니다.

c. 공공데이터 분석 전처리

공공데이터 포털에서 받은 수십 개 열짜리 통계 파일에서 분석에 필요한 3~4개 열만 추출하고, 정제된 결과를 XLSX로 저장하여 보고서 작성에 바로 투입할 때 적합합니다.

d. 다국어 번역 키 관리

i18n(국제화) 작업에서 번역 키와 각 언어별 텍스트를 CSV로 관리하는 팀이 많습니다. 번역가에게 전달할 때 특정 언어 열만 남기고 나머지를 제거하는 용도로 활용됩니다.

e. 스프레드시트 간 포맷 변환 중계

Google Sheets에서 내보낸 CSV를 Notion 데이터베이스에 올리기 위해 JSON으로 변환하거나, 반대로 API 응답 JSON을 엑셀에서 열기 위해 CSV로 바꾸는 중간 변환 허브 역할을 합니다.

직군에 관계없이 데이터를 다루는 모든 분들이 이 도구를 통해 번거로운 전처리 과정에서 벗어나셨으면 합니다. 개발자가 아니더라도 클릭 몇 번이면 원하는 결과를 얻을 수 있도록 만들었으니, 부담 없이 사용해 보시기 바랍니다.
 

4. 인코딩과 구분자

CSV 파일을 열었는데 한글이 전부 깨져서 알아볼 수 없는 경험, 한 번쯤 있으시죠? 저도 공공기관에서 받은 CSV 파일을 열었을 때 컬럼명이 모두 깨져 있어서 데이터를 전혀 사용할 수 없었던 적이 있습니다. 한참을 헤매다 AI에게 물어보니 EUC-KR 인코딩을 적용하라는 답변을 받고 겨우 해결할 수 있었습니다. 이런 문제를 매번 직접 해결하는 것은 번거롭기 때문에, 이 도구에는 인코딩 변환 기능을 내장했습니다. 아래는 CSV를 다룰 때 대표적으로 마주칠 수 있는 인코딩 이슈들입니다.

a. 문자 인코딩 이슈

한글이 포함된 CSV를 다룰 때 가장 흔하게 마주치는 문제입니다.

인코딩특징주의사항
UTF-8국제 표준, 대부분의 웹 서비스가 사용엑셀에서 열면 한글이 깨질 수 있음
UTF-8 BOMUTF-8 + 바이트 순서 표시(BOM) 헤더엑셀 호환성이 가장 좋음
EUC-KR한국어 레거시 인코딩공공기관·은행 데이터에서 자주 등장
CP949Windows 한국어 확장EUC-KR의 상위 호환
# ✅ 인코딩 확인 방법 (macOS / Linux)
file -I data.csv
# → data.csv: text/csv; charset=utf-8

# ✅ EUC-KR → UTF-8 변환
iconv -f EUC-KR -t UTF-8 data.csv > data_utf8.csv

b. 구분자 변형

"CSV"라고 이름이 붙었지만, 실제로는 쉼표가 아닌 구분자를 사용하는 파일도 매우 흔합니다.

구분자확장자 관례대표 사례
쉼표 (,).csv일반적인 CSV
탭 (\t).tsv엑셀 복사-붙여넣기, 구글 시트
세미콜론 (;).csv유럽권 엑셀 (소수점에 쉼표 사용)
파이프 (|).csv금융·의료 데이터

Note

이 도구는 쉼표를 기본 구분자로 사용합니다. 탭이나 세미콜론으로 구분된 데이터라면, 텍스트 편집기에서 해당 기호를 쉼표로 일괄 치환한 뒤 입력하면 정상적으로 파싱됩니다.

 

5. 자주 발생하기 쉬운 실수들 모음

CSV 파일을 다루다 보면 예상치 못한 파싱 오류나 데이터 깨짐을 마주치는 경우가 종종 있습니다. 아래에 자주 발생하는 이슈들을 정리해 두었으니, 문제가 생겼을 때 해당 항목을 찾아 적용해 보시기 바랍니다.
CSV는 단순해 보이지만 의외로 함정이 많습니다. 가장 흔한 문제들과 해결법을 정리합니다.

a. 열 개수가 맞지 않아 파싱이 어긋나는 경우

원인: 데이터 값 안에 이스케이프 처리되지 않은 쉼표가 포함되어 있기 때문입니다.

// ❌ 주소에 쉼표가 포함되어 열이 밀림
이름,주소,전화번호
김개발,서울특별시, 강남구,010-1234-5678
// → "서울특별시"와 " 강남구"가 별도 열로 인식됨

// ✅ 쉼표가 포함된 값을 큰따옴표로 감싸기
이름,주소,전화번호
김개발,"서울특별시, 강남구",010-1234-5678

b. 엑셀에서 CSV를 열었더니 한글이 깨지는 경우

원인: 엑셀은 CSV를 열 때 기본적으로 시스템 로캘 인코딩을 사용합니다. UTF-8 파일에 BOM(Byte Order Mark)이 없으면 한글이 깨집니다.

// ❌ BOM 없는 UTF-8 — 엑셀에서 한글 깨짐
const csv = "이름,이메일\n김개발,kim@dev.com";
const blob = new Blob([csv], { type: 'text/csv' });

// ✅ UTF-8 BOM 추가 — 엑셀에서 한글 정상 표시
const BOM = '\uFEFF';
const csv = "이름,이메일\n김개발,kim@dev.com";
const blob = new Blob([BOM + csv], { type: 'text/csv;charset=utf-8' });

c. 숫자 앞의 0이 사라지는 경우

원인: 엑셀이 전화번호나 우편번호 같은 값을 숫자로 자동 변환하면서 앞자리 0을 제거합니다.

// ❌ 엑셀에서 열면 01012345678 → 1012345678
전화번호
01012345678

// ✅ 값을 ="값" 형태로 감싸면 엑셀이 텍스트로 인식
전화번호
="01012345678"

Important

이 문제는 CSV 파일 자체의 문제가 아니라 엑셀의 자동 변환 동작 때문입니다. 원본 CSV를 텍스트 편집기로 열면 값이 정상적으로 보입니다. 데이터 가공 시에는 원본을 기준으로 작업하세요.

d. 줄바꿈이 포함된 값이 행을 깨트리는 경우

원인: 셀 안에 줄바꿈(\n)이 포함된 값이 큰따옴표로 감싸져 있지 않으면, 파서가 새로운 행으로 인식합니다.

# ❌ 줄바꿈이 행을 분리함
data = """이름,메모
김개발,첫 번째 줄
두 번째 줄"""
# → 3행으로 인식 (의도: 2행)

# ✅ 줄바꿈 포함 값을 큰따옴표로 감싸기
data = """이름,메모
김개발,"첫 번째 줄
두 번째 줄"
"""
# → 2행으로 정상 인식

e. 공통 패턴: CSV의 함정은 대부분 "특수 문자 이스케이프"

위 트러블슈팅 사례들의 공통점이 보이시나요? CSV에서 발생하는 파싱 오류는 거의 대부분 값 안에 구분자(쉼표), 줄바꿈, 큰따옴표 같은 특수 문자가 포함되었을 때 적절한 이스케이프 처리가 되지 않아 발생합니다. "값에 특수 문자가 있으면 큰따옴표로 감싼다" — 이 한 가지 원칙만 기억하면 대부분의 문제를 예방할 수 있습니다.

 

6. 생각해볼 거리

CSV가 50년 넘게 살아남은 이유는 뭘까요?

JSON, XML, Parquet, Avro 등 더 풍부한 표현력을 가진 포맷들이 계속 등장했지만, CSV는 여전히 건재합니다. 핵심 이유는 "텍스트 편집기로 열 수 있다"는 접근성입니다. 특별한 파서나 라이브러리 없이도 사람이 눈으로 읽고, 손으로 편집할 수 있다는 점이 비개발자를 포함한 모든 직군에서 데이터를 교환하는 최소 공통 분모 역할을 하고 있습니다. 기술의 복잡도가 높아질수록 오히려 가장 단순한 포맷의 가치가 빛나는 역설적인 사례입니다.

대용량 CSV를 브라우저에서 처리해도 괜찮을까요?

브라우저 탭은 일반적으로 수백 MB의 메모리를 사용할 수 있으므로, 수만 행 수준까지는 무리 없이 처리할 수 있습니다. 하지만 수십만 행 이상의 데이터는 브라우저 메모리 한계에 부딪힐 수 있습니다. 이런 경우에는 pandas(Python)나 csvkit(CLI) 같은 전문 도구를 사용하는 것이 적합합니다. 이 도구는 "빠른 전처리와 포맷 변환"에 최적화되어 있으므로, 대용량 데이터의 전체 분석보다는 샘플 데이터 확인이나 필드 구조 파악 용도로 활용하는 것을 권장합니다.

CSV를 DB에 직접 임포트해도 될까요?

MySQL의 LOAD DATA INFILE이나 PostgreSQL의 COPY 명령은 CSV를 직접 테이블에 밀어 넣을 수 있어 매우 빠릅니다. 하지만 실무에서는 반드시 전처리 단계를 거쳐야 합니다. CSV는 데이터 타입 정보가 없으므로 날짜 형식이 다르거나, NULL 값이 빈 문자열로 들어오거나, 중복 키가 존재하는 등의 문제가 발생합니다. 스테이징 테이블에 먼저 적재한 뒤, 검증 쿼리를 통과한 데이터만 본 테이블로 이동하는 ETL 패턴이 안전합니다.

 

브라우저 탭 하나로 CSV 데이터의 불필요한 열을 제거하고 원하는 포맷으로 즉시 변환할 수 있습니다 — 엑셀을 열거나 스크립트를 짜는 마찰이 사라집니다. 그것만으로도 이 도구의 역할은 충분하다고 생각합니다.

자주 묻는 질문

데이터를 변환할 때 행의 개수 제한이 있나요?

웹 브라우저의 성능 범위 내에서 제한 없이 처리할 수 있습니다. 다만 수만 줄 이상의 지나치게 방대한 빅데이터를 한 번에 입력할 경우, 파싱 및 화면 렌더링 과정에서 기기 환경에 따라 일시적인 지연이 발생할 수 있으니 적당한 단위로 분할하여 작업하는 것을 권장합니다.

보안상 민감한 데이터를 입력해도 안전한가요?

네, 매우 안전합니다. 입력하신 모든 정보와 필터링 과정, 파일 생성 작업은 전적으로 사용자의 웹 브라우저 로컬 환경 내에서만 이루어집니다. 외부 서버나 데이터베이스로 전송되지 않으므로 안심하고 실무에 활용하실 수 있습니다.