ISO 3166은 나라와 지역에 붙이는 코드를 정한 표준으로, 같은 나라를 가리키는 표기가 여러 가지라는 사실에서 출발합니다. 표기가 여러 개면 시스템마다 다른 값을 쓰게 되고, 그 순간 두 목록을 맞춰 보는 일이 어려워집니다. 이 글에서는 코드의 종류와 쓰임, 그리고 저장할 때 무엇을 골라야 하는지 살펴봅니다.
국가 코드는 왜 여러 가지가 있나요?
같은 나라를 두 글자로 적을지, 세 글자로 적을지, 숫자로 적을지는 쓰는 자리에 따라 유리한 점이 다릅니다. 짧은 표기는 사람이 읽고 적기 좋고, 긴 표기는 서로 헷갈리는 나라를 구분하기 좋고, 숫자 표기는 언어와 문자 체계의 영향을 받지 않습니다.
그래서 하나의 표준 안에 세 가지 표기가 함께 들어 있습니다. 중요한 것은 셋이 서로 다른 나라 목록이 아니라 같은 목록의 다른 표현이라는 점입니다. 이 관계를 놓치면 두 값을 비교할 때 없는 불일치를 만들어 냅니다.
두 글자 코드와 세 글자 코드는 어디에 쓰나요?
두 글자 코드는 데이터 교환에서 가장 널리 쓰입니다. 길이가 짧아 주소 데이터, 결제 데이터, 설정 파일 어디에나 넣기 쉽기 때문입니다. 대신 짧다는 점 때문에 오타가 나도 다른 나라의 정상 코드가 되어 버리는 경우가 생깁니다.
세 글자 코드는 두 글자보다 구분이 쉽고, 사람이 읽는 문서나 표에서 자주 보입니다. 숫자 코드는 언어에 관계없이 같은 값을 유지해야 하는 자리에서 쓰입니다. 세 표기를 한 시스템 안에서 섞어 쓰면 같은 나라가 두 개로 집계되므로, 저장 형식은 하나로 정하고 나머지는 표시할 때 변환하는 편이 좋습니다.
코드와 이름을 함께 저장하는 방식도 자주 쓰입니다. 코드만 저장하면 이름을 보여 줄 때마다 대응표를 조회해야 하고, 이름만 저장하면 표기가 바뀌었을 때 과거 값과 현재 값이 달라집니다. 코드를 기준으로 삼고 이름은 표시용으로 복사해 두면 두 문제를 모두 줄일 수 있습니다.
같은 층위를 부르는 이름이 나라마다 다르다는 점도 함께 고려해야 합니다. 주, 도, 현, 성처럼 이름은 달라도 자리는 같은 경우가 많으므로, 필드 이름은 특정 나라의 용어가 아니라 층위의 순서를 기준으로 짓는 편이 오래 쓸 수 있습니다. 화면에 보여 줄 때는 그 나라의 용어로 바꾸면 됩니다.
| 표기 | 길이 | 잘 맞는 자리 | 주의점 |
|---|---|---|---|
| 두 글자 | 짧음 | 데이터 교환, 저장 | 오타가 다른 나라 코드가 되기 쉬움 |
| 세 글자 | 중간 | 문서, 보고서 | 저장용으로 쓰면 길이 부담이 늘어남 |
| 숫자 | 고정 | 언어와 무관한 대조 | 사람이 읽고 확인하기 어려움 |
행정구역 코드는 왜 국가 코드와 다른가요?
국가 아래의 행정구역에도 표준 코드가 있습니다. 국가 코드 뒤에 하이픈을 붙이고 그 나라의 지역 코드를 이어 쓰는 형태가 일반적이며, 미국의 주, 일본의 도·부·현, 독일의 주가 각각 이런 코드를 가지고 있습니다.
여기서 헷갈리기 쉬운 것은 이 코드가 그 나라가 스스로 쓰는 행정 코드와 같지 않다는 점입니다. 통계청, 우편 당국, 세무 당국이 각각 다른 목적으로 다른 코드를 운영할 수 있습니다. 그래서 국제 표준 코드와 현지 코드를 같은 필드에 담으면 나중에 어느 쪽 값인지 알 수 없게 됩니다.
코드를 직접 만들어 쓰면 어떤 문제가 생기나요?
표준에 없는 코드를 임의로 만들면 그 값은 자기 시스템 안에서만 통합니다. 나중에 외부 데이터와 맞춰야 할 때 대응표를 손으로 만들어야 하고, 그 과정에서 반드시 빠뜨리는 값이 생깁니다. 국가가 새로 생기거나 이름이 바뀌는 경우도 있어, 임의 코드는 관리 부담만 늘립니다.
국가 목록이 필요하면 표준 목록에서 시작하고, 자체 코드가 정말 필요하다면 표준 코드와 나란히 두어 대응 관계를 잃지 않게 합니다. 예를 들어 독일이나 일본 같은 국가 페이지는 표준 코드를 기준으로 만들어진 목록의 예입니다.
이름이 바뀐 나라는 어떻게 처리해야 하나요?
나라 이름이나 공식 표기가 바뀌면 코드는 그대로 두고 이름만 갱신하는 경우가 많습니다. 코드까지 함께 바뀌면 그 값을 저장해 둔 시스템과 외부 데이터의 연결이 끊어지기 때문입니다. 그래서 저장된 값은 코드로 두고, 화면에 보여 줄 이름은 별도 대응표에서 가져오는 구조가 유리합니다.
이미 쓰지 않게 된 코드를 만났을 때는 거부하기보다 대응표를 통해 흡수하는 편이 좋습니다. 과거 데이터에는 옛 코드가 남아 있을 수 있고, 그 값을 버리면 당시의 주문이나 기록을 해석할 수 없게 됩니다.
랜덤 주소 생성기에서 국가 코드 확인하기
랜덤 주소 생성기의 국가 선택 목록은 두 글자 코드를 기준으로 구성되어 있습니다. 국가를 고르면 그 코드에 해당하는 형식으로 주소가 만들어지므로, 자기 시스템이 쓰는 코드 체계와 맞는지 눈으로 비교해 보기 좋습니다.
생성되는 값은 시험용 합성 데이터이며 실존하는 주소가 아닙니다. 실제 우편물이나 본인 확인에 사용할 수 없습니다.
개발자를 위한 메모: 저장 형식은 하나로 고정하라
- 저장에는 두 글자 코드를 쓰고, 세 글자와 숫자 표기는 조회용 대응표로 관리합니다. 한 열에 두 가지 표기가 섞이면 집계가 어긋납니다.
- 선택 목록은 표준 목록을 원본으로 삼고, 화면에 보여 줄 이름만 자국어로 바꿉니다. 이름은 바뀌어도 코드는 그대로 두는 것이 핵심입니다.
- 모르는 코드가 들어오면 버리지 말고 원문을 남긴 채 미분류로 표시합니다. 값을 버리면 나중에 원인을 추적할 수 없습니다.
- 이미 쓰지 않게 된 코드를 만났을 때 어떻게 처리할지 미리 정해 둡니다. 과거 데이터에 남아 있을 수 있으므로 거부 대신 매핑으로 흡수합니다.
- 대소문자 처리를 하나로 정합니다. 두 글자 코드는 대문자로 통일하고, 비교할 때는 항상 같은 규칙을 적용합니다.
다음 단계
자기 데이터베이스에서 국가를 나타내는 열이 몇 개인지, 각각 어떤 표기를 담고 있는지 먼저 세어 보세요. 두 가지 이상이 섞여 있다면 하나로 정하고 나머지를 변환하는 작업을 계획에 넣는 것이 좋습니다. 실제 값으로 확인하려면 랜덤 주소 생성기에서 여러 국가를 생성해 보고, 나온 국가 표기가 자기 저장 형식과 맞는지 비교해 보세요. 주소 표시 순서 문제는 국제 주소 형식에서 이어집니다.