ProjectName/
├── Controllers/ # MVC 컨트롤러
├── Models/ # 도메인 모델
│ ├── Entities/ # 데이터베이스 엔티티
│ ├── DTOs/ # 데이터 전송 객체
│ └── ViewModels/ # 뷰 모델
├── Services/ # 비즈니스 로직 서비스
├── Data/ # 데이터 액세스 레이어
│ ├── DbContext/ # Entity Framework 컨텍스트
│ └── Repositories/ # 리포지토리 패턴
├── Views/ # Razor 뷰
├── wwwroot/ # 정적 파일
└── Configuration/ # 설정 관련
👥 3. User Personas & Use Cases
3.1 사용자 유형
3.1.1 Primary User: [사용자 유형 1]
역할: [역할 설명]
기술 수준: [초급/중급/고급]
주요 목표: [사용자의 주요 목적]
Pain Points: [현재 겪고 있는 문제점들]
3.1.2 Secondary User: [사용자 유형 2]
역할: [역할 설명]
기술 수준: [초급/중급/고급]
주요 목표: [사용자의 주요 목적]
Pain Points: [현재 겪고 있는 문제점들]
3.2 사용자 여정 (User Journey)
graph LR
A[로그인] --> B[대시보드]
B --> C[기능 선택]
C --> D[데이터 입력/조회]
D --> E[처리/저장]
E --> F[결과 확인]
🔧 4. Functional Requirements
4.1 인증 및 권한 관리
4.1.1 사용자 인증 (Authentication)
기능 ID: AUTH-001 우선순위: High 담당 Controller:AccountController
요구사항:
이메일/비밀번호 기반 로그인
회원가입 기능
비밀번호 재설정
로그아웃 기능
구현 세부사항:
Model:LoginViewModel, RegisterViewModel
Service:IAccountService
Actions:
GET /Account/Login - 로그인 페이지 표시
POST /Account/Login - 로그인 처리
GET /Account/Register - 회원가입 페이지
POST /Account/Register - 회원가입 처리
비즈니스 규칙:
비밀번호는 최소 8자, 대소문자/숫자/특수문자 포함
5회 연속 로그인 실패 시 계정 잠금 (30분)
이메일 중복 불가
테스트 시나리오:
올바른 자격증명으로 로그인 성공
잘못된 자격증명으로 로그인 실패
중복 이메일로 회원가입 실패
약한 비밀번호로 회원가입 실패
4.1.2 역할 기반 권한 관리 (Authorization)
기능 ID: AUTH-002 우선순위: High 담당 Controller:RoleController
역할 정의:
Admin: 시스템 전체 관리 권한
Manager: 부서별 데이터 관리 권한
User: 개인 데이터 조회/수정 권한
구현 세부사항:
Entity:ApplicationUser, ApplicationRole
Authorization Policies:AdminPolicy, ManagerPolicy
Attributes:[Authorize(Policy = "AdminPolicy")]
4.2 데이터 관리 모듈
4.2.1 [엔티티명] 관리
기능 ID: DATA-001 우선순위: High 담당 Controller:[EntityName]Controller
CRUD 기능:
Create (생성)
Action:GET /[Entity]/Create, POST /[Entity]/Create
ViewModel:[Entity]CreateViewModel
Validation Rules:
[필수 필드 목록]
[데이터 형식 검증]
[비즈니스 규칙 검증]
Read (조회)
List Action:GET /[Entity]
페이징 지원 (기본 20개/페이지)
검색 기능 (제목, 내용, 작성자)
정렬 기능 (생성일, 수정일, 이름)
필터링 (상태, 카테고리, 날짜 범위)
Detail Action:GET /[Entity]/Details/{id}
상세 정보 표시
관련 데이터 포함 (Eager Loading)
Update (수정)
Action:GET /[Entity]/Edit/{id}, POST /[Entity]/Edit/{id}
ViewModel:[Entity]EditViewModel
권한 검증: 작성자 또는 Admin만 수정 가능
Delete (삭제)
Action:POST /[Entity]/Delete/{id}
Soft Delete: 물리적 삭제 대신 IsDeleted 플래그 사용
권한 검증: 작성자 또는 Admin만 삭제 가능
데이터 모델:
public class [EntityName]
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public string CreatedBy { get; set; }
public bool IsDeleted { get; set; }
// 추가 속성들...
}
비즈니스 규칙:
[비즈니스 규칙 1]
[비즈니스 규칙 2]
[비즈니스 규칙 3]
테스트 시나리오:
유효한 데이터로 생성 성공
필수 필드 누락 시 생성 실패
권한 없는 사용자의 수정 시도 차단
삭제된 항목은 목록에서 제외
페이징 동작 확인
검색 기능 정확성 확인
4.3 리포팅 및 대시보드
4.3.1 대시보드
기능 ID: DASH-001 우선순위: Medium 담당 Controller:DashboardController