You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(onboarding): 아이디 찾기 인증번호 발송·확인이 무잠금이라 연타가 요청을 두 번 낸다 #1864
requestVerificationCode() — if (!state.isSendCodeEnabled) return
verifyCode() — if (!state.isVerifyEnabled) return
두 가드 모두 viewModelScope.launch밖에서 상태를 캡처해 읽는다. launch 본문은 다음 루프에 돌므로 isSendingCode·isVerifying 이 상태에 반영되기 전에 두 번째 호출이 같은 false 를 읽고 통과한다. 실기기의 Dispatchers.Main 에서 빠른 두 탭이면 열리는 창이고, 버튼과 IME 제출이 각각 독립 경로라 「버튼 → 키보드 Done」 순서로도 열린다.
중복 요청이 낭비로 끝나지 않는다.
verifyCode → auth/email/find 는 BE EmailService.verifyAndDeleteCode 로 인증번호를 검증하며 지운다. 두 번째 요청은 코드가 이미 없어 1207 로 실패하고, 첫 요청이 성공했는데도 사용자에게는 "인증번호가 일치하지 않습니다" 가 인라인으로 뜬다.
requestVerificationCode → auth/find/send/code 는 코드를 새로 발급한다. 앞서 안내한 인증번호가 조용히 무효가 된다.
완료 조건
진행 중인 Job 을 보고 막는다 — SignUpViewModel.signUpJob 과 같은 방식(if (job?.isActive == true) return 을 상태 캡처보다 먼저).
StandardTestDispatcher 로 「플래그 반영 전」 창을 재현하는 테스트를 붙인다. UnconfinedTestDispatcher 로는 이 결함이 통과한다 — launch 본문이 즉시 돌아 플래그가 이미 반영되기 때문이다.
비밀번호 찾기 — 이메일 인증 후 비밀번호 재설정 #457 이 비밀번호 찾기 쪽 같은 결함을 988ec94a1 로 닫았다 — sendCodeJob·resetJob 두 개를 두고, 가드를 뺀 채 돌려 새 테스트 2건이 실패하는 것을 먼저 확인했다. 이 이슈는 같은 처방을 아이디 찾기에 적용하는 것이라 그 커밋을 그대로 참고하면 된다.
기존 테스트가 있어도 안심할 수 없다. 비밀번호 찾기에는 제출이 진행 중이면 재호출이 재설정을 다시 부르지 않는다 가 이미 있었는데 UnconfinedTestDispatcher 라 결함이 있는 코드에서도 통과했다. 아이디 찾기 테스트도 같은 이유로 이 창을 못 보고 있을 수 있다.
sendCodeJob·verifyJob 두 개를 두고 if (job?.isActive == true) return 을 상태 캡처보다 먼저 놓았습니다. 완료 조건에 적힌 SignUpViewModel.signUpJob·비밀번호 찾기 — 이메일 인증 후 비밀번호 재설정 #457 의 988ec94a1 과 같은 처방입니다.
기존 isSendCodeEnabled·isVerifyEnabled 는 그대로 뒀습니다 — 쿨다운·이메일 형식·코드 길이는 Job 이 말하지 않는 조건입니다.
FindIdViewModelTest 3건을 새로 뒀습니다. StandardTestDispatcher 로 「플래그 반영 전」 창을 재현합니다.
가드 제거 후 실패 확인
이슈가 요구한 대로 가드 두 줄을 지우고 먼저 돌렸습니다.
FindIdViewModelTest > 인증번호 확인 연타는 상태가 반영되기 전에도 조회를 한 번만 부른다 FAILED
FindIdViewModelTest > 인증번호 발송 연타는 상태가 반영되기 전에도 요청을 한 번만 낸다 FAILED
3 tests completed, 2 failed
가드를 되살리면 3건 모두 초록이고, :feature:onboarding:presentation:testDebugUnitTest · ktlintCheck 도 통과합니다.
#1825 가 FindIdViewModel 을 MVI 로 통째 다시 쓰는데 그 판에도 결함이 그대로 남아 있습니다 — requestVerificationCode()·verifyCode() 가 여전히 launch 밖에서 currentState 만 읽습니다. develop 에 고치면 #1825 리베이스에서 조용히 사라질 자리라 최종 형태 위에 얹었습니다.
Activity
github-actions commentedon Sep 3, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.
github-actions commentedon Sep 11, 2026
이 이슈를 맡은 PR 은 #1982 다 (base
refactor/1802-onboarding-mvi).base 가 기본 브랜치(
develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에아무것도 표시하지 않는다. 본문에
Closes #N이 있어도 마찬가지다 — 그 링크는 기본 브랜치를target 하는 PR 에서만 만들어진다.
PR 이 닫히거나 머지되면 이 이슈의
pr-open라벨은 다음 리컨사일에서 떨어진다.Sadturtleman commentedon Sep 11, 2026
고친 브랜치를 올려 뒀는데 모듈 담당 가드가 제 PR 을 막습니다 — @1hyok 이 가져가시면 그대로 쓸 수 있습니다.
fix/1864-find-id-code-job-guard(base 는 refactor(onboarding): ViewModel 3개를 MVI 로 옮기고 소비를 Intent 로 접는다 (#1802) #1825refactor/1802-onboarding-mvi)Repository Quality / Require module owner로 빨개져 닫았습니다.HANDOVER_BY_MODULE의 onboarding 경계가fromIssue: 1910이라 fix(onboarding): 아이디 찾기 인증번호 발송·확인이 무잠금이라 연타가 요청을 두 번 낸다 #1864 는 그 아래라 프로덕션 파일 담당이 @1hyok 으로 판정됩니다. 이슈 배정(저)과 파일 담당(1hyok)의 기준이 갈립니다.브랜치에 담긴 것
sendCodeJob·verifyJob두 개를 두고if (job?.isActive == true) return을 상태 캡처보다 먼저 놓았습니다. 완료 조건에 적힌SignUpViewModel.signUpJob·비밀번호 찾기 — 이메일 인증 후 비밀번호 재설정 #457 의988ec94a1과 같은 처방입니다.isSendCodeEnabled·isVerifyEnabled는 그대로 뒀습니다 — 쿨다운·이메일 형식·코드 길이는 Job 이 말하지 않는 조건입니다.FindIdViewModelTest3건을 새로 뒀습니다.StandardTestDispatcher로 「플래그 반영 전」 창을 재현합니다.가드 제거 후 실패 확인
이슈가 요구한 대로 가드 두 줄을 지우고 먼저 돌렸습니다.
가드를 되살리면 3건 모두 초록이고,
:feature:onboarding:presentation:testDebugUnitTest·ktlintCheck도 통과합니다.base 를 #1825 로 잡은 이유
#1825 가
FindIdViewModel을 MVI 로 통째 다시 쓰는데 그 판에도 결함이 그대로 남아 있습니다 —requestVerificationCode()·verifyCode()가 여전히launch밖에서currentState만 읽습니다. develop 에 고치면 #1825 리베이스에서 조용히 사라질 자리라 최종 형태 위에 얹었습니다.fix(onboarding): 아이디 찾기 인증번호 발송·확인을 진행 중인 Job 으로 막는다 (#1864)
github-actions commentedon Sep 14, 2026
이 이슈를 맡은 PR 은 #2101 다 (base
refactor/1802-onboarding-mvi).base 가 기본 브랜치(
develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에아무것도 표시하지 않는다. 본문에
Closes #N이 있어도 마찬가지다 — 그 링크는 기본 브랜치를target 하는 PR 에서만 만들어진다.
PR 이 닫히거나 머지되면 이 이슈의
pr-open라벨은 다음 리컨사일에서 떨어진다.