신원 데이터 일관성은 한 건의 기록 안에 들어 있는 값들이 서로 모순되지 않는 상태를 말합니다. 값 하나하나는 형식이 맞는데 둘을 나란히 놓으면 말이 안 되는 경우가 많고, 이런 값은 시험을 통과시켜 버리기 때문에 더 위험합니다. 이 글에서는 어떤 짝을 확인해야 하는지, 어긋난 값이 왜 조용히 지나가는지, 그리고 검사를 어디까지 강제해야 하는지 살펴봅니다.
일관성이란 무엇인가요?
기록 하나에 우편번호와 도시, 전화번호와 국가, 생년월일과 나이가 함께 들어 있다고 생각해 봅시다. 우편번호가 미국 형식인데 도시가 다른 나라에 있으면 두 값은 서로 맞지 않습니다. 전화번호의 국가 코드가 주소와 다른 나라를 가리켜도 마찬가지입니다.
일관성은 이렇게 서로를 설명하는 항목들이 같은 결론에 도달하는 상태입니다. 각 항목이 자기 규칙을 통과하는 것과는 다른 문제이고, 그래서 항목별 검사만으로는 잡히지 않습니다. 여러 나라의 형식이 어떻게 다른지는 국가별 신원 번호 길이와 국제 주소 형식에서 비교해 두었습니다.
어긋난 값은 왜 조용히 지나가나요?
항목별 검사는 대개 형식만 봅니다. 우편번호가 그 나라의 자릿수 규칙을 따르는지, 전화번호가 숫자로만 되어 있는지를 확인합니다. 두 값이 같은 나라를 가리키는지는 검사하지 않습니다.
그래서 어긋난 값도 저장까지는 무사히 도착합니다. 문제는 그 뒤에 터집니다. 배송비가 엉뚱한 나라 기준으로 계산되거나, 알림이 닿지 않는 번호로 나가거나, 나이 제한 화면이 반대로 동작합니다. 시험이 통과했다는 사실이 오히려 안심하게 만드는 것이 이 상황의 가장 나쁜 점입니다.
어긋난 값은 집계에도 영향을 줍니다. 나라별로 묶어 세는 화면에서 값이 한쪽으로 몰리면 숫자가 실제와 달라 보이고, 그 숫자를 보고 내린 판단까지 함께 틀어집니다.
어떤 짝을 확인해야 하나요?
- 국가와 우편번호: 우편번호의 형식이 그 나라의 규칙과 맞는지 확인합니다.
- 국가와 전화번호: 국가 코드가 주소의 나라와 같은 곳을 가리키는지 봅니다.
- 생년월일과 나이: 계산한 나이가 저장된 값과 같은지 확인합니다.
- 생년월일과 나이 제한: 기준일에 따라 통과와 거절이 올바르게 갈리는지 봅니다.
- 행정 구역과 도시: 두 값이 같은 나라 안의 같은 지역을 가리키는지 확인합니다.
- 이름과 성별: 이름의 형태가 성별 표기와 어긋나지 않는지 봅니다.
표로 정리해 두면 시험이 무엇을 보장하는지 분명해집니다.
| 확인할 짝 | 어긋났을 때 나타나는 증상 |
|---|---|
| 국가와 우편번호 | 배송비와 세금이 다른 나라 기준으로 계산됩니다 |
| 국가와 전화번호 | 알림이 잘못된 국가 코드로 나갑니다 |
| 생년월일과 나이 | 목록의 나이와 상세 화면의 나이가 다릅니다 |
| 생년월일과 나이 제한 | 미성년 가입이 통과되거나 성인이 거절됩니다 |
어디까지 막아야 하나요?
모든 불일치를 오류로 막으면 정상 입력도 거부됩니다. 국가 코드와 우편번호가 드물게 어긋나는 실제 사례도 있고, 이사 중인 사용자처럼 두 나라의 정보가 한동안 섞여 있는 경우도 있습니다. 그래서 규칙마다 강도를 다르게 두는 편이 현실적입니다.
가입처럼 되돌리기 어려운 단계에서는 막고, 프로필 수정처럼 나중에 고칠 수 있는 단계에서는 알림만 주는 방식이 흔합니다. 어느 쪽을 고르든 그 결정을 시험에 반영해야 합니다. 시험이 실제 규칙보다 느슨하면 통과가 의미를 잃고, 더 엄격하면 정상 값이 걸려 시험이 늘 빨간불이 됩니다.
신원 생성기에서는 값이 함께 만들어진다
신원 생성기에서 나오는 기록은 주소, 우편번호, 전화번호, 생년월일이 같은 지역 데이터에서 함께 만들어집니다. 그래서 위에서 말한 짝들이 애초에 어긋나지 않습니다. 어긋난 값을 일부러 만들어 시험하고 싶다면, 생성한 기록에서 한 항목만 다른 나라의 값으로 바꿔 넣으면 됩니다.
생성되는 값은 알고리즘이 합성한 것이며 실존하는 인물이나 주소와 무관합니다. 시험용으로만 쓰고 실제 인물을 사칭하는 데 사용하지 마세요.
나라를 고르는 순서가 왜 중요한가요?
짝 검사의 정확도는 어느 값을 기준으로 삼는지에 달려 있습니다. 주소를 먼저 고르고 그 나라에 맞는 전화번호를 만들면 짝이 자연스럽게 맞습니다. 반대로 나라를 따로 뽑으면 값 하나하나는 형식이 맞아도 서로 다른 나라를 가리키게 됩니다.
그래서 시험 데이터를 만들 때는 기준이 되는 항목을 하나 정하고 나머지를 거기서 이끌어 내는 편이 좋습니다. 무작위 생성기에서 어떤 항목이 기준인지 모른 채 값을 섞으면 어긋난 짝이 대량으로 생기고, 시험은 그 값들을 모두 정상으로 통과시킵니다.
개발자를 위한 메모: 교차 검증을 어느 계층에 두나
- 항목별 검사와 짝 검사를 나눠 둡니다. 두 가지는 성격이 다르므로 실패했을 때 보여 줄 안내도 달라야 합니다.
- 짝 검사는 저장 직전 한 곳에서 수행합니다. 화면마다 따로 하면 규칙이 갈라집니다.
- 무작위 생성기가 어떤 짝을 깨뜨리는지 미리 적어 둡니다. 나라를 따로 뽑는 생성기는 국가와 우편번호, 국가와 전화번호를 거의 항상 어긋나게 만듭니다.
- 경고와 오류를 구분해 두고, 경고는 기록과 함께 남깁니다. 나중에 문제가 생겼을 때 어느 값이 의심스러웠는지 알 수 있습니다.
- 짝 검사 자체를 시험합니다. 일부러 어긋난 값을 넣어 검사가 실제로 걸러 내는지 확인해 두세요.
- 국가 데이터를 늘릴 때 기존 짝 검사가 새 나라를 막지 않는지 확인합니다. 새 나라가 들어오는 순간 오래된 가정이 드러납니다.
- 짝을 만드는 순서를 코드에 드러냅니다. 기준 항목이 무엇인지 읽히면 새 규칙을 어디에 붙일지 분명해집니다.
- 어긋난 값을 일부러 만드는 도구를 시험에 둡니다. 정상 값만 넣으면 짝 검사가 도는지 알 수 없습니다.
다음 단계
가입 양식을 시험하고 있다면 신원 생성기에서 일부러 어긋난 짝을 만들어 검사가 잡아내는지 확인해 보세요. 시험 데이터를 어떤 단위로 묶어 둘지는 신원 테스트 픽스처에서 이어서 정리했습니다.