국가 선정 기준을 세우지 않고 목록을 만들면, 늘 쓰던 몇 나라만 남고 정작 깨지는 조합은 빠집니다. 국가 목록은 화면에 보여 줄 이름의 집합이 아니라, 앞으로 몇 년 동안 함께 갈 데이터 자산입니다. 그래서 무엇을 넣을지보다 무엇을 기준으로 넣을지를 먼저 정하는 편이 오래 갑니다.
테스트 데이터에 국가를 따로 골라야 하는 이유는 무엇인가요?
국가마다 값의 길이와 문자가 다르고, 어떤 항목은 아예 존재하지 않습니다. 이 차이를 목록이 흡수하지 못하면 검증 규칙이 정상 값을 오류로 판정합니다. 예를 들어 우편번호 체계가 없는 국가의 주소를 넣었는데도 우편번호를 필수로 요구하면, 그 데이터는 틀린 것이 아니라 해당되지 않는 것입니다.
두 번째 이유는 회귀입니다. 국가 목록을 바꾸면 과거에 통과했던 결과의 의미가 달라집니다. 같은 입력으로 같은 판정이 나오지 않으면, 새로 생긴 실패가 코드 때문인지 목록 때문인지 구분할 수 없습니다. 목록을 자산으로 다루면 이 구분이 유지됩니다.
세 번째 이유는 비용입니다. 아무 나라나 늘리는 방식은 검증 규칙을 나라마다 손보게 만들고, 결국 유지되지 않는 예외를 낳습니다. 반대로 축을 정해 고르면 나중에 목록을 늘릴 때도 같은 기준을 반복 적용할 수 있습니다.
목록을 만드는 사람과 목록을 쓰는 사람이 다르다는 점도 무시할 수 없습니다. 만드는 쪽은 왜 그 나라를 넣었는지 알고 있지만, 쓰는 쪽은 결과만 봅니다. 그래서 기준을 문서로 남겨 두지 않으면 목록은 얼마 지나지 않아 아무도 설명할 수 없는 덩어리가 됩니다.
세 가지 축: 시장 도달성, 데이터 난도, 경계 가치
국가를 고를 때 기준으로 삼을 만한 축은 세 가지입니다.
- 시장 도달성: 결제 수단, 배송 가능 범위, 정산 통화, 세제 차이처럼 그 나라에서 실제로 거래가 성립하는지를 보는 축입니다.
- 데이터 난도: 문자 체계, 글자 방향, 주소 길이, 이름 표기 방식처럼 값 자체가 다루기 어려운 정도를 보는 축입니다.
- 경계 가치: 아주 작은 국가, 아주 큰 국가, 우편번호 체계가 없는 국가처럼 다른 나라에서는 나오지 않는 상황을 만들어 주는 축입니다.
세 축은 서로 대체되지 않습니다. 도달성만 보면 문자와 길이 쪽 사각지대가 남고, 난도만 보면 업무 규칙에서 빠지는 나라가 생깁니다.
축을 정했다면 각 축에서 몇 개를 가져갈지도 정해 둡니다. 축마다 최소 하나는 남겨 두는 규칙을 두면, 정리 과정에서 특정 축이 통째로 비는 일을 막을 수 있습니다. 이 최소값은 나중에 목록을 줄일 때도 같은 기준으로 쓰입니다.
또 하나 기억할 점은 축이 검증 항목을 정해 주지는 않는다는 것입니다. 축은 후보를 추리는 도구이고, 어떤 항목을 필수로 볼지는 업무 규칙이 정합니다. 두 결정을 한 자리에서 섞으면 목록이 바뀔 때마다 검증 규칙까지 함께 흔들립니다.
경계 값으로 쓸 만한 국가는 어떻게 알아보나요?
경계 값은 희귀한 나라를 모으는 일이 아니라, 값을 한쪽 끝으로 밀어 보는 일입니다. 기준이 되는 지점은 길이입니다. 가장 긴 주소 줄, 가장 긴 국가명, 가장 긴 도시명을 가진 나라는 입력 칸과 표의 열 너비, 잘라내기 규칙을 한 번에 드러냅니다.
방향과 문자도 같은 방식으로 봅니다. 라틴 문자가 아닌 문자를 쓰는 나라와 오른쪽에서 왼쪽으로 읽는 문자를 쓰는 나라는 목록에 하나씩만 있어도 표시 문제가 드러납니다. 행정구역 이름이 길고 단계가 많은 나라도 같은 역할을 합니다.
| 축 | 확인하려는 것 | 대표로 넣을 값의 성격 |
|---|---|---|
| 시장 도달성 | 결제·배송·통화·세제 조건 | 주력 시장과 신규 시장 |
| 데이터 난도 | 문자·방향·길이·표기 | 비라틴 문자, 긴 주소 |
| 경계 가치 | 잘라내기와 필수 항목 | 매우 작은 국가, 우편번호 없는 국가 |
경계 값을 고를 때는 화면에 보이는 길이를 기준으로 삼습니다. 저장 길이가 넉넉해도 표의 열이나 라벨에는 다르게 잘리기 때문입니다. 가장 긴 값을 가진 나라를 하나 넣어 두면, 새 화면을 만들 때마다 그 나라로 한 번 그려 보는 습관이 생깁니다.
작은 국가를 넣는 이유도 비슷합니다. 값의 폭이 좁은 데이터에서만 드러나는 문제, 예를 들어 기본값이 특정 시장을 전제로 굳어 있는 문제는 큰 국가만으로는 보이지 않습니다. 반대쪽 끝과 함께 두어야 균형이 잡힙니다.
우편번호나 주·도가 없는 국가는 어떻게 다루나요?
이런 국가는 목록에서 빼는 대상이 아니라 반드시 넣어야 하는 대상입니다. 항목이 존재하지 않는다는 사실을 데이터가 표현하지 못하면, 검증 규칙은 그 국가의 정상 주소를 영원히 오류로 봅니다. 테스트의 목적은 통과를 만드는 것이 아니라, 통과해야 할 값이 통과하는지 확인하는 것입니다.
표현 방식은 세 가지로 나눠 두는 편이 안전합니다. 그 항목이 제도상 없는 경우, 아직 값이 없는 경우, 값이 있지만 우리가 채우지 않은 경우입니다. 셋을 한 칸에 몰아넣으면 나중에 어느 쪽을 고쳐야 하는지 알 수 없습니다.
우편번호처럼 나라마다 형식이 갈리는 항목의 구체적인 모양은 다른 글의 주제입니다. 형식 자체를 확인하려면 국가별 우편번호 형식을 참고하고, 이 글에서는 어떤 나라를 목록에 넣을지만 다룹니다.
기본 집합은 무엇으로 구성하나요?
기본 집합은 보통 세 묶음으로 만듭니다. 주력 국가, 확장 시장, 그리고 경계 값입니다. 주력 국가는 업무 규칙이 가장 촘촘한 곳이라 회귀의 기준선이 되고, 확장 시장은 앞으로 늘어날 형식을 미리 받아 두는 역할을 합니다. 경계 값은 앞의 두 묶음이 만들어 내지 못하는 실패를 담당합니다.
세 묶음은 크기를 같게 할 필요가 없습니다. 주력 국가를 두세 개, 확장 시장을 몇 개, 경계 값을 몇 개 두는 식으로 역할만 분명하면 됩니다. 중요한 것은 각 국가가 어느 묶음에 속하는지 기록해 두는 일입니다.
국가와 지역 디렉터리에서 지역별로 묶인 목록을 보면, 같은 지역 안에서도 값의 성격이 얼마나 다른지 눈으로 확인할 수 있습니다.
이 글에 등장하는 국가 묶음과 예시로 든 항목 이름은 설명을 위해 지어낸 합성 데이터이며, 어떤 기관의 실제 목록이나 실제 지원 범위를 옮긴 것이 아닙니다. 표에 적힌 구성도 예시일 뿐이라 그대로 업무 기준으로 삼을 수 없습니다.
개발자를 위한 메모: 국가 집합을 버전 있는 자산으로
- 목록에 이름을 붙이고 번호를 붙여 둡니다. 집합 번호가 없으면 어제의 회귀 결과와 오늘의 결과를 비교할 수 없습니다.
- 각 국가에 들어간 이유를 한 줄로 적어 둡니다. 이유가 없는 국가는 다음 정리 때 사라지고, 그때 함께 사라진 검증도 아무도 눈치채지 못합니다.
- 항목이 적용되지 않는 국가를 목록에서 표시해 둡니다. 표시가 없으면 검증 규칙이 그 국가를 예외로 하드코딩하게 됩니다.
- 목록을 바꿀 때는 어떤 판정이 달라졌는지 함께 기록합니다. 입력은 그대로인데 결과가 바뀌었다면 원인은 목록입니다.
- 실제 개인이나 기업의 정보를 목록의 채움 값으로 쓰지 않습니다. 예시는 예시로 남겨야 나중에 출처를 묻는 일이 생기지 않습니다.
다음 단계
지금 쓰는 국가 목록을 열어 각 국가 옆에 세 축 가운데 어디에 해당하는지 적어 보세요. 이유를 적을 수 없는 국가가 남아 있다면 그 목록은 아직 기준을 가진 목록이 아닙니다. 다음으로는 그 목록이 지금 무엇을 덮고 무엇을 비워 두었는지 세는 일이 필요하며, 방법은 국가 데이터 커버리지 목록에서 이어집니다. 값이 오래되어 생기는 문제는 국가 데이터 최신성에서 다룹니다.