Skip to content

Latest commit

 

History

History
209 lines (160 loc) · 6.26 KB

File metadata and controls

209 lines (160 loc) · 6.26 KB

DABOM 더미 데이터 생성기

ERD(v23.1) 기반 더미 데이터 생성기. 실시간 가족 데이터 통합 관리 시스템의 현재 스키마를 기준으로 FK 무결성이 보장된 대규모 더미 데이터를 생성합니다.

주요 대상 테이블

테이블 기본 건수 설명
customer 1,000,000 시스템 사용자 (가족 구성원)
admin 100 백오피스 운영자
policy 4 (타입별 1개) 정책 템플릿
family 250,000 가족 메타 정보
family_quota 250,000 가족 월별 quota/usage 스냅샷
family_member ~1,000,000 가족-사용자 매핑 (가족당 2~10명)
customer_quota ~1,000,000 구성원별 월별 할당량
usage_record 5,000,000 데이터 사용 이력
policy_assignment 500,000 정책 적용 매핑
notification_log 2,000,000 알림 발송 이력

이외에도 reward, mission, appeal, recap 계열 테이블을 함께 생성합니다.

사전 준비

Python 3.10+ 필요

# sudo apt install python3.12-venv -y  # venv 설치가 안 되어 있는 경우

python3 -m venv .venv
source .venv/bin/activate
pip install .

Windows (CMD / PowerShell):

python -m venv .venv
.venv\Scripts\activate
pip install .

실행 방법

Windows (CMD / PowerShell)

./run.bat --scale 0.01 --mode csv

Bash (Git Bash / Linux / Mac)

./run.sh --scale 0.01 --mode csv

직접 실행

# Bash
PYTHONPATH=src python -m generator --scale 0.01 --mode csv

# PowerShell
$env:PYTHONPATH="src"; python -m generator --scale 0.01 --mode csv

주요 옵션

옵션 설명 기본값
--mode {csv,db,both} 출력 모드 csv
--scale FACTOR 전체 스케일 배율 (0.001 = 0.1%, 1.0 = 100%) 1.0
--output-dir PATH CSV 출력 디렉토리 ./output
--config PATH 설정 파일 경로 config/default.yaml
--seed N 랜덤 시드 (재현성) 42
--tables T1,T2,... 특정 테이블만 생성 전체
--skip-tables T1,T2,... 특정 테이블 제외 -
--schema-only DDL만 출력 -
--dry-run 설정 검증만 수행 -
--verbose 상세 로깅 -

DB 연결 옵션 (--mode db 또는 --mode both)

옵션 기본값
--db-host localhost
--db-port 3306
--db-user root
--db-password (빈 문자열)
--db-name family_data
--batch-size 1000

사용 예시

# 소규모 테스트 (0.1% = 고객 1,000명)
./run.bat --scale 0.001

# 1% 스케일 (고객 10,000명) - 개발 환경 추천
./run.bat --scale 0.01

# 풀 스케일 (고객 1,000,000명)
./run.bat

# DB에 직접 삽입
./run.bat --mode db --db-host localhost --db-name family_data

# CSV + DB 동시
./run.bat --mode both

# 특정 테이블만 생성
./run.bat --tables customer,family,family_member

# usage_record 제외 (빠른 테스트)
./run.bat --skip-tables usage_record

# 여러 테이블 제외
./run.bat --skip-tables usage_record,notification_log

# 설정만 확인
./run.bat --dry-run --scale 0.1

출력물

CSV 모드 (--mode csv)

output/ 디렉토리에 테이블당 1개 CSV 파일 + DDL 생성:

output/
├── schema.sql              # CREATE TABLE DDL
├── customer.csv
├── admin.csv
├── policy.csv
├── family.csv
├── family_quota.csv
├── family_member.csv
├── customer_quota.csv
├── usage_record.csv
├── policy_assignment.csv
├── notification_log.csv
└── ... (활성 생성기별 CSV)
  • NULL 값은 \N으로 표기 (MySQL LOAD DATA INFILE 호환)
  • JSON 필드는 이스케이핑된 문자열로 저장

MySQL 적재 방법

-- 1) DDL 실행
source output/schema.sql;

-- 2) CSV 적재 (테이블별)
LOAD DATA LOCAL INFILE 'output/customer.csv'
INTO TABLE customer
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

DB 모드 (--mode db)

MySQL에 직접 배치 INSERT. FOREIGN_KEY_CHECKS=0으로 빠르게 적재합니다.

설정 파일

config/default.yaml에서 상세 설정 가능:

  • scale: 테이블별 건수 (policy 제외 - 타입별 자동 생성)
  • family: 가족 구성원 수 (min/max/avg)
  • data: soft delete 비율, 할당량 초과 비율, 날짜 범위 등
  • output: 출력 모드, CSV/DB 설정
  • performance: 배치 크기, 시드

데이터 특성

  • 한국어: 이름, 가족명, 알림 메시지 등 한국어 데이터 (Faker ko_KR)
  • FK 무결성: 토폴로지 순서로 생성하여 모든 외래키 참조 보장
  • family_quota ↔ customer_quota 정합성:
    • family_quota.used_bytes = 구성원 monthly_used_bytes 합계
    • MONTHLY_LIMIT_EXCEEDED 차단 = 실제 사용량 >= 한도일 때만
    • FAMILY_QUOTA_EXCEEDED 차단 = 가족 할당량 실제 초과 시만
    • ~5% 가족은 할당량 초과 상태 (over_quota_ratio 설정)
  • 정책 템플릿: policy는 타입별 1개 템플릿, policy_assignment가 다양성 담당
  • OWNER 보장: 모든 가족에 최소 1명의 OWNER 존재
  • Soft Delete: 5% 레코드에 deleted_at 설정
  • 재현성: --seed 옵션으로 동일 데이터 재생성 가능
  • 비밀번호: 전체 사용자 동일 BCrypt 해시 (password123)

프로젝트 구조

.generator-dummy/
├── config/default.yaml          # 기본 설정
├── schema/                      # Flyway 마이그레이션 DDL + 로컬 헬퍼
├── src/generator/
│   ├── __main__.py              # 진입점
│   ├── cli.py                   # CLI 파서
│   ├── config.py                # 설정 로딩
│   ├── constants.py             # 상수 (ENUM, 메시지 등)
│   ├── context.py               # 생성기 간 공유 상태
│   ├── pipeline.py              # 오케스트레이터
│   ├── generators/              # 전체 테이블 생성기
│   ├── writers/                 # CSV / DB Writer
│   └── utils/                   # Faker, 진행률 유틸
├── run.bat                      # Windows 실행 스크립트
└── run.sh                       # Bash 실행 스크립트