Blog

Tips, guides, and privacy advice

← Back to Blog
개발자 팁

실제 받은편지함을 사용하지 않고 비밀번호 재설정 흐름을 테스트하는 방법

2026년 1월 7일·6 min read

비밀번호 재설정 테스트가 소홀히 취급되는 이유

비밀번호 재설정은 모든 애플리케이션에서 가장 많이 공격받는 흐름 중 하나이면서 역설적으로 가장 적게 테스트되는 흐름 중 하나입니다. 이유는 간단합니다. 개발자들은 개발 중에 자신의 이메일 주소를 사용합니다. 세 번째 또는 네 번째 테스트 실행 후에는 받은편지함이 동일해 보이는 "비밀번호 재설정" 메시지로 파묻힙니다. 제목이 하나의 스레드로 묶이고, 어떤 링크가 어떤 실행에 속하는지 추적을 잃으며, 결국 너무 번거로워져 철저히 테스트하기가 어려워집니다. 지난번에 작동했으니 이번에도 작동한다는 가정에 의존하기 시작합니다. 바로 그런 종류의 안일함이 심각한 버그가 프로덕션에 침투하도록 허용합니다.

걸린 위험이 큽니다. 비밀번호 재설정은 사용자가 계정을 복구하는 주요 메커니즘이며 — 공격자가 계정을 탈취하려 시도하는 메커니즘이기도 합니다. 만료되지 않는 결함 있는 토큰, 재사용될 수 있는 링크, 또는 속도 제한이 없는 재설정 엔드포인트는 사소한 자격 증명 유출을 완전한 계정 침해로 바꿀 수 있습니다. Have I Been Pwned가 색인화한 데이터에 따르면 과거 유출에서 나온 수십억 개의 자격 증명이 활발히 유통되고 있으며, 공격자들은 발견한 계정에 대해 일상적으로 비밀번호 재설정을 시도합니다. 여러분의 재설정 흐름에 약점이 있다면 그들은 그것을 찾아낼 것입니다.

비밀번호 재설정 흐름에서 실제로 테스트해야 하는 것

단순한 "이메일을 보내나" 확인 테스트로는 충분하지 않습니다. OWASP Authentication Cheat Sheet는 안전한 비밀번호 재설정을 위한 포괄적인 요구사항 세트를 설명하며, 각 항목은 전용 테스트를 받을 가치가 있습니다. 실제로 검증해야 할 것들의 전체 목록은 다음과 같습니다:

  • 이메일 전달 — 재설정 이메일이 도착하는지, 그리고 신속하게 도착하는지? 10분이 걸리는 재설정 이메일은 사용자를 혼란스럽게 하고 지원 티켓을 유발합니다.
  • 링크 정확성 — 이메일의 링크가 URL이나 본문에 올바른 토큰을 담아 올바른 페이지로 이동하는지?
  • 토큰 만료 — 25시간을 기다린 후 링크를 클릭하면 애플리케이션이 만료된 토큰을 올바르게 거부하는지? 이론적으로가 아니라 명시적으로 테스트하세요.
  • 일회성 사용 강제 — 동일한 재설정 링크를 두 번 클릭할 수 있는지? 비밀번호 변경이 성공한 후에는 토큰이 무효화되어야 합니다. 이는 OWASP에 따른 필수 요구사항이며 자주 건너뛰어집니다.
  • 재요청 시 무효화 — 사용자가 재설정을 요청한 다음 2분 후에 또 다른 재설정을 요청하면 첫 번째 토큰이 무효화되는지? 두 토큰이 동시에 유효한 것은 보안 결함입니다.
  • SSO 계정 처리 — Google, GitHub 또는 다른 OAuth 공급자를 통해 등록한 사용자가 비밀번호 재설정을 요청하면 어떻게 되는지? 이 흐름은 계정에 재설정할 로컬 비밀번호가 없기 때문에 자주 깨집니다.
  • HTTPS 강제 — 재설정 링크가 HTTPS를 사용하는지? 일반 HTTP를 통한 재설정 링크는 토큰을 네트워크 가로채기에 노출시킵니다.
  • 오류 메시지 품질 — 링크가 만료되었을 때 애플리케이션이 명확하고 유용한 메시지를 표시하는지, 아니면 일반적인 500 오류를 표시하는지? 여기서 사용자 경험이 중요합니다.
  • 속도 제한 — 누군가가 동일한 주소에 대해 1분에 10개의 재설정 요청을 보내면 어떻게 되는지? 열거와 남용을 방지하는 합리적인 제한이 있어야 합니다.
  • 이메일 열거 방지 — 이메일 주소가 시스템에 존재하는지 여부에 따라 응답이 다른지? 다른 응답은 공격자가 유효한 계정을 열거할 수 있게 하는 정보 유출입니다.

