이 연락처 변환기는 vCard 파일(.vcf, 2.1·3.0·4.0 버전) 또는 헤더 행이 있는 CSV를 읽어 구글 연락처 CSV나 vCard 3.0 파일로 씁니다. 오래된 휴대폰의 주소록 내보내기를 구글 연락처로 옮기거나, 고객 스프레드시트를 휴대폰이 가져올 수 있게 바꾸거나, 뒤섞인 .vcf 파일을 정리할 때 씁니다.
연락처는 손실 없이 변환되는 경우가 드물어서 도구는 손실을 숨기지 않고 보여 줍니다. 다운로드 전에 옮기지 못하는 속성과 매개변수, 매핑하지 않은 CSV 컬럼, 이메일이나 전화번호로 본 중복 후보, 스프레드시트가 수식으로 해석할 수 있는 값을 나열합니다. 연락처를 개별로 제외할 수 있고 변환된 파일과 함께 감사용 JSON도 내려받을 수 있습니다.
vCard와 CSV 파싱, 중복 감지, 파일 생성은 이 탭의 백그라운드 워커에서 이뤄집니다. 한도는 입력 5 MiB, 연락처 10,000개, 컬럼 128개, 필드당 64 KiB입니다.
사용 방법
연락처 불러오기
.vcf나 .csv 파일을 선택하거나 페이지에 끌어다 놓거나 텍스트를 붙여 넣습니다. 한글 이름이 든 vCard 샘플과 구글 CSV 샘플로 먼저 써 볼 수 있습니다. 입력에 BEGIN:VCARD 줄이 있으면 vCard로, 없으면 CSV로 취급합니다.
출력 형식 선택
구글 연락처 CSV 또는 vCard 3.0을 고릅니다. 같은 입력을 어느 쪽으로든 변환할 수 있어 vCard 4.0에서 구글 CSV로, CSV에서 vCard로 변환됩니다. 설정을 바꾸면 결과가 바로 갱신되므로 별도의 검토 버튼은 없습니다.
필요하면 CSV 컬럼 매핑
Name, First Name, E-mail 1 - Value, Phone 1 - Type, Mobile Phone, Company 같은 흔한 헤더 이름은 자동으로 매핑되고, 유형 컬럼은 이메일과 전화번호의 유형을 정합니다. 컬럼 매핑은 페이지에 표시되며 인식되지 않은 헤더가 있으면 직접 고치고 매핑 적용을 누르세요. 이메일, 전화번호, 주소, 웹사이트는 여러 컬럼을 매핑할 수 있습니다.
중복과 손실 검토
국가 번호가 없는 번호를 어느 나라 기준으로 읽을지 전화번호 국가를 고릅니다. 중복 그룹마다 유지·제외 체크박스로 연락처를 정리하세요. 버려진 속성과 매핑되지 않은 컬럼마다 코드와 위치가 붙은 경고(앞의 50개까지 표시)를 읽어 보세요. 통계 카드와 검색 가능한 연락처 표가 결과를 요약합니다.
결과 내려받기
변환된 파일(구글 CSV는 연락처 3,000개 단위로 나뉩니다)과 contact-audit.json을 내려받으세요. 이 감사 JSON에는 매핑, 손실, 연락처별 출력 위치가 기록됩니다.
작동 원리
vCard에 담기는 것 (RFC 6350, RFC 2426)
vCard는 BEGIN:VCARD와 END:VCARD 사이의 블록이며 한 줄에 속성 하나입니다. 3.0은 RFC 2426, 4.0은 RFC 6350에 정의되어 있습니다. 변환기는 FN(표시 이름), N(성, 이름, 추가 이름, 접두사, 접미사), EMAIL, TEL, ADR, ORG(조직과 부서), TITLE, URL, NOTE를 읽습니다. 각 카드는 VERSION:2.1, 3.0, 4.0 중 하나를 정확히 한 번 선언해야 합니다. 2.1 입력은 quoted-printable과 UTF-8, EUC-KR, CP949, Shift_JIS 문자 집합을 변환 전에 디코딩합니다.
출력 vCard는 대부분의 휴대폰과 구글이 받는 3.0 버전입니다. 줄은 75옥텟에서 접고 CRLF로 끝나며 TEXT 값은 역슬래시, 쉼표, 세미콜론, 줄바꿈을 이스케이프하고 URL 값은 그대로 씁니다. 이메일은 EMAIL;TYPE=INTERNET,WORK:, 전화번호는 TEL;TYPE=CELL:처럼 원본의 유형을 따라 씁니다.
BEGIN:VCARD
VERSION:3.0
FN:Alex Kim
N:Kim;Alex;;;
EMAIL;TYPE=INTERNET:alex@example.com
TEL:+1 202 555 0100
END:VCARD유지되는 것과 손실되는 것
이름, 이름과 성, 이메일, 전화번호, 주소, 조직, 직함, 웹사이트, 메모 열 가지 필드가 유지되고, vCard에서 온 경우 추가 이름, 접두사, 접미사, 부서도 유지됩니다. 나머지는 보고됩니다. PHOTO, BDAY, X-ABLABEL 같은 vCard 속성은 UNSUPPORTED_PROPERTY로, ADR의 TYPE 같은 매개변수는 UNSUPPORTED_PARAMETER로 나열됩니다.
전화번호와 이메일 유형은 유지됩니다. 전화번호는 TYPE=CELL이 Mobile, HOME이 Home, WORK가 Work, WORK,FAX가 Work Fax, HOME,FAX가 Home Fax, PAGER가 Pager, main이나 primary가 Main이 되고 나머지는 Other입니다. 이메일은 TYPE이 HOME이나 WORK이면 Home이나 Work, 아니면 Other입니다. CSV에서는 구글의 "E-mail N - Type"·"Phone N - Type" 컬럼과 Mobile Phone, Home Phone, Business Phone, E-mail 2 Address 같은 아웃룩식 헤더가 같은 유형을 정하며, 셀이 비어 있으면 유형도 빈 값입니다.
매핑하지 않은 CSV 컬럼은 UNMAPPED_COLUMN으로, tel: 이외의 스킴을 가진 전화 URI 값은 INVALID_VALUE로 보고됩니다.
| 코드 | 의미 |
|---|---|
| UNSUPPORTED_PROPERTY | PHOTO나 BDAY 같은 vCard 속성이 버려짐 |
| UNSUPPORTED_PARAMETER | ADR의 TYPE 같은 매개변수가 버려짐 |
| UNMAPPED_COLUMN | CSV 컬럼이 필드에 매핑되지 않음 |
| INVALID_VALUE | tel:이 아닌 전화 URI처럼 값을 쓸 수 없음 |
| FORMULA_RISK | 전화번호가 아닌 셀이 =, @로 시작하거나 숫자가 아닌 값이 뒤따르는 +, -로 시작함 |
중복과 수식 위험
중복은 정규화한 키가 정확히 일치하는 경우로 찾습니다. 이메일은 @ 뒤쪽 부분이 대소문자와 관계없이 같으면 일치하고, @ 앞쪽 부분은 정확히 비교합니다. 전화번호는 E.164 형식의 키로 비교합니다. 국가를 대한민국으로 두면 +82 10-1234-5678, 010-1234-5678, 82 (0)10 1234 5678, 0082-10-1234-5678이 모두 +821012345678이 되고, 내선번호는 x12처럼 뒤에 붙여 유지합니다. 국가 번호가 없는 번호를 어떻게 읽을지는 "전화번호 국가" 선택(KR, US, CA, GB, JP, CN, DE, FR, IN, AU, BR, ES, IT, MX)이 정하며 기본값은 화면 언어의 국가입니다. 국가를 잘못 고르면 번호가 일치하지 않습니다. 감사 파일에는 전화번호 중복의 값으로 +821012345678 같은 키가 기록됩니다.
스프레드시트는 =, @, +, -로 시작하는 셀을 수식으로 실행할 수 있습니다(CSV 인젝션). 구글 CSV 출력을 검사해 전화번호가 아닌 셀이 =나 @로 시작하거나, +나 - 뒤에 숫자 형태가 아닌 값이 오면 FORMULA_RISK로 보고합니다. 메모 "-- see me"나 회사명 "=1+1"이 그 예이며 값 자체는 바꾸지 않습니다. +로 시작하는 전화번호를 포함해 전화번호는 표시하지 않습니다.
실제 예시
Name,Given Name,Family Name,E-mail 1 - Value,E-mail 2 - Value,Phone 1 - Value,Address 1 - Formatted,Company,Job Title,Website,Notes
Alex Kim,Alex,Kim,alex@example.com,alex@work.example,+1 202 555 0100,"123 Main St, Seattle",Northwind,Designer,https://example.com,Primary recordBEGIN:VCARD
VERSION:3.0
FN:Alex Kim
N:Kim;Alex;;;
EMAIL;TYPE=INTERNET:alex@example.com
EMAIL;TYPE=INTERNET:alex@work.example
TEL:+1 202 555 0100
ADR:;;123 Main St\, Seattle;;;;
ORG:Northwind
TITLE:Designer
URL:https://example.com
NOTE:Primary record
END:VCARDCSV 셀 하나의 주소는 쉼표를 이스케이프해 ADR의 거리 부분에 들어갑니다. 샘플 파일에는 이메일과 전화번호로 중복 표시되는 두 번째 Alex K. 행도 있습니다.
BEGIN:VCARD
VERSION:4.0
FN:Dr. Ada Lovelace
N:Lovelace;Ada;Augusta;Dr.;
EMAIL;TYPE=work:ada@example.com
TEL;TYPE=cell;VALUE=uri:tel:+44-20-7946-0000
ADR;TYPE=home:;;1 Crescent;London;;N1 1AA;UK
ORG:Analytical Engines;Research
TITLE:Countess
PHOTO:data:image/jpeg;base64,AAAA
BDAY:18151210
URL:https://example.org
NOTE:Wrote the first\; program
END:VCARD"Name","Given Name","Additional Name","Family Name","Name Prefix","Name Suffix","E-mail 1 - Type","E-mail 1 - Value","Phone 1 - Type","Phone 1 - Value","Address 1 - Formatted","Organization 1 - Name","Organization 1 - Department","Organization 1 - Title","Website 1 - Value","Notes"
"Dr. Ada Lovelace","Ada","Augusta","Lovelace","Dr.","","Work","ada@example.com","Mobile","+44-20-7946-0000","1 Crescent, London, N1 1AA, UK","Analytical Engines","Research","Countess","https://example.org","Wrote the first; program"TYPE=work와 TYPE=cell은 Work와 Mobile 유형이 됩니다. 경고: ADR의 TYPE에 UNSUPPORTED_PARAMETER, PHOTO와 BDAY에 UNSUPPORTED_PROPERTY입니다. 플러스로 시작하는 전화번호에는 수식 경고가 나오지 않습니다.
Preferred,Contact
Ada,a@b.cneedsMapping: true
losses: UNMAPPED_COLUMN csv:header:1 (Preferred)
UNMAPPED_COLUMN csv:header:2 (Contact)감사 데이터입니다. 알려진 헤더 이름이 없어서 Name을 Preferred에, Email을 Contact에 매핑하기 전에는 파일이 만들어지지 않습니다. 매핑 뒤 vCard는 FN:Ada와 EMAIL;TYPE=INTERNET:a@b.c가 됩니다.
Name,Phone
A,010-1234-5678
B,(010) 1234 5678
C,+82 10 1234 5678country KR: [{"kind":"phone","value":"+821012345678","contacts":[1,2,3]}]
country US: [{"kind":"phone","value":"+101012345678","contacts":[1,2]}]감사 데이터입니다. 국가를 대한민국으로 두면 A, B, C가 모두 +821012345678이 되어 일치합니다. 미국을 고르면 A와 B는 미국 번호(+101012345678)로 읽히고 C는 +821012345678 그대로여서 C는 더 이상 일치하지 않습니다. 번호가 속한 나라를 고르세요.
자주 하는 실수
특이한 전화번호·이메일 라벨은 Other가 됨
home, work, mobile, fax, pager, main 라벨만 인식합니다. TYPE=voice 같은 사용자 지정 라벨은 Other로 쓰이므로 중요하면 가져온 뒤 구글 연락처에서 다시 지정하세요.
사진, 생일, 사용자 정의 필드는 변환되지 않음
나열된 열 가지 필드만 변환됩니다. PHOTO, BDAY, IMPP, X- 속성, 그룹 소속은 보고만 되고 버려집니다. 원본 .vcf를 완전한 백업으로 보관하세요.
CSV 구분자와 문자 인코딩
쉼표, 세미콜론, 탭 구분 CSV를 자동 감지합니다. 텍스트는 UTF-8을 먼저 시도하고 필요하면 EUC-KR, Shift_JIS, Windows-1252로 읽습니다. 헤더는 서로 달라야 하고 비어 있으면 안 되며 모든 행의 셀 수가 같아야 합니다.
중복은 표시만 함
도구는 두 연락처를 합치지 않습니다. 이메일이나 전화번호를 공유하는 사람을 보여 줘서 한쪽을 제외할 수 있게 할 뿐입니다. 이름은 비교하지 않으므로 같은 주소의 John과 Jon은 찾지 못합니다.
전화번호 일치에는 맞는 국가를 고르세요
국가 번호가 없는 번호는 선택한 국가 기준으로 읽으며 기본값은 화면 언어의 국가입니다. 국가를 잘못 고르면 010-1234-5678과 +82 10 1234 5678이 일치하지 않습니다. 목록이 속한 나라를 고르세요.
오래된 vCard 2.1의 지원 문자 집합
VERSION:2.1 입력도 받으며 quoted-printable과 UTF-8, EUC-KR, CP949, Shift_JIS를 읽습니다. 그 밖의 오래된 문자 집합은 정확히 디코딩되지 않을 수 있으니 원본을 보관하고 다운로드 전에 이름과 메모를 확인하세요.
자주 묻는 질문
VCF를 CSV로 바꾸려면?
.vcf 파일을 불러오고 출력으로 구글 연락처 CSV를 고르세요. 연락처마다 이름, 이메일, 전화번호, 주소, 조직, 직함, 웹사이트, 메모 컬럼이 있는 한 행이 됩니다.
어느 vCard 버전을 지원하나요?
입력은 vCard 2.1, 3.0, 4.0이고 출력은 vCard 3.0입니다. VERSION 줄이 없거나 다른 버전인 카드는 거부됩니다.
CSV를 구글 연락처로 가져올 수 있나요?
네, 구글 출력은 E-mail 1 - Value, Organization 1 - Name 같은 구글의 컬럼 이름을 씁니다. 주소록이 크면 연락처 3,000개마다 파일을 따로 만듭니다.
수식 경고는 언제 나오나요?
=나 @로 시작하거나 +, - 뒤에 숫자가 아닌 값이 오는 문자열은 스프레드시트에서 수식으로 실행될 수 있습니다. 메모 "-- see me"나 회사명 "=1+1" 같은 값이 FORMULA_RISK로 보고됩니다. 전화번호는 표시하지 않으며 값은 바뀌지 않습니다.
감사 파일에는 무엇이 들어 있나요?
contact-audit.json에는 입력 형식, 포함·제외된 연락처 수, 필드 개수, 위치가 붙은 모든 손실, 중복 그룹, 연락처가 어느 출력 파일의 몇 번째 행으로 갔는지가 있습니다. 연락처 데이터가 간접적으로 담겨 있으니 공유에 주의하세요.
연락처가 업로드되나요?
아니요. 이름, 전화번호, 주소는 브라우저에서 읽고 변환됩니다. 내려받을 수 있는 감사 JSON도 페이지에서 만들어지며 연락처별 위치를 기록하므로 개인정보로 취급하세요.
마지막 업데이트:
