랜덤 주소 생성기는 시험용 주소를 매번 손으로 만들지 않아도 되게 해 주는 도구이지만, 이름에 들어 있는 무작위라는 말에 끌려 아무 값이나 뽑으면 오히려 시험이 흔들립니다. 주소는 나라, 행정 구역, 우편번호, 전화 지역 번호가 서로 맞물려 있는 값이라 조각을 따로 뽑으면 어긋난 조합이 만들어집니다. 이 글에서는 무작위가 무엇을 뜻해야 하는지, 재현성이 시험에서 왜 중요한지, 여러 나라 주소를 다룰 때 어디에서 미끄러지는지, 그리고 이 값을 부하 시험과 입력 시험에 어떻게 붙이는지 차례로 살펴봅니다.
무작위로 만든 주소가 왜 쓸모없어지나요?
주소는 조각의 모음이 아니라 조각 사이의 관계로 이루어진 값입니다. 우편번호는 그 지역의 자릿수 규칙을 따르고, 도시 이름은 그 우편번호가 가리키는 지역 안에 있어야 하며, 전화번호의 국가 코드는 주소의 나라와 같아야 합니다. 이 관계를 무시하고 각 칸을 독립적으로 뽑으면 사람 눈에는 그럴듯하지만 검사 규칙을 통과하지 못하는 값이 나옵니다.
더 나쁜 경우는 반대입니다. 형식만 맞으면 통과하는 검사 규칙을 쓰는 서비스에서는 어긋난 조합이 조용히 저장됩니다. 저장된 값은 나중에 배송비 계산이나 세금 계산 단계에서 엉뚱한 분기를 타게 만들고, 그때는 이미 원인을 찾기 어려운 상태가 됩니다. 시험 데이터의 목적은 이런 규칙을 확인하는 것이므로, 값 자체가 규칙을 지키고 있어야 합니다.
그래서 생성기는 나라를 먼저 정하고 그 나라의 지역 데이터에서 필요한 조각을 함께 꺼내는 구조를 씁니다. 행정 구역, 도시, 우편번호, 도로명이 같은 지역 묶음에서 나오므로 조합이 어긋날 수 없습니다. 무작위성은 어느 지역과 어느 거리를 고를지에만 남고, 값 사이의 관계에는 남지 않습니다.
같은 키로 같은 결과가 나오는 것이 왜 중요한가요?
시험은 실패를 재현할 수 있어야 의미가 있습니다. 어떤 입력에서 화면이 깨졌다는 사실을 알았다면, 그 입력을 다시 만들어 내지 못하는 한 원인을 좁힐 수 없습니다. 매번 다른 주소가 나오는 생성기를 쓰면 어제 실패한 시험이 오늘은 통과하고, 그 차이가 코드 때문인지 값 때문인지 알 수 없습니다.
그래서 생성기는 씨앗이 되는 키를 받아 같은 키에 대해 언제나 같은 값을 돌려주는 방식을 씁니다. 키는 시험 이름, 사건 번호, 사용자 식별자처럼 사람이 기억할 수 있는 문자열이면 충분합니다. 같은 키와 같은 나라를 넣으면 완전히 같은 주소가 나오므로, 시험 코드에 주소를 길게 적어 두지 않아도 됩니다.
이 방식은 시연에도 도움이 됩니다. 제품을 보여 주는 자리에서 화면에 뜨는 값이 매번 달라지면 앞뒤 맥락을 설명하기 어렵습니다. 미리 정한 키를 쓰면 발표 자료와 화면의 값이 일치하고, 다른 사람이 같은 키로 같은 화면을 재현할 수 있습니다. 재현성은 편의 기능이 아니라 시험의 전제 조건입니다.
여러 건을 한 번에 받아 시험에 쓰려면 어떻게 하나요?
한 건씩 손으로 복사하는 방식은 값이 열 건만 넘어가도 한계가 옵니다. 목록 화면이나 정렬, 쪽 나누기, 검색을 시험하려면 같은 나라의 값이 수십 건에서 수백 건까지 필요합니다. 이때는 여러 건을 한 번에 만들고 파일로 내려받아 시험 입력으로 쓰는 편이 낫습니다.
파일로 받을 때는 형식을 미리 정해 두어야 합니다. 쉼표로 나눈 형식은 표 계산 도구에서 바로 열리고, 데이터 기반 시험 도구가 그대로 읽을 수 있습니다. 다만 값 안에 쉼표나 따옴표가 들어가는 경우가 있으므로, 나누는 규칙을 직접 만들지 말고 이미 정해진 형식 규칙을 따르는 편이 안전합니다. 주소에는 쉼표가 자연스럽게 들어가기 때문입니다.
같은 파일을 반복해서 쓰는 방식도 함께 준비해 두면 좋습니다. 값이 담긴 파일을 버전 관리에 넣어 두고 시험에서 읽게 하면, 값이 바뀌었을 때 어떤 결과가 달라졌는지 비교할 수 있습니다. 반대로 값 생성 자체를 시험 안에서 호출하는 방식은 파일을 관리할 필요가 없지만, 생성 규칙이 바뀌면 시험 결과가 함께 흔들립니다.
나라를 섞어 만들 때 어디에서 미끄러지나요?
가장 흔한 사고는 주소와 연락처가 다른 나라를 가리키는 경우입니다. 주소는 한 나라에서 만들고 전화번호는 다른 나라 목록에서 복사하면 국가 코드가 어긋납니다. 화면은 두 값을 각각 형식 검사로 통과시키므로 오류가 나지 않고, 알림 발송이나 요금 계산 단계에서야 문제가 드러납니다.
두 번째는 행정 구역과 우편번호의 불일치입니다. 나라마다 우편번호가 행정 구역을 얼마나 좁히는지가 다르므로, 다른 나라의 규칙을 그대로 가져다 검사하면 정상 값이 거부되거나 어긋난 값이 통과합니다. 나라별로 검사 규칙을 따로 두고, 그 규칙을 값 생성 쪽과 공유하는 편이 안전합니다.
세 번째는 문자 집합과 표기 관행입니다. 어떤 나라는 주소에 악센트 문자가 들어가고, 어떤 나라는 우편번호에 알파벳이 섞입니다. 자릿수만 세는 검사를 만들면 알파벳이 들어간 우편번호가 전부 거부됩니다. 나라별 형식을 어떻게 다루는지는 국가별 우편번호 형식에서 따로 정리했습니다.
무작위 주소를 부하 시험에 쓰면 무엇이 달라지나요?
부하 시험에서는 값의 정확도보다 값의 크기와 분포가 중요해 보입니다. 그러나 어긋난 값이 섞이면 검증 단계에서 거부되어 실제로 저장되는 건수가 줄고, 측정한 처리량이 실제보다 낮게 나옵니다. 규칙을 지키는 값으로 부하를 걸어야 측정값이 의미를 가집니다.
값의 분포도 의도적으로 설계할 수 있습니다. 같은 나라의 같은 도시만 반복하면 목록 조회가 캐시에 머물러 실제 분산 환경의 동작을 보여 주지 못합니다. 여러 지역과 여러 나라를 섞고, 일부는 같은 값을 반복해서 넣어 캐시가 걸린 경우와 걸리지 않은 경우를 함께 보는 편이 좋습니다.
부하 시험용 값과 기능 시험용 값을 나누어 두는 것도 방법입니다. 기능 시험은 재현 가능한 고정값으로 실패 원인을 추적하고, 부하 시험은 매번 새로 만든 값으로 편향을 피합니다. 같은 생성기를 쓰더라도 어떤 키를 쓰는지에 따라 두 목적을 모두 만족할 수 있습니다.
국가별로 다른 주소를 어떻게 관리해야 하나요?
나라를 늘리는 일은 생각보다 많은 결정을 요구합니다. 어떤 나라를 지원할지, 각 나라에서 어떤 필드가 필수인지, 어떤 필드가 아예 존재하지 않는지, 우편번호가 없는 나라는 어떻게 표현할지를 정해야 합니다. 이 결정을 코드 곳곳에 흩어 두면 나라를 하나 더할 때마다 여러 곳을 고쳐야 합니다.
그래서 국가와 행정 구역 정보를 데이터로 두고, 생성기와 검증기가 같은 데이터를 참조하게 만드는 편이 좋습니다. 같은 원천을 보면 값 생성 규칙과 검사 규칙이 서로 어긋나지 않습니다. 나라별로 어떤 필드가 존재하는지 정리한 목록은 국가별 주소 형식에서 비교해 두었고, 어느 나라를 시험 범위에 넣을지는 시험 데이터에 쓸 국가 고르기에서 다룹니다.
무작위 값의 품질은 어떻게 판단하나요?
무작위라고 해서 아무 값이나 좋은 것은 아닙니다. 좋은 시험용 주소는 실제 분포와 비슷하게 나옵니다. 도시 이름이 몇 개에만 몰려 있거나 도로명이 매번 같은 값이면, 목록 화면이나 중복 검사 시험이 실제와 다른 조건에서 돌아갑니다.
품질을 판단하는 가장 단순한 방법은 많이 만들어 놓고 세어 보는 것입니다. 지역별로 값이 얼마나 나뉘는지, 같은 값이 얼마나 반복되는지, 길이의 분포가 어떤지를 보면 쏠림이 드러납니다. 이 점검을 시험 코드에 넣어 두면 나중에 지역 데이터를 바꾸었을 때도 같은 문제를 바로 발견할 수 있습니다.
너무 고르게 나오는 것도 문제입니다. 실제 주소는 인구가 많은 지역에 몰려 있으므로, 모든 지역에서 똑같은 수가 나오면 실제와 다른 분포가 됩니다. 다만 시험에서 분포가 중요한지는 목적에 따라 다르므로, 분포를 맞출지 여부는 시험의 목적과 함께 정하는 편이 좋습니다.
값이 재현되지 않을 때 무엇을 의심해야 하나요?
먼저 값을 만드는 씨앗이 어디에서 오는지 확인합니다. 실행할 때마다 달라지는 값이나 현재 시각을 씨앗으로 쓰면, 같은 조건으로 다시 만들어도 같은 값이 나오지 않습니다. 시험용으로는 씨앗을 시험 코드에서 정해 주는 편이 안전합니다.
다음은 호출 순서를 확인합니다. 하나의 씨앗에서 여러 값을 이어서 만들면, 앞에서 몇 개를 더 만들었는지에 따라 뒤의 값이 달라집니다. 같은 묶음을 얻으려면 씨앗뿐 아니라 만들기 시작한 위치와 개수도 같아야 합니다.
마지막은 지역 데이터의 판본을 확인합니다. 씨앗과 순서가 같아도 지역 목록이 바뀌면 결과가 달라집니다. 목록을 갱신한 시점을 기록해 두고, 재현이 필요한 시험에는 그 시점의 데이터를 함께 고정해 두는 편이 좋습니다.
값이 실제 주소와 겹치지 않게 하려면 어떻게 하나요?
합성 주소를 만들 때 실제로 존재하는 주소와 우연히 같아질 가능성은 완전히 없앨 수 없지만, 줄이는 방법은 있습니다. 실제 주소 목록에 있는 조합을 그대로 쓰지 않고, 조합 규칙을 우리가 정한 범위 안에서만 만들면 겹칠 여지가 크게 줄어듭니다.
번호 대역을 따로 두는 방법도 흔히 씁니다. 건물 번호나 호수에 실제 배송에 쓰이지 않는 대역을 정해 두면, 값만 보고도 시험용인지 알 수 있고 우연히 실존 주소와 일치할 가능성도 낮아집니다. 이 규칙은 팀 안에서 문서로 남겨 두어야 새로 들어온 사람도 같은 방식을 씁니다.
우편번호도 같은 방식으로 다룰 수 있습니다. 배달에 쓰이지 않는 대역을 정해 두면 값의 출처가 분명해지고, 나중에 데이터를 점검할 때 시험용 값을 골라내기 쉬워집니다. 다만 이 대역이 우편 사업자의 규칙과 어긋나면 형식 검사에서 걸릴 수 있으므로, 형식은 실제 규칙을 따르면서 내용만 시험용으로 두는 편이 안전합니다.
여러 건을 다룰 때 식별자를 어떻게 붙이나요?
값을 여러 건 만들면 어느 값이 어느 시험에서 쓰였는지 알기 어려워집니다. 만들어진 값 옆에 실행 번호를 붙여 두면 실패한 시험의 입력을 바로 찾아낼 수 있고, 같은 실행에서 만들어진 값들을 한 묶음으로 다시 재현할 수도 있습니다.
식별자는 값 자체에 섞지 않는 편이 좋습니다. 주소 문자열 안에 시험 식별자를 넣으면 형식 검사에서 걸리거나 실제 주소와 다른 모양이 됩니다. 값은 형식을 지키게 두고, 식별자는 옆 칸이나 파일 이름에 두는 방식이 안전합니다.
묶음을 어떻게 나눌지도 정해 두어야 합니다. 지역별로 한 묶음씩 만들지, 화면 하나에 필요한 만큼만 만들지를 정하지 않으면 실행마다 묶음의 구성이 달라집니다. 시험 코드가 기대하는 묶음의 모양을 문서로 남겨 두세요.
무작위 주소를 문서화할 때 무엇을 남겨야 하나요?
시험용 주소를 쓰는 팀이 여러 곳이라면 값이 어디에서 왔는지 알 수 있어야 합니다. 어떤 도구로 만들었는지, 어느 나라의 지역 자료를 썼는지, 언제 만든 값인지를 남겨 두면 나중에 값을 다시 만들거나 갱신할 때 도움이 됩니다.
규칙도 함께 남겨야 합니다. 도시와 우편번호를 같은 지역 자료에서 뽑았다는 사실, 건물 번호를 어떤 범위에서 만들었는지처럼 값의 생김새를 만든 규칙을 적어 두면, 새로 들어온 사람도 같은 방식으로 값을 만들 수 있습니다.
반대로 남기지 말아야 할 것도 있습니다. 시험용 주소라도 실제 사람의 이름이나 연락처가 붙어 있으면 관리 대상이 되므로, 시험 코드나 문서에 그런 값을 복사해 두지 마세요. 주소 자체는 그대로 공유해도 되지만 함께 붙은 값은 그렇지 않습니다.
랜덤 주소 생성기에서 바로 만들어 보기
랜덤 주소 생성기에서는 나라를 고르고 원하는 만큼 값을 만들어 한 번에 받을 수 있습니다. 같은 키를 다시 넣으면 같은 묶음이 나오므로, 실패를 재현해야 하는 시험과 다양한 입력이 필요한 시험에 같은 도구를 쓸 수 있습니다. 미국 주소의 구성 요소가 궁금하다면 미국 주소 생성기를 함께 읽어 보시길 권합니다.
여기서 만들어지는 주소는 알고리즘이 합성한 테스트 데이터이며 실존하는 건물이나 수취인과 무관합니다. 형식과 자릿수 규칙은 실제와 같지만 어디에도 배달되지 않고, 그 지역에 실제로 존재하는 주소인지도 보장하지 않습니다.
시험용 주소 데이터의 경계는 어디인가요?
할 수 있는 것은 규칙과 흐름의 확인입니다. 필드 사이의 대조, 자릿수와 문자 집합, 목록 화면의 동작, 오류 처리, 저장 길이의 한계처럼 규칙에 관한 것은 모두 시험할 수 있습니다. 여러 나라 값을 섞었을 때 화면이 어떻게 반응하는지도 확인할 수 있습니다.
할 수 없는 것도 분명합니다. 실제 배달이 가능한지는 알 수 없고, 주소 정규화나 좌표 변환 같은 외부 서비스가 어떤 결과를 돌려줄지도 미리 알 수 없습니다. 무엇보다 이 값은 실제 사람의 주소가 아니므로 본인 확인이나 실명 확인 절차에 쓰면 안 됩니다.
시험용 값은 시험용으로만 쓰고, 운영 데이터와 섞이지 않도록 알아볼 수 있는 표식을 남겨 두세요. 무작위로 만든 값이라도 사람 이름과 연락처가 붙으면 관리 대상이 되므로, 언제 지울지와 어떻게 구분할지를 처음부터 정해 두는 편이 안전합니다.