임시 이메일 접근 방식 — 단계별 안내

이 모든 테스트 과제에 대한 가장 깔끔한 해결책은 각 테스트 실행마다 새로운 임시 이메일 주소를 사용하는 것입니다. 실제로 어떻게 작동하는지 정확히 설명합니다.

임시 받은편지함을 열고, 상단에 표시된 주소를 복사한 다음 애플리케이션으로 이동합니다. 그 주소로 새 테스트 계정을 등록합니다 — 가입 인증 이메일을 테스트할 때와 똑같은 출발점입니다. 로그인 페이지로 이동하여 "비밀번호를 잊으셨나요"를 클릭합니다. 주소를 입력하고 요청을 제출합니다. 임시 받은편지함으로 다시 전환합니다 — 재설정 이메일이 실시간으로, 보통 몇 초 이내에 도착합니다. 전체 이메일을 보고, 제목과 발신자 세부 정보를 검사하고, 링크를 클릭하고, 올바른 페이지로 이동하는지 확인하고, 새 비밀번호를 설정하고, 로그인이 작동하는지 확인할 수 있습니다. 시작부터 끝까지 총 소요 시간은 2분 미만입니다. 두 번째 시나리오를 테스트해야 할 때는 새 브라우저 탭을 열기만 하면 됩니다 — 다른 주소를 가진 완전히 독립적인 받은편지함을 얻습니다. 정리도, 스레드 혼란도, 이전 실행에서 실수로 잘못된 링크를 클릭할 위험도 없습니다.

실제 예시 안내: 출시 전 테스트

저는 인증 라이브러리 업데이트를 포함한 소규모 출시를 위해 SaaS 애플리케이션을 준비하고 있었습니다. 비밀번호 재설정 흐름은 명시적으로 변경되지 않았지만, 인증 라이브러리 업데이트는 이메일 토큰 생성을 조용히 망가뜨리는 습성이 있습니다. 제가 진행한 전체 순서는 다음과 같습니다.

저는 각각 독립적인 임시 받은편지함이 있는 다섯 개의 브라우저 탭을 열었습니다. 탭 1: 정상 경로 — 등록, 재설정 요청, 2분 이내에 링크 사용, 로그인 확인. 탭 2: 만료된 토큰 — 등록, 재설정 요청, 이메일이 도착하기를 기다린 후 25시간 동안 옆에 두었다가(다음 날 다시 돌아왔습니다) 링크를 시도했습니다. 애플리케이션이 올바르게 거부했습니다. 탭 3: 이중 재설정 — 등록, 재설정 요청, 즉시 다시 재설정 요청, 그런 다음 두 링크를 모두 시도했습니다. 첫 번째 링크는 무효화되었어야 했고, 실제로 그랬습니다. 탭 4: 사용된 링크 재사용 — 등록, 재설정 요청, 링크를 사용해 비밀번호를 성공적으로 변경한 다음 동일한 링크를 두 번째로 시도했습니다. 올바르게 거부되었습니다. 탭 5: 속도 제한 — 속도 제한기가 작동하는지 확인하기 위해 재설정 요청을 빠르게 발생시켰습니다.

모든 시나리오가 깨끗하고 독립적인 받은편지함을 사용했습니다. 어떤 이메일이 어떤 테스트에 속하는지에 대한 모호함이 없었습니다. 인증 라이브러리 업데이트는 아무것도 망가뜨리지 않았고, 저는 문서화된 증거를 가지고 있었습니다. 밤새 진행한 만료 토큰 확인을 포함하여 전체 테스트 실행에는 약 30분이 걸렸습니다.

