데이터베이스 시드
개요
시드(Seed)는 초기 데이터를 데이터베이스에 삽입하는 프로세스입니다. 개발 환경 설정, 테스트 데이터 생성, 기본 설정값 등을 위해 사용됩니다.
시드 데이터 구성
1. 도메인 시드
const domains = [
{
name: 'example1.com',
title: '첫번째 도메인',
description: '테스트용 첫번째 도메인',
adminWalletAddress: 'TRxExample1WalletAddress',
maxReferralLevel: 30,
referralRates: {
1: 10, // 1레벨 10% 수당
2: 5, // 2레벨 5% 수당
3: 3 // 3레벨 3% 수당
},
isActive: true
},
{
name: 'example2.com',
title: '두번째 도메인',
description: '테스트용 두번째 도메인',
adminWalletAddress: 'TRxExample2WalletAddress',
maxReferralLevel: 30,
referralRates: {
1: 15,
2: 7,
3: 4
},
isActive: true
}
];
2. 상품 시드
const products = [
// example1.com 상품
{
domain: 'example1.com',
name: 'Basic Package',
description: '기본 패키지',
price: 100000,
snpQty: 100,
qty: 1000,
isActive: true
},
{
domain: 'example1.com',
name: 'Premium Package',
description: '프리미엄 패키지',
price: 500000,
snpQty: 500,
qty: 500,
isActive: true
},
// example2.com 상품
{
domain: 'example2.com',
name: 'Starter Kit',
description: '스타터 키트',
price: 200000,
snpQty: 200,
qty: 1000,
isActive: true
}
];
3. 사용자 및 추천 구조 시드
const users = [
// 시스템 관리자
{
symId: 'super_admin',
nickName: '최고관리자',
role: Role.SUPER_ADMIN,
domain: 'admin',
tronAddress: 'TRxSuperAdminWallet',
referralCode: 'SUPERADM',
isActive: true
},
// 도메인 관리자
{
symId: 'admin_example1',
nickName: '도메인1관리자',
role: Role.DOMAIN_ADMIN,
domain: 'example1.com',
tronAddress: 'TRxDomain1AdminWallet',
referralCode: 'DOMAIN1A',
isActive: true
},
// 일반 사용자 (추천 구조 포함)
{
symId: 'user1_example1',
nickName: '사용자1',
role: Role.DOMAIN_USER,
domain: 'example1.com',
tronAddress: 'TRxUser1Wallet',
referralCode: 'USER0001',
referrerCode: 'DOMAIN1A', // admin_example1의 추천을 받음
isActive: true
}
];
시드 실행 순서
@Command({ command: 'create:seed', describe: '초기 데이터 생성' })
async create() {
// 1. 기존 데이터 삭제
await this.cleanDatabase();
// 2. 도메인 생성
await this.createDomains();
// 3. 상품 생성
await this.createProducts();
// 4. 사용자 생성
await this.createUsers();
// 5. 추천 관계 설정
await this.setupReferrals();
}
테스트 시나리오
1. 추천 구조 테스트
// 추천 체인 예시
super_admin
└── admin_example1
├── user1_example1
│ └── user2_example1
└── user3_example1
└── user4_example1
2. 상품 구매 테스트
// 구매 시나리오
1. user2_example1이 Basic Package 구매
2. 수당 지급 체인:
- user1_example1: 10% (1레벨)
- admin_example1: 5% (2레벨)
환경별 설정
// 개발 환경
const devConfig = {
cleanDatabase: true, // 기존 데이터 삭제
createTestData: true, // 테스트 데이터 생성
logDetails: true // 상세 로그 출력
};
// 프로덕션 환경
const prodConfig = {
cleanDatabase: false, // 기존 데이터 유지
createTestData: false, // 테스트 데이터 생성 안함
logDetails: false // 최소 로그만 출력
};
주의사항
- 데이터 정합성
- 도메인 생성 후 상품 생성
- 사용자 생성 후 추천 관계 설정
-
외래 키 관계 확인
-
실행 환경
- 개발 환경에서만 실행
- 프로덕션 환경 실행 금지
-
백업 후 실행
-
테스트 데이터
- 실제와 유사한 데이터 구조
- 충분한 테스트 케이스
- 예외 상황 고려
시드 데이터 관리
- 버전 관리
- 시드 버전 기록
- 변경 이력 관리
-
마이그레이션 계획
-
데이터 보안
- 민감 정보 처리
- 환경변수 사용
-
접근 권한 관리
-
유지보수
- 정기적인 업데이트
- 불필요한 데이터 정리
- 문서화