역사 수업: .csv 파일이란? Excel이 파일을 열 때 데이터를 바꾸는 이유
쉼표로 구분된 값 — 1970년대 FORTRAN과 초기 스프레드시트에서 자라났고, 2005년 RFC 4180 전까지 문서화된 적이 없으며, 스프레드시트가 텍스트의 의미를 추측할 때마다 지금도 앞자리 0과 유전자 이름을 잃어버리는 일반 텍스트 표.

TL;DR
.csv 파일에는 쉼표로 구분된 값(comma-separated values)이 들어 있습니다. 표를 일반 텍스트로 적은 것으로, 한 줄에 레코드 하나, 필드 사이에는 쉼표를 두고, 쉼표·큰따옴표·줄 바꿈이 들어 있는 필드는 큰따옴표로 감쌉니다. 이 발상은 PC보다 오래되었습니다. 1972년에 이미 IBM의 FORTRAN 컴파일러가 단말기와 천공 카드에서 쉼표로 구분된 입력을 읽었고, 1983년에는 스프레드시트 프로그램이 .CSV 확장자로 파일을 저장하고 있었습니다. 그러나 규칙이 공식적으로 적힌 것은 2005년 10월 RFC 4180이 처음이며, 이때 MIME 유형 text/csv도 등록되었습니다. CSV에는 열 형식도, 수식도, 인코딩 표시도 없으므로 파일을 여는 프로그램은 모두 추측해야 합니다. 앞자리 0이 사라지고, 유전자 이름이 날짜가 되고, 때로는 파일 전체가 한 열에 들어가 버리는 것은 바로 Excel의 추측 때문입니다.
.csv 파일이란?
CSV를 메모장에서 열어 보면 숨겨진 것이 하나도 없습니다. 텍스트 줄이 이어지고, 한 줄이 레코드 하나, 쉼표마다 열이 바뀝니다. 쉼표를 담아야 하는 필드는 큰따옴표로 감싸고, 그 안의 큰따옴표는 두 번 씁니다. 이것이 형식의 전부입니다. 머리글 영역도, 열 형식 목록도, 수식도, 서식도 없고, 어떤 프로그램이 써 넣은 값만 있습니다. 이 단순함 덕분에 거의 모든 데이터베이스, 스프레드시트, 회계 프로그램, 은행, 프로그래밍 언어가 CSV를 읽고 쓸 수 있으며, 지금도 대부분의 데이터 내보내기와 가져오기에서 최후의 공통 형식으로 쓰입니다.
Excel에서 CSV가 엉망이 되는 이유는?
CSV는 자기 값이 무엇인지 알려 줄 수 없으므로 Excel이 스스로 결정합니다. Microsoft 문서에는 텍스트를 입력하거나 붙여 넣거나 불러올 때 Excel이 기본으로 적용하는 자동 변환이 나와 있습니다. 앞자리 0을 지우고 나머지를 숫자로 바꾸고(00123이 123이 되어 우편번호나 사번의 첫 자리가 사라짐), 긴 숫자는 앞 15자리만 남기고 지수 표기로 보여 줄 수 있으며(카드 번호나 계좌번호의 마지막 자리가 0이 됨), 문자 E 앞뒤의 숫자를 지수로 읽고(123E5가 1.23E+07이 됨), JAN1처럼 날짜처럼 보이는 텍스트를 날짜로 바꿉니다. 그 뒤 시트를 다시 CSV로 저장하면 변환된 값이 기록됩니다.
두 번째 함정은 구분 기호입니다. Excel은 CSV를 저장하거나 열 때 Windows 지역 설정의 목록 구분 기호를 사용합니다. 유럽 대륙의 많은 나라에서는 쉼표가 소수점 기호(3,14)이므로 목록 구분 기호가 세미콜론이며, Microsoft 안내도 이 관계를 확인해 줍니다. 소수점 기호를 쉼표로 설정하면 «Excel이 목록 구분 기호로 세미콜론을 쓸 수밖에 없다»는 것입니다. 그래서 베를린에서 저장한 파일은 세미콜론투성이인 경우가 많고, 반대로 미국 시스템에서 온 쉼표 구분 파일은 모든 행이 A열에 몰린 채 열릴 수 있습니다. 세 번째 함정은 문자 인코딩입니다. Microsoft에 따르면 UTF-8 CSV는 바이트 순서 표시(BOM), 즉 인코딩을 알리기 위해 맨 앞에 붙는 보이지 않는 몇 바이트와 함께 저장된 경우에만 정상적으로 열립니다. BOM이 없으면 파일을 가져오면서 UTF-8을 고르지 않는 한 한글이나 악센트 문자가 깨질 수 있습니다.
추측 없이 CSV 열기
두 번 클릭하는 대신 Excel에서 [데이터] > [데이터 가져오기] > [텍스트/CSV에서]를 선택하고, 구분 기호와 파일 원본(인코딩)을 확인한 뒤 우편번호·계좌번호·유전자 기호 같은 열을 불러오기 전에 [텍스트]로 지정하세요. 최신 Excel에서는 [파일] > [옵션] > [데이터] > [자동 데이터 변환]에서 개별 변환을 끌 수도 있습니다.
1972년: 카드의 열 위치 대신 쉼표를
CSV에는 이름이 붙기 전부터 생겨날 이유가 있었습니다. 1960년대 메인프레임 프로그램용 데이터는 보통 80열 천공 카드의 고정된 열에 구멍을 뚫어 넣었고, FORTRAN 프로그램에는 어느 열에 어떤 숫자가 있는지 정확히 지정하는 FORMAT 문이 필요했습니다. 한 열만 밀려 뚫린 값은 잘못 읽혔습니다. 1972년 7월자 일반 정보 설명서에 소개된, OS와 VM/370 운영 체제용 IBM FORTRAN IV 프로그램 제품은 목록 지향 입출력이라는 대안을 제공했습니다. 설명서는 입력 항목이 «공백이나 쉼표로 구분되며, 연속된 쉼표는 생략된 값을 나타낸다»고 설명하고, 프로그래머가 «데이터 배치와 특정 카드 열»을 신경 쓸 필요가 없어진다고 말합니다. 당시 IBM은 이를 표준 언어에 대한 자사 확장 기능으로 분류했습니다.
목록 지향 입력은 1978년에 승인된 FORTRAN 77에서 표준 언어의 일부가 되었습니다. 쉼표나 공백을 구분자로 받아들였기 때문에 따옴표로 감싸지 않은 문자열에는 둘 다 넣을 수 없었는데, 이는 훗날 CSV의 따옴표가 해결해야 했던 바로 그 문제입니다. 다만 이것은 아직 파일 형식이 아니었습니다. 사람이 숫자를 쉼표로 구분해 이어서 입력하면 각 숫자가 어디서 시작하는지는 컴퓨터가 알아내도록 하는 방법이었습니다.
1983년: 스프레드시트가 파일에 확장자를 붙이다
마이크로컴퓨터의 스프레드시트는 이 습관을 파일로 바꿨습니다. Sorcim의 SuperCalc를 기본 제공하던 휴대용 업무용 컴퓨터 Osborne Executive의 1983년 참조 안내서는 «.CSV는 Comma-Separated-Value 파일»이라고 지정하는 변환 유틸리티를 소개하고 그 구조를 설명합니다. 데이터 행은 각각 캐리지 리턴과 라인 피드로 끝나고, 값은 쉼표로 구분되며, 문자열은 큰따옴표로 감싸고(안에 쉼표가 들어가도 됨), 파일 끝은 Control-Z로 표시합니다. 안내서는 이런 데이터를 메인프레임에서 만들어 책상 위 컴퓨터로 내려받을 수도 있다고 덧붙입니다.
같은 안내서는 지금도 이 형식을 규정하는 타협점을 분명히 적어 둡니다. 수식은 CSV 파일로 보내지지 않으며 «변환 시점에 화면에 표시된 값만» 보내집니다. 시트를 CSV로 바꿨다가 다시 되돌리면 수식은 사라져 있습니다. CSV는 스프레드시트를 대신하려고 만든 것이 아니었습니다. 스프레드시트, 데이터베이스, BASIC 프로그램, 메인프레임이 행과 열에 대해 합의할 수 있게 해 주는 최소공통분모였습니다.
바이트의 작동 방식
CSV는 문자로만 이루어져 있습니다. 각 레코드는 한 줄이며, 전통적으로 캐리지 리턴과 라인 피드(CRLF, DOS와 Windows가 줄 끝에 쓰는 두 제어 문자)로 끝나지만 라인 피드만 쓰는 프로그램도 있습니다. 필드는 쉼표로 구분합니다. 필드는 큰따옴표로 감쌀 수 있으며, 쉼표·큰따옴표·줄 바꿈이 들어 있으면 반드시 감싸야 합니다. 따옴표로 감싼 필드 안의 큰따옴표는 두 번 씁니다(""). 첫 줄은 열 이름을 담은 머리글 행일 수도 있지만, 그런지 아닌지를 알려 주는 것은 파일 안에 없습니다. 값이 무엇을 뜻하는지 알려 주는 것도 없습니다. 00123, 1-2, MARCH1은 프로그램이 달리 판단하기 전까지는 그냥 텍스트입니다.
파일은 어떤 문자 인코딩, 즉 바이트와 글자의 대응 관계를 쓰는지도 알려 주지 않습니다. 오래된 CSV는 컴퓨터의 언어에 맞춘 Windows나 DOS의 1바이트 또는 지역별 코드 페이지로 쓰인 경우가 많고, 최근 파일은 대개 웹이 사용하는 유니코드 인코딩인 UTF-8입니다. 읽는 프로그램은 추측할 수밖에 없습니다. 그래서 Excel에는 BOM이 중요하고, CSV가 시스템 사이를 옮겨 다닐 때 악센트가 들어간 이름이나 한글 같은 아시아 문자가 가장 먼저 깨지는 것입니다.
2005년: RFC 4180이 규칙을 글로 남기다
2000년대 초 CSV는 어디에나 있었지만 어디에도 명세가 없었습니다. 2005년 10월, IETF(Internet Engineering Task Force, 인터넷 표준을 만드는 기구)는 Yakov Shafranovich가 쓴 RFC 4180 «Common Format and MIME Type for Comma-Separated Values (CSV) Files»를 발표했습니다. 서문은 직설적입니다. «놀랍게도 이 형식은 매우 흔한데도 한 번도 공식적으로 문서화된 적이 없다.» 이 문서는 «대부분의 구현이 따르는 것으로 보이는 형식», 즉 CRLF 줄 바꿈, 선택적 머리글 행, 쉼표, 큰따옴표 규칙을 설명하고, 미디어 유형 목록을 관리하는 IANA에 선택적 매개변수 charset와 header를 갖춘 text/csv를 등록했습니다. 심지어 «Microsoft Excel 같은 일부 프로그램은 큰따옴표를 전혀 쓰지 않는다»고도 적었습니다.
RFC 4180은 정보 제공용 RFC이며, 스스로 «어떤 종류의 인터넷 표준도 규정하지 않는다»고 밝힙니다. 이후의 작업은 이를 대체하지 않고 그 주변에 쌓였습니다. 2014년 RFC 7111은 웹 주소로 text/csv 파일의 특정 행·열·셀을 가리키는 방법을 정의했고, 2016년에 활동을 마친 W3C 작업 그룹 CSV on the Web은 CSV의 열을 형식까지 포함해 별도의 메타데이터 파일로 설명하는 권고안을 발표했습니다. CSV 파일 자체에는 여전히 그런 정보가 없습니다.
추측이 빗나갈 때: 유전자, 날짜, 사라진 행
가장 잘 기록된 피해 분야는 생물학입니다. 2004년 Barry Zeeberg 연구진은 BMC Bioinformatics에 Excel의 기본 변환이 유전자 이름을 바꾼다고 보고했습니다. 종양 억제 유전자 DEC1은 «1-DEC»가 되었고, 2310009E13 같은 RIKEN 클론 식별자는 숫자 2.31E+13이 되었습니다. 연구진은 이런 변환을 되돌릴 수 없다고 했습니다. 2016년 Mark Ziemann, Yotam Eren, Assam El-Osta는 2005년부터 2015년까지 18개 학술지에 실린 보충 Excel 파일을 조사해 704편 논문의 파일에서 유전자 이름 오류를 찾아냈습니다. 이는 Excel 유전자 목록이 포함된 논문의 19.6%에 해당합니다. 2020년 인간 유전자 기호를 승인하는 HUGO 유전자 명명 위원회(HGNC)는 자동으로 날짜로 바뀌던 기호를 2019년 동안 모두 변경했다고 확인하는 지침을 발표했습니다. SEPT1은 이제 SEPTIN1, MARCH1은 이제 MARCHF1입니다.
CSV는 공중 보건 사고의 출발점에도 있었습니다. 2020년 9월 25일부터 10월 2일까지 잉글랜드의 코로나19 양성 사례 15,841건이 일일 집계에서 빠졌습니다. 잉글랜드 공중보건국(PHE)은 일부 파일이 결과를 중앙 시스템에 불러오는 절차의 최대 파일 크기를 넘었다고 밝혔습니다. BBC 보도에 따르면 검사 업체들은 결과를 CSV 파일로 문제없이 제출했지만, PHE의 자동화 절차가 이를 약 65,000행만 담을 수 있는 옛 XLS 형식의 Excel 템플릿에 옮겨 담았습니다. 검사 한 건에 여러 행을 쓰다 보니 템플릿마다 약 1,400건에서 꽉 찼고 나머지는 빠져 버렸습니다.
결국 Microsoft는 기본값 대신 소프트웨어를 바꿨습니다. 2023년 10월 Excel 팀은 Windows(버전 2309 이상)와 Mac(16.77 이상)에서 자동 데이터 변환 설정을 정식 제공한다고 발표했습니다. 앞자리 0, 15자리 잘림, 문자 E, «연속된 문자와 숫자»의 날짜 변환에 대한 확인란이 있고, .csv나 .txt 파일이 변환되려 할 때 경고하는 선택 기능도 있습니다. 변환은 직접 끌 때까지 켜져 있습니다.
원본 CSV를 보관하세요
Excel이 열을 변환한 뒤 그 파일에 덮어써 저장하면 CSV에는 바뀐 값이 들어가고, 원래 텍스트는 거기서 되살릴 수 없습니다. 사본으로 작업하고, 손대지 않은 내보내기 파일을 편집하는 파일과 따로 보관하세요.
2026년에도 .csv 파일이 디스크에 남아 있는 이유
CSV는 그것을 만든 시스템보다 오래 살아남았습니다. 비상구였기 때문입니다. 은행은 거래 내역을 CSV로 제공하고, 오래된 회계 프로그램과 회원 관리 프로그램은 레코드를 이 형식으로 내보내며, 실험 장비와 데이터 로거도 CSV를 기록하고, 수십 년에 걸친 데이터베이스 이전이 CSV를 거쳐 갔습니다. 그런 파일 중 상당수는 이제 레거시 파일입니다. 더는 실행되지 않는 소프트웨어에서 내보낸 것이고, 오래된 코드 페이지로 쓰였으며, PC 설정에 따라 세미콜론이나 쉼표로 구분되어 있고, 최신 스프레드시트가 처음 두 번 클릭하는 순간 조용히 다르게 해석해 버릴 우편번호, 부품 번호, ID로 가득합니다.
Legacy File Converter는 지원 파일 형식 페이지의 스프레드시트 항목에 쉼표로 구분된 값(.csv)을 올려 두고 있으며, 사용자의 Windows PC에서 직접 XLSX, PDF, Markdown, HTML로 변환합니다. 아무것도 업로드하지 않으므로 은행이나 회원 기록이 담긴 내보내기 파일에도 적합합니다. 변환 후에는 우편번호, 긴 ID, 날짜 같은 열을 원본 파일과 대조해 확인하세요. 스프레드시트 데이터를 주고받던 다른 초기 방식은 역사 수업: .dif 파일이란?과 역사 수업: .slk 파일이란?을, 코로나19 사례에 나온 바이너리 통합 문서는 역사 수업: .xls 파일이란?을 참고하세요.
관련 글
오래된 파일을 열 준비가 되셨나요?
무료로 시작한 뒤 일회성 $79.95 Standard 라이선스로 무제한 변환을 잠금 해제하세요. Windows 설치 프로그램을 다운로드 — 최대 10개 파일까지 전체 기능.
무료 체험
앱 전체 기능 · 최대 10개 파일
Windows 10 또는 11
무료 체험 — 최대 10개 파일까지 변환하실 수 있습니다. Windows 설치 프로그램을 다운로드하여 PC에서 로컬로 변환해 주세요.
직접 Windows 설치 프로그램 · 오프라인 MSI
안전한가요? — 게시자, 설치 프로그램, SmartScreen 도움말
Windows 10 또는 11이 필요합니다. 구독 없음.