여러 임시 받은편지함을 동시에 사용하여 엣지 케이스 테스트

임시 이메일 서비스의 각 브라우저 탭은 자체 고유 주소를 가진 독립적인 받은편지함입니다. 이것은 병렬 테스트를 간단하게 만듭니다. 세 개의 탭을 열면 세 개의 고유 주소를 갖게 됩니다. 세 개의 테스트 계정을 등록하고, 세 개 모두에 대해 비밀번호 재설정을 동시에 트리거한 다음, 각 계정이 다른 사람의 것이 아닌 자신의 토큰만 받는지 확인하세요. 이 교차 오염 테스트는 잘못 구현된 재설정 시스템이 모든 토큰을 먼저 등록된 주소로, 또는 잘못 구성된 환경의 하드코딩된 주소로 보내는 특히 고약한 버그를 잡아냅니다.

또한 사용자가 이미 로그인한 상태에서 재설정을 요청할 때 무슨 일이 일어나는지, 또는 시스템에 존재하지 않는 이메일 주소에 대해 재설정이 요청될 때 무슨 일이 일어나는지도 테스트할 수 있습니다. 이러한 엣지 케이스는 각각 자체의 깨끗한 받은편지함, 자체의 깨끗한 상태를 얻어 명확한 결과를 만들어냅니다.

테스트 이메일 주소를 코드베이스에 하드코딩하지 마세요. 매번 새로운 임시 이메일 받은편지함을 사용하세요 — 스텁이 아닌 실제 이메일 인프라를 통한 진짜 배달을 테스트하고 있음을 보장하며 항상 완전히 깨끗한 상태에서 시작합니다.

토큰 보안 체크리스트

비밀번호 재설정 토큰은 웹 애플리케이션에서 가장 흔한 공격 면 중 하나입니다. OWASP는 안전한 구현이 무엇을 요구하는지 명확히 밝히고 있으며, 그 기준은 많은 팀이 인식하는 것보다 높습니다. 이 목록의 각 항목은 여러분의 테스트를 통해 검증 가능해야 합니다:

  • 최소 32자, 암호학적으로 무작위 — 짧거나 예측 가능한 토큰은 무차별 대입으로 뚫릴 수 있습니다. Math.random()이나 그 동등물이 아닌 플랫폼의 암호학적으로 안전한 난수 생성기를 사용하세요.
  • 24시간 이내, 이상적으로는 1시간 이내 만료 — 결코 만료되지 않는 토큰은 지속적인 공격 면입니다. 대부분의 애플리케이션에서 1시간이 권장되는 최대값입니다.
  • 일회성 사용만 — 토큰은 교환되는 순간 무효화되어야 합니다. 재사용 가능한 재설정 토큰은 심각한 취약점입니다.
  • 새 재설정이 요청될 때 무효화 — 사용자가 다시 재설정을 요청하면 해당 계정의 이전에 미처리된 모든 토큰이 무효화되어야 합니다.
  • 이메일 주소당 속도 제한 — 시간 창당 주소별로 가능한 재설정 요청 수를 제한하여 자동화된 열거와 남용을 방지하세요.
  • 절대 평문으로 로그에 기록되지 않음 — 로깅 인프라가 요청 매개변수를 캡처한다면, 재설정 토큰이 로그에 기록되기 전에 제외되거나 해시되도록 하세요.

재설정 이메일 자체는 어떤 모습이어야 하는가

재설정 이메일의 내용과 표현은 대부분의 팀이 이해하는 것보다 더 중요합니다. 잘 만들어진 재설정 이메일은 단순하고 기능적입니다. 명확한 제목("비밀번호 재설정"), 하나의 눈에 띄는 버튼 또는 링크, 명확한 만료 안내("이 링크는 1시간 후에 만료됩니다"), 그리고 사용자가 이를 요청하지 않았다면 이메일을 안전하게 무시할 수 있다는 안내입니다. 마케팅 문구도, 소셜 미디어 아이콘도, 뉴스레터 푸터도 없습니다. 트랜잭션 이메일은 트랜잭션답게 보여야 합니다.

