메뉴

주소 테스트 데이터: 픽스처를 만들고 관리하는 법

주소 테스트 데이터를 픽스처로 만들 때 지켜야 할 원칙과, 값이 굳어 생기는 문제를 피하는 관리 방법을 정리합니다.

게시일

  • 테스트 데이터
  • 픽스처

주소 테스트 데이터는 화면과 저장 계층이 여러 나라의 입력을 제대로 다루는지 확인하는 데 쓰이는 값입니다. 문제는 한 번 만들어 둔 값이 오래 살아남는다는 점입니다. 처음에는 잘 맞던 픽스처도 시간이 지나면 검사하려는 동작과 어긋나기 시작합니다.

픽스처에 실제 주소를 쓰면 왜 문제인가요?

실제로 존재하는 집 주소를 픽스처에 넣으면 그 값이 저장소와 시험 로그, 화면 캡처를 통해 계속 퍼집니다. 개인정보에 해당할 수 있는 값이 개발자 노트북과 시험 서버에 남는 셈입니다. 나중에 지우려 해도 어디까지 퍼졌는지 파악하기 어렵습니다.

또 하나의 문제는 값이 검증을 통과해 버린다는 점입니다. 진짜 주소이므로 형식 검사는 물론이고 실재 여부 조회까지 통과합니다. 그래서 데이터가 잘못 들어가는 경로를 시험이 잡아내지 못합니다.

실제 주소를 쓰면 값을 나중에 바꾸기가 어렵다는 점도 문제입니다. 이미 여러 시험이 그 값에 기대고 있으면 하나를 고칠 때 관련된 시험이 함께 흔들립니다. 결과적으로 손대기 어려운 값이 오래 남고, 그 사이에 지원 국가와 검사 규칙은 계속 바뀝니다.

픽스처를 파일로 나눌 때는 성격을 기준으로 나누는 편이 좋습니다. 형식 확인용 값과 저장 계층 시험용 값은 바뀌는 이유가 다르므로, 한 파일에 섞어 두면 어느 쪽 때문에 고쳤는지 알기 어려워집니다. 시험 실행 시간이 길다면 모든 시험이 모든 픽스처를 읽지 않도록 나누는 것이 도움이 됩니다.

어떤 주소를 픽스처에 넣어야 하나요?

형식은 실제와 같되 실존하지 않는 값을 씁니다. 이렇게 하면 형식 검사는 정상적으로 통과하면서도 개인정보 문제가 생기지 않습니다. 랜덤 주소 생성기로 만든 값이 이 조건에 맞습니다.

픽스처는 한 나라만 담지 않는 편이 좋습니다. 우편번호를 쓰지 않는 나라, 우편번호가 숫자가 아닌 나라, 행정구역 단계가 세 단계인 나라를 각각 하나씩 넣어 두면 코드가 특정 형식에 기대고 있는지 드러납니다.

픽스처 유형 확인하려는 것 예시로 넣을 값의 성격
숫자 우편번호 국가 자릿수 검사 고정 길이 숫자
문자 포함 우편번호 국가 숫자만 허용하는 코드 적발 숫자와 문자가 섞인 값
우편번호 없는 국가 빈 값 처리 우편번호 열이 비어 있는 값
긴 도로명 화면 잘림과 저장 길이 이름이 유난히 긴 도로

픽스처는 얼마나 자주 바꿔야 하나요?

정해진 주기가 있는 것은 아니고, 바뀌는 계기로 판단합니다. 검사 규칙을 고쳤을 때, 지원 국가를 늘렸을 때, 픽스처를 쓰는 시험이 실패할 때가 대표적입니다. 이때 값을 고치지 않고 시험 쪽을 고치면 픽스처가 무의미해집니다.

값이 자주 바뀌면 시험 결과가 흔들리므로, 픽스처는 한곳에 모아 두고 여러 시험이 같은 값을 나눠 쓰게 합니다. 대신 한 값을 고치면 여러 시험이 함께 영향을 받는다는 점을 기억해야 합니다.

값이 굳어서 생기는 문제

