이 CSV 검사기는 데이터베이스 가져오기, API, 스크립트에 넘기기 전에 CSV나 TSV 파일을 RFC 4180 기준으로 점검합니다. 끝내 닫히지 않는 따옴표, 셀 수가 맞지 않는 레코드, 겹치거나 비어 있는 헤더 이름, RFC 4180이 허용하지 않는 자리의 따옴표는 오류이고, 하나라도 있으면 "올바르지 않은 CSV"로 판정합니다. 섞인 줄 끝, 빈 줄, 앞뒤 공백이 붙은 헤더 이름, BOM, 빈 셀처럼 규칙상 허용되지만 문제를 자주 일으키는 것은 경고나 참고로 알려 줍니다. 모든 결과에는 해당 줄 번호가 붙습니다.
검사하는 것은 의미가 아니라 구조입니다. 컬럼에 이메일, 날짜, 양수가 들어가야 하는지는 모르며 ari@exmple.com 같은 오타도 찾지 못합니다. 대신 "필드 5개를 기대했는데 4개" 같은 가져오기 오류를 내거나, 파일 절반을 셀 하나로 삼키거나, 값을 엉뚱한 컬럼으로 조용히 밀어내는 문제를 잡아냅니다.
검사는 입력하는 동안 이 탭에서 바로 실행되고, 복사할 수 있는 보고서도 페이지에서 만들어집니다. 아무것도 업로드되지 않습니다. 한도는 입력 20MiB, 레코드 50,000개, 컬럼 200개입니다.
사용 방법
파일 붙여 넣기 또는 열기
편집기에 CSV 텍스트를 붙여 넣거나
.csv,.tsv파일을 끌어다 놓거나 파일 열기를 누릅니다. 파일은 바이트 그대로 읽어서, UTF-16 BOM으로 시작하면 UTF-16으로, 그렇지 않으면 UTF-8로 해석합니다. 정상 파일, 들쭉날쭉한 행, 깨진 따옴표 예제로 결과가 어떻게 나오는지 먼저 볼 수 있습니다.구분자와 헤더 설정
구분자는 자동 감지로 두거나 쉼표, 세미콜론, 탭, 파이프 중에서 고릅니다. 첫 번째 빈 줄이 아닌 레코드가 컬럼 이름이면 "첫 행은 헤더"를 켜 두고, 그 레코드부터 데이터라서 헤더 검사가 필요 없으면 끕니다.
판정 확인
입력하는 동안 결과가 바로 바뀝니다. 배지에 "올바른 CSV" 또는 "올바르지 않은 CSV"와 오류·경고 개수가 나오고, 레코드, 열, 구분자 수치가 함께 표시됩니다. 구분자를 추측했다면 "자동 감지"가 붙습니다.
문제 줄로 이동
결과마다 오류, 경고, 참고 배지와 제목, 고치는 방법을 담은 설명, 처음 여덟 개 줄 번호 칩이 붙습니다. 칩을 누르면 편집기가 그 줄로 이동하고, 오류가 있는 줄은 편집기 안에도 표시됩니다.
보고서 복사
보고서 복사를 누르면 첫 줄에 판정, 그 아래에 결과마다 심각도, 제목, 설명, 줄 번호를 한 줄씩 적은 텍스트가 클립보드에 들어갑니다. 이슈 티켓에 그대로 붙여 넣으면 됩니다.
작동 원리
파일을 무효로 만드는 것
RFC 4180은 모든 레코드의 필드 수가 같아야 하고 큰따옴표가 놓일 수 있는 자리를 정해 둡니다. 검사기는 이 규칙과 대부분의 가져오기 도구가 강제하는 헤더 규칙 두 가지를 오류로 다룹니다. 허용되지만 위험한 나머지는 경고나 참고이고, 오류가 없으면 판정은 올바른 CSV로 유지됩니다.
| 결과 | 심각도 | 발생 조건 |
|---|---|---|
| 닫히지 않은 따옴표 | 오류 | 따옴표로 시작한 값이 끝까지 닫히지 않음. 따옴표가 열린 줄과 열을 알려 줌 |
| 셀 수가 맞지 않는 레코드 | 오류 | 첫 번째 빈 줄이 아닌 레코드와 셀 수가 다른 레코드 |
| 겹치는 열 이름 | 오류 | 앞뒤 공백을 빼고 같은 헤더 이름이 두 번 이상 나옴 |
| 이름 없는 열 | 오류 | 비어 있거나 공백뿐인 헤더 셀 |
| RFC 4180이 허용하지 않는 따옴표 | 오류 | 따옴표 없는 값 안의 따옴표, 또는 닫는 따옴표 바로 뒤에 붙은 글자 |
| 섞인 줄 끝 | 경고 | 한 파일에 LF, CRLF, CR 줄바꿈이 함께 쓰임 |
| 빈 줄 | 경고 | 레코드 사이나 끝에 있는 빈 줄 |
| 헤더 이름 앞뒤 공백 | 경고 | 앞이나 뒤에 공백이 붙은 헤더 이름 |
| 바이트 순서 표시(BOM) | 참고 | 파일이 BOM으로 시작함 |
| 빈 셀 | 참고 | 비어 있거나 공백뿐인 셀 |
줄 번호를 세는 방식
줄 번호는 편집기의 물리적인 줄을 1부터 센 값이며, 문제가 된 레코드가 시작하는 줄을 가리킵니다. 여러 줄에 걸친 따옴표 값이 있으면 그 레코드가 여러 줄을 차지하므로 다음 레코드의 줄 번호도 그만큼 건너뜁니다. 엑셀의 sep=; 첫 줄은 레코드가 아니어도 1번째 줄로 셉니다.
레코드 수치는 데이터 레코드만 셉니다. 헤더와 빈 줄은 빠집니다. 열 수치는 첫 번째 빈 줄이 아닌 레코드의 셀 수이고, 헤더가 있든 없든 나머지 빈 줄이 아닌 레코드를 모두 이 값과 비교합니다. 설명 문장에는 항상 전체 개수가 나오고, 칩은 처음 여덟 줄만 보여 줍니다.
RFC 4180의 따옴표 규칙
필드는 큰따옴표로 감쌀 수 있고, 감싼 필드에는 구분자, 줄바꿈, 두 번 쓴 큰따옴표("He said ""hi""")가 들어갈 수 있습니다. 그 밖의 자리에 있는 따옴표는 오류입니다. 따옴표로 시작하지 않는 값 안에 있거나(5'10"), 닫는 따옴표 뒤에 글자가 이어지는 경우("6'1" exactly)입니다. 이런 따옴표는 읽는 도구마다 처리가 달라서 검사기가 잡아냅니다.
열린 따옴표가 끝까지 닫히지 않는 경우는 더 심각합니다. 파일의 나머지가 셀 하나로 읽히기 때문입니다. 이때는 레코드의 경계를 알 수 없으므로 따옴표가 열린 줄과 열을 담은 그 오류 하나만 보고합니다.
줄 끝, BOM, sep= 줄
RFC 4180은 CRLF를 규정하지만 LF만 쓰거나 CR만 쓴 파일도 별말 없이 받아들입니다. 둘 이상이 섞였을 때만 경고하는데, 한 종류로 줄을 나누는 오래된 도구가 다른 종류에서 깨지기 때문입니다. 빈 줄은 경고로 보고하고 레코드 수에서 빼며, 이 도구에서는 말없이 건너뛰지 않습니다.
파일을 바이트 그대로 읽기 때문에 열거나 끌어다 놓거나 붙여 넣은 텍스트 맨 앞의 BOM이 디코딩 뒤에도 남아 UTF-8, UTF-16 LE, UTF-16 BE 중 어떤 인코딩인지와 함께 참고로 보고됩니다(붙여 넣은 텍스트는 항상 UTF-8로 봅니다). BOM은 파싱 전에 떼어 내므로 여기서는 첫 헤더 이름에 섞이지 않습니다. UTF-16 LE·BE 파일은 BOM으로 알아보고 디코딩한 뒤 검사합니다. 엑셀의 sep=; 줄은 구분자를 정하며, 이 경우 구분자 수치에 자동 감지 표시가 붙지 않습니다.
실제 예시
id,name,email
001,Ari,ari@example.com
002,Bea
003,,cy@example.comCSV 검사 보고서: 올바르지 않은 CSV보고서 복사로 클립보드에 들어가는 첫 줄이며, 전체 보고서에는 현지화된 검사 결과가 이어집니다. 3번째 줄(Bea)은 3개가 필요한데 셀이 2개입니다. 빈 셀 2개는 레코드가 짧아서 빠진 Bea의 이메일과 4번째 줄의 빈 이름입니다.
id,id,,x
1,2,3,4CSV 검사 보고서: 올바르지 않은 CSV수치에는 레코드 1, 열 4가 나옵니다. 두 오류 모두 헤더가 있는 1번째 줄을 가리킵니다.
id,quote
1,"Hello, world"
2,"He said ""hi"" and left
3,doneCSV 검사 보고서: 올바르지 않은 CSVhi를 감싼 두 번 쓴 따옴표는 올바른 이스케이프지만 값을 닫는 따옴표가 끝내 나오지 않습니다. 보고서는 이 오류에서 멈추고 다른 검사는 실행하지 않습니다.
id,size,note
1,5'10",tall
2,"6'1" exactly",ok
3,"6'2""",okCSV 검사 보고서: 올바르지 않은 CSV2번째 줄은 따옴표 없는 값 안에 따옴표가 있고, 3번째 줄은 따옴표를 닫은 뒤에도 글자가 이어집니다. 4번째 줄은 값을 따옴표로 감싸고 안쪽 따옴표를 두 번 써서 올바릅니다.
"\uFEFFid, name\r\n1,Ada\n\n2,Grace\r\n"CSV 검사 보고서: 올바른 CSVBOM, CRLF와 LF 줄바꿈, 빈 줄이 보이도록 입력을 자바스크립트 문자열로 적었습니다. 셋 다 오류가 아니므로 판정은 경고 3개가 붙은 올바른 CSV이고, 레코드 수치는 2입니다.
자주 하는 실수
구조가 유효해도 데이터가 유효한 것은 아님
통과한 파일에도 날짜 컬럼에 이메일이 있거나 숫자 필드에 텍스트가 있을 수 있습니다. 검사기는 값의 타입, 형식, 범위를 보지 않습니다. 타입을 아는 검사 앞의 첫 관문으로 쓰세요.
깨끗한 결과를 믿기 전에 구분자 확인
자동 감지는 앞쪽 레코드 30개에서 쉼표, 세미콜론, 탭, 파이프를 비교해 열 개수가 가장 고르게 나오는 것을 고릅니다. 추측이 틀리면 파일 전체가 오류 없이 넓은 열 하나로 읽힐 수 있습니다. 구분자와 열 수치를 보고 이상하면 구분자를 직접 고르세요.
줄 번호는 레코드가 시작하는 줄
여러 줄짜리 따옴표 값이 든 레코드는 보고된 줄에서 시작해 몇 줄 아래에서 끝납니다. 그래서 셀 수를 어긋나게 만든 셀이 칩의 줄 번호보다 몇 줄 아래에 있을 수 있습니다.
공백이나 쉼표만 있는 줄은 빈 줄이 아님
완전히 비어 있는 줄만 빈 줄로 보고합니다. 공백만 있는 줄은 셀 하나짜리 레코드이고 쉼표만 있는 줄은 빈 셀로 된 레코드라서, 대개 셀 수가 맞지 않는 레코드로 나타납니다.
엑셀과 인코딩
BOM이 없는 파일은 UTF-8로 읽습니다. 엑셀이 기존 코드 페이지로 저장한 "CSV(쉼표로 분리)" 파일은 글자가 깨져 보여도 구조 검사는 통과할 수 있습니다. 다른 곳에 가져오기 전에 "CSV UTF-8"로 다시 저장하세요. 엑셀의 "유니코드 텍스트" 내보내기는 BOM이 붙은 UTF-16 탭 구분 파일이라 제대로 디코딩됩니다.
자주 묻는 질문
검사기가 실제로 확인하는 것은 무엇인가요?
닫히지 않은 따옴표, 첫 번째 빈 줄이 아닌 레코드와 셀 수가 다른 레코드, 겹치거나 빈 헤더 이름, RFC 4180이 금지하는 자리의 따옴표는 오류입니다. 섞인 줄 끝, 빈 줄, 헤더 이름 앞뒤 공백은 경고이고, BOM과 빈 셀은 참고입니다.
RFC 4180 적합성을 완전히 검사하나요?
RFC의 필드 수 규칙과 따옴표 규칙을 강제하고, 가져오기 도구가 기대하는 헤더 규칙 두 가지를 더합니다. RFC에 없는 세미콜론·탭·파이프 구분자와 LF만 쓴 파일은 일부러 받아들이며, 줄 끝이 섞였을 때만 경고합니다.
빈 셀이 있는데도 올바른 CSV로 나오는 이유는?
빈 셀은 CSV에서 합법이라 개수와 함께 참고로만 보여 줍니다. 오류가 있을 때만 "올바르지 않은 CSV"가 됩니다.
따옴표가 깨지면 왜 문제가 하나만 나오나요?
따옴표가 열린 채로 남으면 뒤의 모든 줄이 같은 셀에 속해 레코드 경계가 사라집니다. 그래서 따옴표가 열린 줄과 열만 알려 주며, 그 부분을 고치면 나머지 검사가 곧바로 다시 실행됩니다.
문제 줄은 몇 개까지 표시되나요?
설명 문장에는 전체 개수가 나오고 칩은 처음 여덟 줄을 보여 줍니다. 편집하는 동안 검사가 다시 실행되므로 그 줄들을 고치면 다음 줄이 바로 나타납니다.
헤더 없는 파일도 검사할 수 있나요?
네. "첫 행은 헤더"를 끄세요. 헤더 검사는 건너뛰고 빈 줄이 아닌 모든 레코드를 첫 번째 빈 줄이 아닌 레코드의 셀 수와 비교하며, 셀 수 오류 문구도 "헤더" 대신 "첫 레코드"를 기준으로 말합니다.
파일이 업로드되나요?
아니요. 파일은 브라우저에서 읽고 검사하며, 복사하는 보고서도 페이지에서 만들어집니다.
마지막 업데이트:
