테마
Story: PlanTier/PlanFeature 테이블 설계 및 생성
메타
| 항목 | 값 |
|---|---|
| Story ID | E-05-S-01 |
| Epic | E-05 요금제 정책 재설계 및 가드레일 |
| 상태 | draft |
| 우선순위 | P0 |
| 규모 | M |
| 담당 | 창훈님 (하록님, 수민님) |
사용자 스토리
As a 장사왕 시스템, I want 요금제 정책을 DB 테이블로 관리, So that 코드 수정 없이 정책을 변경하고 가드레일을 적용할 수 있다.
수락 기준 (Acceptance Criteria)
AC-01: PlanTier 테이블 생성
| 항목 | 내용 |
|---|---|
| Given | 새 요금제 정책 확정 |
| When | 마이그레이션 실행 |
| Then | PlanTier 테이블 생성 + 4개 티어 데이터 |
테이블 스키마:
sql
CREATE TABLE PlanTier (
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(20) NOT NULL UNIQUE, -- 'starter', 'basic', 'pro', 'business'
name VARCHAR(50) NOT NULL, -- 'Starter', 'Basic', 'Pro', 'Business'
monthlyPrice DECIMAL(10,0) NOT NULL, -- 33000, 55000, 110000, 330000
maxVendors INT NOT NULL, -- 1, 3, 15, 50
maxMonthlyOrders INT, -- 2000, 5000, 30000, NULL(무제한)
dataRetentionDays INT NOT NULL, -- 7, 30, 90, 365
displayOrder INT NOT NULL, -- 정렬 순서
isActive BOOLEAN DEFAULT TRUE,
createdAt TIMESTAMP DEFAULT NOW(),
updatedAt TIMESTAMP DEFAULT NOW() ON UPDATE NOW()
);초기 데이터:
| code | name | monthlyPrice | maxVendors | maxMonthlyOrders | dataRetentionDays |
|---|---|---|---|---|---|
| starter | Starter | 33000 | 1 | 2000 | 7 |
| basic | Basic | 55000 | 3 | 5000 | 30 |
| pro | Pro | 110000 | 15 | 30000 | 90 |
| business | Business | 330000 | 50 | NULL | 365 |
AC-02: PlanFeature 테이블 생성
| 항목 | 내용 |
|---|---|
| Given | PlanTier 테이블 존재 |
| When | Feature 제한 정책 적용 |
| Then | 요금제별 Feature 제한 조회 가능 |
테이블 스키마:
sql
CREATE TABLE PlanFeature (
id INT PRIMARY KEY AUTO_INCREMENT,
planTierId INT NOT NULL,
featureCode VARCHAR(50) NOT NULL, -- 'deep_layer_campaigns', 'keywords', etc.
limitType ENUM('boolean', 'count') NOT NULL,
limitValue INT NOT NULL, -- boolean: 0/1, count: 숫자
createdAt TIMESTAMP DEFAULT NOW(),
updatedAt TIMESTAMP DEFAULT NOW() ON UPDATE NOW(),
FOREIGN KEY (planTierId) REFERENCES PlanTier(id),
UNIQUE KEY (planTierId, featureCode)
);Feature 코드 정의:
| featureCode | 설명 | limitType |
|---|---|---|
| deep_layer_campaigns | Deep Layer 캠페인 수 | count |
| keywords | 키워드 분석 수 | count |
| ai_diagnosis | AI 진단 | boolean |
| worknote_record | 업무노트 적용 기록 | boolean |
| worknote_memo | 업무노트 커스텀 메모 | boolean |
| worknote_tracking | 업무노트 효과 추적 | boolean |
| csv_export | CSV 내보내기 | boolean |
AC-03: Feature 제한 초기 데이터
| 항목 | 내용 |
|---|---|
| Given | PlanTier, PlanFeature 테이블 존재 |
| When | 쿼리 실행 |
| Then | 요금제별 Feature 제한 반환 |
초기 데이터 매트릭스:
| Feature | Starter | Basic | Pro | Business |
|---|---|---|---|---|
| deep_layer_campaigns | 1 | 10 | 30 | 9999 |
| keywords | 3 | 10 | 50 | 9999 |
| ai_diagnosis | 0 | 0 | 1 | 1 |
| worknote_record | 0 | 1 | 1 | 1 |
| worknote_memo | 0 | 0 | 1 | 1 |
| worknote_tracking | 0 | 0 | 1 | 1 |
| csv_export | 0 | 0 | 1 | 1 |
태스크 분해
Task 1: PlanTier 테이블 AC-01
- [ ] 1.1: 마이그레이션 파일 생성
- [ ] 1.2: PlanTier 테이블 생성 쿼리
- [ ] 1.3: 4개 티어 초기 데이터 INSERT
- [ ] 1.4: 인덱스 생성 (code UNIQUE)
Task 2: PlanFeature 테이블 AC-02
- [ ] 2.1: PlanFeature 테이블 생성 쿼리
- [ ] 2.2: FK 제약조건 설정
- [ ] 2.3: 복합 유니크 인덱스 (planTierId, featureCode)
Task 3: 초기 데이터 AC-03
- [ ] 3.1: Feature 제한 데이터 INSERT (7개 Feature × 4개 티어 = 28행)
- [ ] 3.2: 데이터 검증 쿼리 작성
Task 4: Entity 및 Repository
- [ ] 4.1: PlanTier Entity 생성
- [ ] 4.2: PlanFeature Entity 생성
- [ ] 4.3: PlanTierRepository 생성
- [ ] 4.4: PlanFeatureRepository 생성
Task 5: 테스트
- [ ] 5.1: 마이그레이션 롤백 테스트
- [ ] 5.2: Repository 단위 테스트
Dev Notes (AI Agent 최적화)
영향 받는 소스 트리
src/
├── entity/
│ ├── plan-tier.entity.ts # 🆕
│ └── plan-feature.entity.ts # 🆕
├── repository/
│ ├── plan-tier.repository.ts # 🆕
│ └── plan-feature.repository.ts # 🆕
└── migration/
└── YYYYMMDD-create-plan-tables.ts # 🆕
database/
└── seed/
└── plan-tier-seed.sql # 🆕기존 RatePlan과의 관계
[AS-IS]
RatePlan (복잡한 가격 계산, Feature 없음)
[TO-BE]
PlanTier (단순 요금제 정의)
└── PlanFeature (Feature별 제한)
[마이그레이션]
기존 RatePlan은 유지 (Grandfather용)
신규 가입은 PlanTier 참조충돌 감지
| 항목 | 상태 | 설명 |
|---|---|---|
| 기존 코드 충돌 | ✅ 없음 | 신규 테이블 |
| RatePlan 테이블 | 🟡 공존 | 기존 유지, 새 테이블 추가 |
의존성
| 의존 | 설명 | 상태 |
|---|---|---|
| 없음 | 첫 번째 Story | - |
이 Story가 블로킹하는 Story:
- E-05-S-02 (가드레일 체크 서비스)
- E-05-S-08 (마이그레이션 스크립트)
- E-05-S-09 (Grandfather 정책)
Dev Agent Record
| 항목 | 값 |
|---|---|
| 생성 Agent | Claude Opus 4.5 |
| 생성일 | 2026-01-27 |
| 마지막 수정 | 2026-01-27 |
| 검증자 | - |
생성일: 2026-01-27
