콘텐츠로 이동

데이터베이스 시드

개요

시드(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      // 최소 로그만 출력
};

주의사항

  1. 데이터 정합성
  2. 도메인 생성 후 상품 생성
  3. 사용자 생성 후 추천 관계 설정
  4. 외래 키 관계 확인

  5. 실행 환경

  6. 개발 환경에서만 실행
  7. 프로덕션 환경 실행 금지
  8. 백업 후 실행

  9. 테스트 데이터

  10. 실제와 유사한 데이터 구조
  11. 충분한 테스트 케이스
  12. 예외 상황 고려

시드 데이터 관리

  1. 버전 관리
  2. 시드 버전 기록
  3. 변경 이력 관리
  4. 마이그레이션 계획

  5. 데이터 보안

  6. 민감 정보 처리
  7. 환경변수 사용
  8. 접근 권한 관리

  9. 유지보수

  10. 정기적인 업데이트
  11. 불필요한 데이터 정리
  12. 문서화