MoeMail
블로그로 돌아가기

OTP·2FA 로그인 테스트를 자동화하는 방법

이중 인증 로그인은 번거롭다는 이유로 팀들이 자동화 테스트에서 흔히 건너뛰는 흐름이지만, 정작 회귀 버그가 가장 뼈아픈 곳이기도 합니다. 경우는 두 가지이고, 둘 다 자동화할 수 있습니다. 밀접하게 연관된 흐름으로는 비밀번호 재설정 메일 테스트매직 링크 로그인을 참고하세요. 이 글은 개발자를 위한 이메일 테스트 가이드의 일부입니다.

경우 1: 이메일 또는 SMS OTP

코드가 이메일로 도착한다면 레시피는 여느 이메일 테스트와 같습니다. 일회용 받은편지함을 마련하고, 로그인을 발동시키고, API로 메시지를 읽어 숫자를 추출하면 됩니다. 테스트마다 받은편지함 하나를 만들고 OTP가 도착할 때까지 폴링하세요(또는 webhook을 쓰세요).

const inbox = await createInbox()
// ...submit the login form with inbox.address...
const msg = await waitForMessage(inbox.id, 30000)
const otp = msg.text.match(/[0-9]{6}/)[0]
// ...type otp into the verification field...

브라우저 기반의 전체 버전은 Playwright 이메일 테스트 튜토리얼을, 받은편지함 헬퍼는 일회용 이메일 API 가이드를 참고하세요.

경우 2: 인증 앱(TOTP)

2FA가 인증 앱을 쓴다면 휴대폰은 필요 없습니다. 코드는 공유 시크릿으로부터 TOTP 알고리즘으로 파생되기 때문입니다. 그 시크릿을 테스트용 환경 변수로 저장해 두고, otplib 같은 라이브러리로 테스트 안에서 코드를 생성하세요.

import { authenticator } from 'otplib'

const token = authenticator.generate(process.env.TOTP_SECRET)
// ...type token into the 2FA field...

이 시크릿은 앱이 설정용 QR 코드에 인코딩하는 바로 그 값입니다. 등록 과정에서 드러내어 테스트 환경 전용으로만 보관하세요.

테스트 환경 전략

두 경로 모두 마땅치 않다면, 팀과 상의해 테스트 전용 우회로를 마련하세요. 스테이징에서 항상 통하는 특수 토큰, 지정된 테스트 사용자에 한해 2FA 비활성화, 또는 CI IP에서 온 요청에 한해 건너뛰기 같은 것들이죠. 실제 로그인 경로는 그대로 거치면서도 가장 작은 우회로를 고르세요.

시작하기

이메일 기반 코드라면 메일박스를 만들어 OpenAPI로 읽고, TOTP라면 공유 시크릿을 연결하세요. 어느 쪽이든 테스트마다 받은편지함이나 시크릿을 하나씩 유지하면 2FA 스위트가 안정적으로 유지됩니다.