로그인-사용자 스토리 & 기능 명세서
사용자 스토리
스토리 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
+---------------------+| [User] |+---------------------+| PK id || email || password || provider || providerId || status | -- FK to [UserStatus]+---------------------++---------------------+| [UserStatus] | -- ENUM TABLE+---------------------+| PK status |
jangjeonghun.tistory.com