프로젝트 문서화

로그인-사용자 스토리 & 기능 명세서

James Wetzel 2025. 7. 18. 19:39

사용자 스토리

스토리 ID US-001
작성자 토마스
작성일 2025-07-18
사용자 유형 등록된 사용자 (기존 회원)
기능 이름 로그인
사용자 스토리 등록된 사용자로서, 이메일과 비밀번호를 이용해 로그인하고 싶다. 그래야 나만의 대시보드와 개인 설정에 접근할 수 있기 때문이다.
배경 및 맥락 서비스는 개인화된 정보를 제공하므로, 사용자는 본인 계정으로 인증을 받아야 자신의 데이터에 접근할 수 있다.
우선순위 상 (High)
수용 기준 (Acceptance Criteria) - 로그인 화면에 이메일과 비밀번호 입력란이 있어야 한다.
- 유효한 자격 정보 입력 시, 사용자 대시보드로 이동해야 한다.
- 잘못된 정보 입력 시, 명확한 오류 메시지를 표시해야 한다.
- 로그인 실패가 5회 이상일 경우, 계정 잠김 안내를 제공해야 한다.
- "비밀번호를 잊으셨나요?" 링크가 포함되어야 한다.
완료 정의 (Definition of Done) - 프론트엔드 및 백엔드 연동 완료
- 모든 테스트 케이스 통과
- UX 검토 완료
- 보안 검토 통과
- QA 시나리오 통과
연관 기능 ID FUNC-001 (로그인 기능 명세서), API-001 (POST /api/login)
비고 추후 소셜 로그인(Google, Kakao 등) 통합 예정.
현재는 일반 로그인만 포함.

 


기능 명세서

기능 ID FUNC-001
기능 이름 로그인
작성자 토마스
작성일 2025-07-18
목적 사용자가 본인의 계정 정보를 입력하여 인증을 받고, 서비스에 안전하게 접속할 수 있도록 한다.
설명 로그인은 사용자의 이메일과 비밀번호를 기반으로 인증을 수행하며, 성공 시 개인화된 대시보드로 이동시킨다. 이 기능은 보안 처리를 포함하며, 실패 시 오류 메시지를 제공한다.
사용자 유형 등록된 사용자, 관리자
관련 사용자 스토리 US-001
입력값 (Input) - 이메일 (email: string, 필수)
- 비밀번호 (password: string, 필수)
출력값 (Output) - 로그인 성공 시: JWT 토큰 및 사용자 정보
- 로그인 실패 시: 오류 메시지 ("이메일 또는 비밀번호가 일치하지 않습니다.")
화면 요소 (UI 항목) - 이메일 입력 필드
- 비밀번호 입력 필드
- 로그인 버튼
- "비밀번호를 잊으셨나요?" 링크
- 오류 메시지 영역
처리 로직 1. 사용자가 이메일과 비밀번호 입력
2. 백엔드 인증 API 호출
3. 인증 성공 시 토큰 발급 및 사용자 세션 저장
4. 인증 실패 시 오류 메시지 출력
5. 로그인 실패 횟수 5회 이상이면 잠금 처리
검증 규칙 (Validation) - 이메일: RFC 5322 형식 검증
- 비밀번호: 최소 8자, 대소문자/숫자/특수문자 포함 여부 확인
예외 처리 - 이메일 또는 비밀번호 누락 시: "입력값을 모두 채워주세요"
- 서버 오류 시: "서버에 문제가 발생했습니다. 잠시 후 다시 시도해주세요"
- 계정 잠김 시: "로그인 시도가 5회 이상 실패하여 계정이 잠겼습니다."
보안 고려사항 - 비밀번호는 평문 저장 금지 (bcrypt 등으로 해시)
- 전송 시 HTTPS 사용
- JWT 토큰에 만료 시간 포함
- 로그인 실패 횟수 제한 및 알림 처리
연동 API POST /api/login
- Request: { "email": "string", "password": "string" }
- Response: { "token": "string", "user": { ... } }
상태 플로우 입력 → 유효성 검사 → 인증 API 호출 → 성공: 대시보드 이동 / 실패: 오류 표시
우선순위 상 (High)
테스트 시나리오 - 올바른 정보로 로그인 성공
- 잘못된 비밀번호 입력 시 오류 발생
- 입력값 누락 시 검증 오류
- 로그인 5회 실패 시 계정 잠김
- 토큰 발급 여부 확인
비고 추후 소셜 로그인 통합 예정.
로그인 상태 유지(자동 로그인) 기능은 별도 기능으로 분리 예정.

 

 

회원가입&로그인&로그아웃 - 클래스 다이어그램

 

회원가입&로그인&로그아웃 - 클래스 다이어그램

+------------------+ | UserStatus (enum)| +------------------+ | PENDING | | ACTIVE | | SUSPENDED | | SOCIAL_PENDING | +------------------++------------..

jangjeonghun.tistory.com

회원가입&로그인&로그아웃 - 클래스 코드

 

회원가입&로그인&로그아웃 - 클래스 코드

using System;using System.Collections.Generic;namespace MyApp.Models{ public class User { public Guid Id { get; set; } public string Email { get; set; } public string Password { get; set; } // hashed public string Provider { get; set; } public string Provi

jangjeonghun.tistory.com

회원가입&로그인&로그아웃 - ERD

 

회원가입&로그인&로그아웃 - ERD

+---------------------+| [User] |+---------------------+| PK id || email || password || provider || providerId || status | -- FK to [UserStatus]+---------------------++---------------------+| [UserStatus] | -- ENUM TABLE+---------------------+| PK status |

jangjeonghun.tistory.com

 

728x90
반응형