로그인 PRD¶
요지¶
로그인은 세 역할(강사·학생·학부모)이 매번 거치는 인증 관문이라 안전성과 편의성을 동시에 잡아야 한다. JWT 토큰으로 로그인·로그아웃·자동 로그인·세션 유지를 제공하되, 비밀번호를 반복해서 틀리는 무차별 대입은 계정 잠금으로 막는다. MVP-A 첫 마일스톤 기능이다.
목표 & 성공 기준 (지표)¶
토큰 기반으로 안전하게 인증하고, 한 번 로그인하면 끊김 없이 세션을 이어 가고, 무차별 대입은 막는 것이 목표다.
지표는 로그인 성공률, 자동 로그인 성공률, 계정 잠금 발생률, 그리고 세션이 끊긴 뒤 다시 로그인으로 돌아오는 전환율을 본다. 잠금이 너무 잦으면 정상 사용자까지 막고 있다는 신호라 함께 지켜본다. 측정에 쓰는 GA 이벤트(auth_login_success·auth_login_failure·auth_auto_login_success 등) 전체는 frd에 있다.
대상 페르소나¶
로그인 자체는 역할을 가리지 않는 공통 인증이라 강사·학생·학부모 모두가 같은 화면을 쓴다. 역할별로 갈리는 권한과 접근 범위는 member §7에서 다룬다.
범위 (포함 / 제외)¶
여기서 다루는 건 이메일·비밀번호 로그인, 로그아웃, Access 토큰 재발급, "상태 유지"를 통한 자동 로그인, 5회 실패 시 계정 잠금, 그리고 계정 상태별 차단이다.
소셜 로그인(소셜 로그인 (OAuth2.0))과 계정 복구(계정 복구 (Account Recovery))는 각자 별도 기능으로 빠졌고, 5회 실패 시 CAPTCHA는 옵션으로 두되 MVP에서는 미룬다.
요구사항 (유저 스토리 · 기능)¶
등록된 사용자가 /login에서 이메일·비밀번호로 로그인하면 /dashboard로 보낸다. "로그인 상태 유지"를 켜 두면 브라우저를 닫았다 다시 들어와도 자동으로 로그인된다. 반대로 이미 로그인한 사람이 /login에 직접 들어오면 메인으로 돌려보내고, 헤더 아바타에서 로그아웃하면 세션과 토큰을 전부 지운다.
세부 정책은 이렇게 잡았다.
| 구분 | 내용 |
|---|---|
| 주요 기능 | 로그인 · 로그아웃 · 자동 로그인 · 상태 유지 |
| 인증 방식 | JWT Access + Refresh (Refresh는 HttpOnly+Secure+SameSite 쿠키). 토큰 수명 값은 인프라 설정에 둔다 |
| 보안 정책 | 토큰 만료·재발급, 5회 실패 시 계정 잠금(LOCKED), 로그아웃 시 세션 초기화, CSRF는 SameSite 쿠키 + 서버 검증 |
| 검증 규칙 | 로그인·회원가입 공용 입력 검증(V-01~12·19) — 전체 표는 회원가입 개발 명세 (FRD)가 기준 |
| 편의 | 비밀번호 보기/숨기기, 회원가입 링크, "로그인이 안되시나요?"로 복구 진입(계정 복구 (Account Recovery)) |
근거 (피드백·아이디어·리서치 source)¶
MS1 로그인 기획서(v2)와 IA 문서, 로그인·회원가입이 공유하는 통합 Validation 규칙에서 도출했다. 출처는 frontmatter source에 모았고, 관련 이슈는 Jira BTS-244.
오픈 이슈¶
- 5회 실패 시 CAPTCHA를 넣을지 — 지금은 옵션으로만 열어 뒀다.
- 잠긴 계정은 비밀번호 재설정(계정 복구 (Account Recovery))으로만 풀게 했는데, 관리자가 수동으로 푸는 운영 절차는 아직 정하지 못했다.