발신자 세부 정보도 중요합니다. 발신자 이름은 여러분의 브랜드와 명확히 일치해야 하며, 발신자 주소는 적절히 인증되어야 합니다. 일치하지 않는 발신자 이름으로 도착하거나 잘못된 인증 구성 때문에 스팸 폴더에 들어가는 이메일은 실제 사용자 혼란과 지원 부담을 야기합니다. MXToolbox 같은 도구로 도메인의 SPF, DKIM, DMARC 구성을 확인하고, 그 용어 중 어느 것이라도 익숙하지 않다면 이메일 인증 가이드를 읽어보세요.

기술적인 이메일 사양 — 무엇이 유효한 이메일이고 무엇이 아닌지, 배달이 끝에서 끝까지 어떻게 작동하는지 — 은 RFC 5321에 문서화되어 있습니다. 밀도 높은 읽을거리이지만, 개요 섹션은 이메일 인프라가 재설정 이메일을 발송할 때 실제로 무엇을 하는지 이해하는 데 유용한 맥락을 제공합니다.

왜 실제 받은편지함이 이 작업에 잘못된 도구인가

테스트 계정에 개인 또는 업무 이메일 주소를 사용하는 것은 불편함을 넘어서는 일련의 문제를 만듭니다. 여러분의 주소는 테스트 레코드로 여러분 자신의 애플리케이션 데이터베이스에 남습니다. 그것은 애플리케이션 로그, 메일 서버의 보낸 기록, 스테이징 환경 내보내기, 그리고 때때로 계약자나 외부 QA 팀과 공유되는 데이터베이스 덤프에 나타날 수 있습니다. 스테이징 환경은 종종 프로덕션보다 접근 제어가 느슨합니다. Electronic Frontier Foundation은 데이터 최소화를 기초적인 프라이버시 원칙으로 옹호합니다 — 실제 주소를 개발 및 테스트 시스템에서 배제하는 것은 그 원칙의 직접적인 적용입니다. 임시 받은편지함은 자연스럽게 만료되고, 결코 여러분의 신원과 연결되지 않으며, 흔적을 남기지 않습니다.

회귀 스위트에 비밀번호 재설정 포함

비밀번호 재설정은 인증 라이브러리가 업데이트될 때, 이메일 공급자가 교체될 때, 또는 API 키가 갱신될 때 조용히 망가지는 종류의 흐름입니다. 대부분의 팀이 이를 자동화하기 어려운 UI 전용 통합 테스트로 취급하기 때문에 전용 자동화 테스트가 있는 경우는 드뭅니다. 그 논리는 이해할 만하지만 위험합니다.

최소한 스테이징 또는 CI 환경에 가입 여정 전체를 훑는 기본적인 엔드투엔드 테스트를 추가하는 것을 고려하세요. 생성된 주소로 테스트 계정을 프로그래밍 방식으로 만들고, 재설정 요청을 트리거하고, 메일 서비스의 API에서 직접 나가는 이메일을 가로채거나 검사하고, 토큰을 추출하고, 교환을 시도하고, 결과 상태를 검증합니다. 이것은 정교할 필요가 없습니다. 각 배포 후 재설정 흐름이 작동하는지 확인하는 단 하나의 자동화된 검사만으로도 가장 흔한 회귀 클래스, 즉 토큰 생성을 조용히 망가뜨리는 인증 의존성 변경을 잡아냅니다.

안전한 인증을 위한 추가 자료

안전한 비밀번호 처리가 실제로 왜 중요한지에 대한 더 넓은 관점을 위해, Troy Hunt는 실제 침해 분석을 접근하기 쉽고 근거가 잘 갖춰진 세부 사항으로 다룹니다. 자격 증명 스터핑과 계정 탈취에 관한 그의 글은 왜 재설정 흐름이 진지한 관심을 받을 가치가 있는지와 직접적으로 관련이 있습니다. OWASP Authentication Cheat Sheet는 여러분의 인증 시스템이 해야 할 모든 것에 대한 가장 포괄적인 단일 참조로 남아 있습니다. 이 두 자료와 각 실행마다 새로운 받은편지함을 사용하는 규율 있는 테스트 관행 사이에서, 여러분은 실제 세계의 정밀 조사를 견뎌낼 인증 시스템의 토대를 갖게 됩니다.