피드로 돌아가기
Dev.toDevOps
원문 읽기
CI/CD 파이프라인에서 이메일 가입 플로우 테스트 시 격리된 임시 이메일 API를 활용하면 실제 SMTP 전달 경로를 검증할 수 있다
How to Test Email Signup Flows in CI/CD Pipelines
AI 요약
Context
로컬 환경에서는 정상 동작하는 이메일 가입 플로우가 CI 파이프라인에서 타임아웃되거나 모킹된 이메일 전송 함수의 호출만 검증하는 문제가 발생한다. 공유 받은편함, 모킹된 전송기, 하드코딩된 테스트 계정이 병렬 테스트 실행 간 경합 조건과 상태 누적의 원인이 된다.
Technical Solution
- POST /inboxes API를 호출하여 테스트 실행마다 고유한 임시 이메일 주소와 inbox_id를 생성한다.
- 3초 간격으로 GET /inboxes/{inbox_id}/messages 엔드포인트를 폴링하여 이메일 도착을 확인한다.
- 60초 타임아웃을 설정하고 경과 시 SystemExit을 발생시켜 무한 대기 루프를 방지한다.
- 5xx 에러는 일시적 장애로 간주하고 재시도하며, 4xx 에러는 raise_for_status()로 즉시 실패 처리한다.
- 정규표현식 \b(\d{6})\b으로 이메일 본문에서 6자리 OTP 코드를 추출한다.
Impact
GitHub Actions CI 환경 변수 및 secrets에 API 키를 안전하게 저장하여 코드 노출을 방지한다.
Key Takeaway
이메일 테스트의 핵심은 전송 함수 호출 여부가 아니라 실제 SMTP 전달 경로와 수신된 메시지 내용의 검증이다. 테스트 실행마다 격리된 inbox를 소유하는 구조가 병렬 CI 잡의 안정성을 보장한다.
실천 포인트
GitHub Actions CI/CD 환경에서 이메일 가입 플로우 테스트 시 temporary-email-api-examples의 Python 스크립트 패턴을 따라 각 테스트마다 POST /inboxes로 격리된 임시 받은편함을 생성하고 60초 타임아웃으로 폴링하면 실제 SMTP 전달 경로를 검증하면서도 병렬 실행 간 간섭 없는 테스트가 가능하다