실제로 무엇을 테스트하는가
인증 플로우는 여러 움직이는 부품으로 이루어지며 각각 독립적으로 고장 날 수 있습니다. 좋은 테스트는 정상 경로와 실패 경로를 모두 다룹니다. 실패 처리야말로 사용자 신뢰가 얻어지거나 잃어지는 곳이기 때문입니다.
- 발송: 유효한 번호에 대해 코드가 생성되고 전달됩니다.
- 수신·확인: 올바른 코드가 수락되고 세션이 승급됩니다.
- 거부: 틀리거나, 만료되거나, 재사용된 코드가 거부됩니다.
- 한도: 속도 제한과 재전송 쿨다운이 설계대로 동작합니다.
- 폴백: 채널 에스컬레이션과 오류 상태가 올바르게 렌더링됩니다.
제공업체 테스트 자격증명과 매직 코드 사용
모든 주요 제공업체는 실제 메시지를 보내지 않고 플로우를 실행할 방법을 제공합니다. Twilio에는 성공과 특정 실패 응답을 시뮬레이션하는 테스트 자격증명과 매직 전화번호가 있고, Vonage, Sinch, MessageBird는 샌드박스 모드와 테스트 번호를 제공합니다. 로컬과 CI 실행에서 이것들을 사용해 테스트 스위트가 실제 통신사를 절대 건드리지 않게 하세요.
- Twilio: 성공/무효/실패 결과를 강제하는 테스트 자격증명 + 매직 번호.
- 그 외: 샌드박스 API 키와 지정 테스트 번호.
- 테스트와 라이브 자격증명을 분리되고 명확히 이름 붙인 환경 설정에 두세요.
CI에서 라이브 자격증명으로 테스트를 절대 실행하지 마세요 — 루프 버그 하나가 수천 개의 유료 메시지를 보내고 발신자를 플래그되게 할 수 있습니다.
여러분이 제어하는 테스트 번호 발급
실제로 메시지를 전달하는 엔드투엔드 테스트를 위해, 테스트 수신자로 여러분이 소유한 프로그래머블 번호를 발급하고, 제공업체의 메시징 API를 통해 전달된 코드를 다시 읽어 확인 단계에 투입하세요. 번호와 앱을 여러분이 소유하므로 이는 여러분 자신의 시스템에 대한 깔끔한 폐루프 테스트입니다.
- 1
테스트 번호 발급
제공업체 계정에서 테스트 환경 전용 프로그래머블 번호를 만드세요.
- 2
발송 트리거
여러분 자신의 가입/확인 엔드포인트를 호출해 앱이 테스트 번호로 실제 코드를 보내게 하세요.
- 3
API로 코드 읽기
제공업체 API를 통해 인바운드 메시지를 가져와 코드를 프로그래밍적으로 추출하세요.
- 4
완료 및 단언
코드를 확인 엔드포인트에 제출하고 세션이 승급됐는지 단언한 뒤 번호를 해제하세요.
CI에서 자동화
위 과정을 파이프라인에 연결해 모든 빌드에서 인증이 검사되게 하세요. 모든 커밋에서 실행되는 빠른 단위·통합 테스트에는 모의/샌드박스 경로를 쓰고, 비용을 통제하기 위해 실제 폐루프 테스트(소유 번호 사용)는 야간이나 릴리스 전 단계로 유보하세요.
- 빠른 레인: 모든 커밋에서 제공업체를 모의하거나 테스트 자격증명 사용.
- 느린 레인: 소유 번호로의 실제 발송 테스트를 야간이나 릴리스 전에.
- 실패 경로도 단언: 만료 코드, 틀린 코드, 속도 제한 응답.
- 합격/불합격뿐 아니라 전달 지연 회귀에 대해 경보하세요.
로직뿐 아니라 전달률도 테스트
로직 테스트는 코드가 올바름을 증명하지만 메시지가 실제 세계에서 도착함을 증명하지는 않습니다. 주요 통신사와 국가의 번호로 주기적으로 실제 테스트 트래픽을 보내 실제 전달률과 지연을 측정해, 라우팅이나 필터링 회귀를 사용자보다 먼저 잡으세요.
전달 문제는 종종 국가별·통신사별로 나타납니다. 실제 목적지 구성에 걸쳐 모니터링을 순환하세요 — 전달률 가이드가 이유를 설명합니다.