픽스처를 만들 때 사용한 형식이 그대로 굳으면, 지원 범위가 넓어져도 시험은 옛 형식만 확인하게 됩니다. 겉으로는 모든 시험이 통과하지만 실제로는 확인하지 않는 영역이 생기는 것입니다.

이 문제를 막으려면 픽스처가 어떤 동작을 확인하기 위한 것인지 이름이나 주석으로 남겨 두는 편이 좋습니다. 값 자체는 나중에 바뀔 수 있지만, 확인하려는 동작은 잘 바뀌지 않기 때문입니다.

픽스처 목록을 정할 때는 서비스에서 실제로 많이 들어오는 국가를 먼저 넣고, 예외적인 형식은 그다음에 채우는 순서가 좋습니다. 자주 쓰이지 않는 나라만 넣어 두면 시험은 통과하지만 정작 중요한 나라의 형식은 확인하지 않는 상태가 됩니다.

국가를 늘릴 때는 그 나라의 픽스처를 함께 추가해야 시험이 의미를 유지합니다. 지원 국가 목록과 픽스처 목록이 따로 관리되면 둘이 어긋나고, 어긋난 사실을 아무도 알아차리지 못합니다. 목록을 한곳에서 만들고 두 곳이 같은 값을 쓰게 하는 편이 안전합니다.

시험 데이터를 다시 만들 때 주의할 점

주소를 저장하는 계층을 시험할 때는 값의 출처보다 형태가 중요합니다. 다만 저장 길이 제한처럼 실제 데이터에서 온 제약을 시험하려면, 그 제약을 상수로 적어 두고 픽스처가 그 한계를 넘는지 확인해야 합니다. 주소 검증과 주소 정규화에서 설명한 대로 원문과 정규화 결과를 함께 저장하는 구조라면, 픽스처도 두 값을 한 쌍으로 넣어야 합니다.

여러 개발자가 같은 시험 데이터를 필요로 한다면 매번 손으로 만드는 대신 생성 절차를 문서로 남기는 편이 좋습니다. 시험 데이터를 일괄로 채우는 방법은 스테이징 데이터베이스에 가짜 데이터 채우기에서 다룹니다.

랜덤 주소 생성기 활용하기

랜덤 주소 생성기에서 국가를 바꿔 가며 값을 만들면, 형식이 서로 다른 픽스처를 짧은 시간에 모을 수 있습니다. 만든 값은 파일로 저장해 두고 여러 시험이 함께 읽게 하면 관리가 쉬워집니다.

생성되는 주소는 모두 합성된 값이며 실존하는 건물과 무관합니다. 소프트웨어 시험 전용이고, 실제 배송이나 거주 증명에는 쓸 수 없습니다.

개발자를 위한 메모: 픽스처를 다루는 규칙

  • 실존 주소를 픽스처에 넣지 않습니다. 코드 검토에서 이 항목을 따로 확인하는 것이 좋습니다.
  • 픽스처는 파일 하나에 모으고, 시험 코드에 값을 직접 적지 않습니다. 값이 흩어지면 갱신할 때 반드시 빠뜨립니다.
  • 각 픽스처가 확인하려는 동작을 이름에 드러냅니다. 값만 보고 용도를 알 수 없으면 나중에 지워도 되는 값인지 판단할 수 없습니다.
  • 경계값을 따로 모읍니다. 빈 문자열, 지나치게 긴 값, 우편번호가 없는 국가를 각각 별도 항목으로 둡니다.
  • 픽스처를 고칠 때는 그 값을 쓰는 시험이 무엇인지 먼저 찾습니다. 한 값을 고쳐 여러 시험이 깨지는 일이 흔합니다.
  • 개인정보가 섞여 들어가지 않도록 저장소에 올리기 전에 한 번 더 확인합니다.

다음 단계

현재 픽스처에 실존하는 주소가 들어 있는지 먼저 훑어보고, 있다면 합성 값으로 바꾸는 작업을 목록에 올리세요. 그다음 우편번호를 쓰지 않는 나라와 문자가 섞인 우편번호 국가를 각각 한 개씩 추가해, 지금 통과하는 시험이 여전히 통과하는지 확인해 보면 좋습니다.

이어 읽기

랜덤 주소 생성기 관련 글