한줄 요약: ZIP Code는 미국, Postal Code는 캐나다, Postcode는 영국과 호주, PIN Code는 인도에서 사용하는 명칭입니다. 기능은 동일하게 우편물을 올바른 목적지로 라우팅하는 것이지만, 형식·문자 종류·자릿수·구분자 규칙은 나라마다 다릅니다. 국제화 주소 폼을 만들면서 이걸 전부 "zip code" 필드 하나로 처리하면, 버그의 출발점이 됩니다.
각 용어의 의미
ZIP Code (미국)
ZIP은 Zone Improvement Plan의 약자로, 1963년 USPS가 도입했습니다. 기본 형식은 5자리 숫자(예: 90210), 확장 형식인 ZIP+4는 하이픈 뒤에 4자리를 추가해(예: 90210-1234) 특정 블록이나 건물까지 좁혀줍니다.
Postal Code (캐나다)
캐나다는 A1A 1A1 패턴의 6자리 영숫자 혼합 형식을 사용합니다. 영문자와 숫자가 번갈아 나오고 가운데 공백이 들어갑니다. 앞 3자리(Forward Sortation Area)가 지리적 지역을, 뒤 3자리(Local Delivery Unit)가 구체적인 배달 구역을 나타냅니다. 숫자와 혼동되기 쉬운 D, F, I, O, Q, U는 사용하지 않습니다.
Postcode (영국)
영국 우편번호는 좀 더 복잡합니다. "영문 12자 + 숫자 12자 + 선택적 영문 + 공백 + 숫자 1자 + 영문 2자" 구조입니다. 예를 들어 SW1A 1AA(버킹엄궁)이나 EC2R 8AH이 있습니다. 공백 앞(outward code)이 지역과 구역을, 공백 뒤(inward code)가 섹터와 배달 지점을 나타냅니다.
PIN Code (인도)
PIN은 Postal Index Number의 약자로, 6자리 순수 숫자(예: 110001)입니다. 첫째 자리가 지역, 둘째 자리가 하위 지역, 셋째 자리가 분류 구역, 나머지 3자리가 해당 우체국을 가리킵니다.
국가별 비교 표
| 국가 | 명칭 | 형식 | 길이 | 문자 종류 | 예시 | 구분자 |
|---|---|---|---|---|---|---|
| 미국 | ZIP Code | NNNNN 또는 NNNNN-NNNN | 5 또는 10 | 숫자만 | 10001, 90210-1234 | ZIP+4에 하이픈 |
| 캐나다 | Postal Code | A1A 1A1 | 7 (공백 포함) | 영문+숫자 | K1A 0B1, V6B 3K9 | 중간 공백 |
| 영국 | Postcode | A9 9AA~AA9A 9AA | 6-8 (공백 포함) | 영문+숫자 | SW1A 1AA, M1 1AE | 끝 3자 앞에 공백 |
| 호주 | Postcode | NNNN | 4 | 숫자만 | 2000, 3000 | 없음 |
| 독일 | Postleitzahl (PLZ) | NNNNN | 5 | 숫자만 | 10115, 80331 | 없음 |
| 일본 | 郵便番号 | NNN-NNNN | 8 (하이픈 포함) | 숫자만 | 100-0001 | 3번째 뒤 하이픈 |
| 인도 | PIN Code | NNNNNN | 6 | 숫자만 | 110001, 400001 | 없음 |
| 프랑스 | Code Postal | NNNNN | 5 | 숫자만 | 75001, 13001 | 없음 |
| 브라질 | CEP | NNNNN-NNN | 9 (하이픈 포함) | 숫자만 | 01001-000 | 5번째 뒤 하이픈 |
| 한국 | 우편번호 | NNNNN | 5 | 숫자만 | 03171, 06164 | 없음 |
개발자가 이 차이를 알아야 하는 이유
여러 나라 사용자를 대상으로 하는 앱에서 zip_code VARCHAR(5) 하나, 숫자 전용 정규식 하나로 처리하면 대부분의 국가에서 문제가 생깁니다. 가장 흔한 실수를 정리합니다.
실수 1: 숫자만 입력 가능하게 만들기
캐나다 우편번호(V6B 3K9), 영국 postcode(SW1A 1AA) 등 영문을 포함하는 나라가 많습니다. 숫자 전용 검증 규칙은 이런 국가의 정상 주소를 즉시 거부합니다.
실수 2: 공백 제거하기
영국 postcode와 캐나다 postal code의 공백에는 의미가 있습니다. Royal Mail 주소 작성 가이드라인에 따르면 SW1A1AA처럼 공백을 빼면 엄밀히는 비표준입니다. 우편물이 도착할 수는 있지만, 엄격한 검증은 통과하지 못하고 해당 국가 사용자에게는 어색하게 보입니다.
실수 3: 고정 자릿수 강제하기
우편번호 길이는 3자리(아이슬란드: 101)부터 10자리(미국 ZIP+4: 90210-1234)까지 다양합니다. 자릿수를 하드코딩하면 예상 밖의 국가에서 유효한 코드를 거부하게 됩니다.
실수 4: 만능 정규식 하나로 해결하려 하기
모든 국가의 우편번호를 올바르게 검증하는 단일 정규식은 존재하지 않습니다. 미국 ZIP용 ^\d{5}(-\d{4})?$는 캐나다, 영국, 일본, 브라질 코드를 전부 무효로 판정합니다. 국가별 검증만이 유일하게 신뢰할 수 있는 방법입니다.
실수 5: 모든 국가에 "ZIP Code"라고 표시하기
캐나다나 영국 사용자가 이용하는 폼에 "ZIP Code"라고 적으면 혼란을 줍니다. 용어를 모르거나, 미국 전용 폼으로 오해할 수 있습니다. "Postal Code"나 "Postcode"를 범용 라벨로 쓰거나, 선택된 국가에 따라 라벨을 동적으로 바꾸는 것이 좋습니다.
데이터베이스 저장 권장사항
모든 국가를 zip_code CHAR(5) 하나에 억지로 넣는 것은 피하세요. 실무 가이드라인은 다음과 같습니다:
권장 스키마:
postal_code VARCHAR(20) -- 모든 알려진 형식 수용
country_code CHAR(2) -- ISO 3166-1 alpha-2
인덱스: (country_code, postal_code)
핵심 원칙:
- 사용자가 입력한 원본 형식 그대로 저장 (공백·하이픈 포함)
- 정규화(공백·하이픈 제거)는 조회 로직에서만 수행, 저장 시에는 변경하지 않음
CHAR가 아닌VARCHAR사용 — 후행 패딩이 비교 버그를 유발- 필드 길이는 넉넉하게(
VARCHAR(20)) — 엣지 케이스와 향후 형식 변경에 대비 - 우편번호는 반드시
country_code와 함께 저장 — 같은 문자열(예:10001)이 여러 나라에서 유효할 수 있음
국가별 검증 전략
올바른 접근법은 국가별로 나눠서 검증하는 것입니다. 주요 형식의 정규식 참고 표입니다:
| 국가 | 정규식 패턴 | 비고 |
|---|---|---|
| 미국 | ^\d{5}(-\d{4})?$ | ZIP+4 선택적 |
| 캐나다 | ^[A-Za-z]\d[A-Za-z]\s?\d[A-Za-z]\d$ | 공백 입력 시 선택적 |
| 영국 | ^[A-Z]{1,2}\d[A-Z\d]?\s?\d[A-Z]{2}$ | 복잡함, 라이브러리 권장 |
| 독일 | ^\d{5}$ | 항상 5자리 |
| 일본 | ^\d{3}-?\d{4}$ | 하이픈 선택적 |
| 인도 | ^\d{6}$ | 항상 6자리 |
| 호주 | ^\d{4}$ | 항상 4자리 |
| 브라질 | ^\d{5}-?\d{3}$ | 하이픈 선택적 |
| 프랑스 | ^\d{5}$ | 항상 5자리 |
| 한국 | ^\d{5}$ | 항상 5자리 (2015년 이후) |
중요: 정규식은 형식만 검증하며, 실재 여부는 확인하지 않습니다. 00000은 미국 정규식을 통과하지만 유효한 ZIP Code가 아닙니다. 실재 여부 확인에는 우편 데이터베이스 조회나 검증 API가 필요합니다.
다국가 우편번호 처리를 테스트하는 법
국제 주소 지원을 구축하려면 대상 국가별 테스트 데이터가 필요합니다. 각 나라의 형식을 직접 조사하는 대신, AddressGen으로 형식에 맞는 샘플 주소를 바로 생성할 수 있습니다:
- 미국 주소 생성기 — 5자리 ZIP과 ZIP+4 형식
- 캐나다 주소 생성기 — 영숫자 혼합
A1A 1A1postal code - 영국 주소 생성기 — 가변 길이 UK postcode
캐나다 우편번호 체계를 더 깊이 알고 싶다면 캐나다 우편번호 시스템 소개도 참고해 보세요.
국가별로 주소를 생성하면 다음을 커버하는 테스트 매트릭스를 구성할 수 있습니다:
- 모든 문자 유형 (숫자만, 영문만, 혼합)
- 모든 구분자 유형 (공백, 하이픈, 없음)
- 최소 및 최대 길이
- 엣지 케이스 (선행 0, 영숫자 교차)
개발자 구현 체크리스트
국제 주소 폼을 만들거나 점검할 때 하나씩 확인해 보세요:
- 우편번호 필드가 영문, 숫자, 공백, 하이픈을 모두 허용
- 필드 길이가 최소 10자 이상
- 선택된 국가에 따라 검증 규칙이 변경됨
- 필드 라벨이 국가에 맞게 바뀜 (ZIP Code / Postal Code / Postcode / PIN Code)
- 저장 시 공백과 하이픈이 보존됨
- 데이터베이스 컬럼이
VARCHAR임 (CHAR나INT가 아님) - 만능 정규식이 아닌 국가별 패턴 사용
- 선행 0이 보존됨 (예: 미국
01001, 호주0800) - 테스트 데이터가 형식 규칙이 다른 5개국 이상을 커버
자주 묻는 질문
"ZIP Code"와 "Postal Code"는 같은 건가요?
기능적으로는 같습니다. 둘 다 우편물을 목적지로 라우팅합니다. 다만 "ZIP Code"는 USPS의 미국 전용 상표이고, "Postal Code"는 국제 범용 용어입니다. 캐나다에서는 "Postal Code"가 공식 명칭입니다. UI에서 잘못된 용어를 쓰면 사용자가 혼란을 느낄 수 있습니다.
우편번호가 0으로 시작하는 이유는?
미국에서는 북동부 주의 ZIP Code가 0으로 시작합니다 (예: 매사추세츠주 Amherst 01001). 호주에서는 노던 테리토리 코드가 0으로 시작합니다 (예: 0800). 우편번호를 정수형으로 저장하면 선행 0이 날아가서 유효하지 않은 코드가 됩니다. 우편번호는 반드시 문자열로 저장하세요.
같은 우편번호가 다른 나라에 존재할 수 있나요?
네. 10001은 미국(뉴욕)과 한국(서울)에서 모두 유효한 코드입니다. 75001은 프랑스(파리)에서 유효하며, 다른 시스템에서도 그럴듯하게 보일 수 있습니다. 그래서 데이터베이스에서 우편번호는 반드시 국가 코드와 함께 관리해야 합니다.
우편번호 형식은 누가 정하나요?
각 나라의 우편 당국이 자국 형식을 정합니다. 주요 참고 자료:
- 미국: USPS Publication 28
- 캐나다: Canada Post 주소 작성 가이드라인
- 영국: Royal Mail Postcode Finder
- 인도: India Post PIN Code Directory
- 국제: 만국우편연합(UPU)이 국제 표준을 관리
본 글은 교육 및 개발 참고용입니다. 대상 국가의 최신 공식 우편 문서에서 형식을 확인하세요.
