임시 메일 주소를 시험에 쓰는 순간, 확인 메일의 흐름 자체가 시험 대상이 됩니다. 링크를 한 번 눌러 성공 화면이 나오는지만 보면 실제로 터지는 문제를 대부분 놓칩니다. 이 글은 가입과 주소 변경, 비밀번호 재설정에서 인증이 어긋나는 지점을 차례로 살핍니다.
이메일 확인 절차는 어디에나 붙어 있습니다
확인이 필요한 자리는 생각보다 많습니다. 새 계정을 만들 때, 기존 계정의 주소를 바꿀 때, 비밀번호를 잊어 다시 설정할 때, 결제 수단을 등록할 때, 심지어 로그인할 때마다 확인을 요구하는 서비스도 있습니다. 한 번 확인하면 끝나는 서비스도 있지만, 새 기기에서 접속할 때마다 다시 확인을 요구하는 서비스도 있습니다.
이 중에서 가장 위험한 곳은 주소를 바꾸는 흐름입니다. 여기에는 두 개의 주소가 동시에 등장합니다. 옛 주소와 새 주소입니다. 어느 쪽에 어떤 안내가 가야 하는지, 확인이 끝나기 전까지 계정이 어느 상태인지를 헷갈리면 계정을 잃는 사고로 이어집니다. 특히 옛 주소를 먼저 지워 버리는 구현은 새 주소 확인이 실패했을 때 계정을 되찾을 길까지 없앱니다.
정상 흐름만 시험하면 무엇을 놓치나요?
가장 흔히 놓치는 것은 도착하지 않은 경우입니다. 발송에 실패했을 때 화면이 아무 말도 하지 않고 조용히 넘어가면, 사용자는 메일을 기다리다가 이탈합니다. 시험에서는 이 침묵이 잡히지 않습니다. 성공 화면이 나오지 않았다는 사실만 남고, 왜 나오지 않았는지는 어디에도 적히지 않습니다.
두 번째는 만료입니다. 인증 링크에는 수명이 있습니다. 수명이 지난 뒤에도 같은 화면이 성공을 보여 준다면 그 확인은 아무것도 확인하지 않은 것입니다. 반대로 만료 안내를 띄우면서 새 링크를 보내 주지 않으면 사용자는 막힙니다. 만료 화면에는 반드시 다시 받을 수 있는 길이 함께 있어야 합니다.
세 번째는 반복 클릭입니다. 같은 링크를 두 번 누르거나, 두 창에서 동시에 누르거나, 뒤로 가기로 되돌아와 다시 누르는 일은 실제로 자주 일어납니다. 이때 오류가 나면 안 되고, 두 번 처리되면 더 안 됩니다. 메일 앱이 링크를 미리 열어 두는 경우까지 있어서, 사용자가 누르지 않았는데 확인이 되는 일도 생깁니다.
네 번째는 서로 다른 환경입니다. 메일 앱에서 열린 링크가 다른 브라우저로 열리면 세션이 없습니다. 확인이 세션에 기대고 있으면 여기서 끊깁니다. 확인이 끝난 뒤 원래 창으로 돌아왔을 때 화면이 여전히 미확인 상태로 보이는 문제도 같은 뿌리에서 나옵니다.
한 주소를 두 계정이 쓰면 무슨 일이 생기나요?
같은 주소로 계정을 여러 개 만들 수 있게 해 두면, 어느 계정의 확인 링크인지 구분되지 않습니다. 편지함에는 링크가 여러 개 도착하고, 사용자는 아무거나 누릅니다. 그러면 다른 계정이 확인되거나 아무 일도 일어나지 않습니다. 두 경우 모두 사용자 입장에서는 원인을 알 수 없는 실패입니다.
시험 환경에서는 이 상황이 더 자주 생깁니다. 임시 주소를 재사용하면 앞선 시험이 남긴 확인 메일이 뒤 시험에 그대로 보입니다. 목록의 첫 번째 편지를 집어 오는 코드는 남의 링크를 눌러 버립니다. 그래서 시험마다 새 주소를 주는 것이 원칙이고, 주소를 시험의 이름표로 삼는 편이 안전합니다.
우리 도구로 인증 흐름을 끝까지 돌려 보기
임시 메일에서는 시험용 주소를 즉시 만들고, 그 주소로 온 확인 메일을 같은 화면에서 확인할 수 있습니다. 접두사를 정해 두면 어느 시나리오의 주소인지 이름만 보고 알 수 있어, 여러 흐름을 동시에 돌릴 때 섞이지 않습니다. 받은편지함은 주기적으로 스스로 갱신되므로, 사용자가 새로 고침을 누르는 단계를 시험에 넣지 않아도 됩니다.
여기서 만드는 주소는 시험 전용이며 실제 사람의 신원을 대신할 수 없습니다. 실명 확인이나 본인 인증이 필요한 절차에는 사용하지 마세요.
받은 메일에서 확인 링크를 눌러보고, 같은 링크를 한 번 더 눌러 보세요. 두 번째 클릭에서 어떤 화면이 나오는지가 이 흐름의 성격을 가장 잘 보여 줍니다. 그다음에는 만료를 흉내 내어 오래된 링크를 눌러 보고, 마지막으로 확인하지 않은 채 창을 닫았다가 다시 열어 보세요.
국가와 언어에 따라 달라지는 부분
같은 서비스라도 지역에 따라 안내 문구와 연결되는 화면이 다릅니다. 주소 형식 자체는 국가별 주소 형식에서 다루듯 나라마다 규칙이 조금씩 다르고, 언어 설정에 따라 확인 메일의 문구도 달라집니다. 어떤 언어에서는 확인 버튼 문구가 두 단어로 나뉘어 링크가 두 개인 것처럼 보이기도 합니다.
시험을 돌릴 때는 어느 지역 설정으로 확인했는지 함께 기록해 두세요. 그래야 실패를 재현할 수 있습니다. 언어마다 확인 화면으로 넘어가는 주소가 다른 경우도 있으므로, 한 언어에서 통과했다고 다른 언어도 통과한다고 가정하지 않는 편이 좋습니다.
개발자를 위한 메모: 상태와 토큰 설계
- 계정 상태를 미확인, 확인 중, 확인 완료, 주소 변경 중으로 나눠 두고 화면과 저장 계층이 같은 상태를 보게 합니다. 상태가 두 곳에 따로 있으면 반드시 어긋납니다.
- 인증 토큰은 한 번만 쓸 수 있게 만듭니다. 두 번 눌렀을 때 오류를 띄우기보다, 이미 확인된 상태를 다시 보여 주는 편이 사용자에게 낫습니다.
- 같은 요청이 동시에 두 번 들어와도 한 번만 처리되게 합니다. 그물망 연결이 불안정한 환경에서 이 문제가 자주 드러납니다.
- 확인 실패를 사용자에게 그대로 노출하지 않습니다. 토큰 값 자체를 화면이나 기록에 남기면 그것이 곧 계정 탈취 통로가 됩니다.
- 확인 메일의 제목과 본문 형식을 시험 쪽에서 문서로 남깁니다. 형식이 바뀌면 시험이 먼저 알려 줍니다.
- 재발송을 요구하는 경우를 시나리오에 넣습니다. 재발송에도 횟수 제한이 걸려 있으므로, 제한에 걸렸을 때의 화면까지 확인합니다. 확인 메일을 사람 손에 기대지 않고 읽어 내는 방법은 테스트에서 메일 캡처하기에 정리했습니다.
다음 단계
임시 메일에서 주소를 두 개 만들어 서로 다른 계정의 확인 흐름을 동시에 돌려 보고, 두 편지함이 섞이지 않는지 확인해 보세요. 주소 변경 흐름까지 다뤄야 한다면 옛 주소와 새 주소를 각각 따로 준비해 두고, 확인이 끝난 뒤 어느 주소로 안내가 오는지 비교해 보는 것이 가장 빠른 점검입니다. 만료를 다루는 시나리오는 다음으로 인증 코드 자동화와 함께 보시길 권합니다.