받은 편지함의 혼란 없이 패스워드리스 로그인 테스트하기
데모에서는 패스워드리스(Passwordless) 로그인이 쉬워 보입니다. 사용자가 이메일을 입력하면, 매직 링크가 도착하고, 세션이 시작됩니다.
스테이징 환경에서는 이 흐름이 복잡해집니다. 링크가 공유 받은 편지함이나 오래된 별칭(alias)으로 전달되어 노이즈를 발생시키기 때문입니다.
패스워드리스 인증을 하나의 완전한 시스템으로 다뤄야 합니다. JavaScript 클라이언트, Node.js 백엔드, 이메일 전송, 그리고 세션을 모두 테스트해야 합니다. 받은 편지함을 테스트 과정에서 생략한다면, API 테스트를 통과하더라도 결함이 있는 흐름을 배포하게 될 수도 있습니다.
일반적인 실패 사례는 다음과 같습니다:
- 재시도 후 백엔드에서 링크를 두 개 보냄.
- 이메일이 잘못된 호스트를 가리킴.
- 오래된 링크가 예상보다 오래 작동함.
- 쿠키가 설정되기 전에 프론트엔드에서 사용자를 로그인 상태로 표시함.
매 테스트 실행 시 격리된 받은 편지함을 사용하세요. 이렇게 하면 테스트 데이터가 팀 메일함으로 유출되는 것을 방지할 수 있습니다. 스테이징 환경에서는 테스트 실행을 분리하기 위해 일회용 이메일 서비스를 사용하세요.
격리는 디버깅을 쉽게 만듭니다. 테스트가 실패했을 때, 하나의 받은 편지함과 하나의 사용자 여정(user journey)만 보여야 합니다. 어떤 메시지가 어떤 빌드에 속하는지 정확히 알 수 있어야 합니다.
좋은 테스트는 다음 단계들을 순서대로 확인합니다:
- 계정 존재 여부를 드러내지 않고 로그인 요청이 성공함.
- 정확히 하나의 새로운 매직 링크가 도착함.
- 링크 호스트가 스테이징 도메인과 일치함.
- 링크가 유효한 세션을 시작함.
- 동일한 링크를 재사용할 경우 실패함.
- 수동 새로고침 없이 앱의 네비게이션이 업데이트됨.
Node.js 측에서는 로그에 상관관계 ID(correlation ID)를 첨부하세요. 요청부터 이메일 전송, 그리고 최종 세션에 이르기까지 이를 활용하십시오. 이는 이메일 전송이 느려지거나 중복될 때 버그를 찾는 데 도움이 됩니다.
모든 테스트를 이메일 테스트로 대체하지 마세요. 토큰 로직과 세션 규칙에는 빠른 유닛 테스트를 사용하세요. 이메일 경로는 실제 사용자 경험이 제대로 작동하는지 증명하는 용도로 사용하십시오.
배포 전 체크리스트:
- 한 번의 로그인 요청이 단 하나의 활성 링크만 생성함.
- 스테이징에서 가장 최근 이메일을 쉽게 파싱할 수 있음.
- 링크가 올바른 호스트에서 작동함.
- 링크를 재사용할 수 없음.
- 로그아웃 후 다시 로그인하면 깨끗한 새 토큰이 생성됨.
