Skip to content

voidmain443/oracle_db_tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 SQLP 대용량 E-Commerce 데이터 제너레이터 수업

Oracle Database Python Data Volume SQL*Loader

이 프로젝트는 Oracle 데이터베이스 성능 튜닝(SQLP/SQLD) 및 아키텍처 학습을 위해 수십만 건의 현실적인 E-Commerce 데이터를 초고속으로 생성하고 오라클에 적재해 주는 파이썬 기반 데이터 파이프라인입니다.

메모리 집약적인 INSERT 구문 대신 Python Generator 기반의 Streaming 기술Oracle SQL*Loader를 활용하여 시스템 자원을 거의 쓰지 않고 30개의 복잡한 관계형 테이블을 단 몇 초 만에 세팅해 줍니다.


📊 통합 ERD (Entity Relationship Diagram)

이 프로젝트는 크게 3가지 도메인(핵심 커머스, 고객 참여, 분석/리워드)으로 나뉘며 총 약 484,798건의 데이터가 생성됩니다. 실무와 유사한 SQL 튜닝 실습(계층형 질의, 조인, 선분이력 등)을 위해 30개의 테이블이 아래와 같이 유기적으로 설계되어 있습니다.

erDiagram
    %% Core Commerce
    CATEGORIES ||--o{ CATEGORIES : parent_id
    CATEGORIES ||--o{ PRODUCTS : category_id
    SUPPLIERS ||--o{ PRODUCTS : supplier_id
    PRODUCTS ||--o{ PRODUCT_IMAGES : product_id
    PRODUCTS ||--o{ PRODUCT_PRICES : product_id
    CUSTOMERS ||--o{ CUSTOMER_ADDRESSES : customer_id
    STAFF ||--o{ STAFF : manager_id
    CUSTOMERS ||--o{ ORDERS : customer_id
    ORDERS ||--o{ ORDER_ITEMS : order_id
    PRODUCTS ||--o{ ORDER_ITEMS : product_id
    ORDERS ||--|{ PAYMENTS : order_id
    ORDERS ||--|{ SHIPPING : order_id
    CUSTOMER_ADDRESSES ||--o{ SHIPPING : address_id

    %% Engagement
    PRODUCTS ||--o{ REVIEWS : product_id
    CUSTOMERS ||--o{ REVIEWS : customer_id
    CUSTOMERS ||--o{ WISHLISTS : customer_id
    PRODUCTS ||--o{ WISHLISTS : product_id
    CUSTOMERS ||--o{ CARTS : customer_id
    CARTS ||--o{ CART_ITEMS : cart_id
    PRODUCTS ||--o{ CART_ITEMS : product_id
    CUSTOMERS ||--o{ COMPLAINTS : customer_id
    ORDERS ||--o{ COMPLAINTS : order_id
    COMPLAINTS ||--o{ RETURNS : complaint_id
    ORDER_ITEMS ||--o{ RETURNS : order_item_id
    PRODUCTS ||--o{ PRODUCT_QNA : product_id
    CUSTOMERS ||--o{ PRODUCT_QNA : customer_id
    PRODUCT_QNA ||--o{ PRODUCT_QNA : parent_qna_id

    %% Analytics & Rewards
    CUSTOMERS ||--o{ POINT_TRANSACTIONS : customer_id
    PRODUCTS ||--o{ PRODUCT_VIEWS : product_id
    CUSTOMERS ||--o{ PRODUCT_VIEWS : customer_id
    PROMOTIONS ||--o{ PROMOTION_PRODUCTS : promo_id
    PRODUCTS ||--o{ PROMOTION_PRODUCTS : product_id
    CUSTOMERS ||--o{ CUSTOMER_GRADE_HISTORY : customer_id
    TAGS ||--o{ PRODUCT_TAGS : tag_id
    PRODUCTS ||--o{ PRODUCT_TAGS : product_id
    PRODUCTS ||--o{ INVENTORY_TRANSACTIONS : product_id
    COUPONS ||--o{ COUPON_USAGE : coupon_id
    CUSTOMERS ||--o{ COUPON_USAGE : customer_id
    ORDERS ||--o{ COUPON_USAGE : order_id
Loading

🎯 주요 특징 (Key Features)

  • 초고속/저메모리 아키텍처: Python yield 제너레이터를 사용하여 수십만 건의 데이터를 CSV로 스트리밍(Streaming) 생성하므로 메모리 초과(OOM)가 발생하지 않습니다.
  • SQL*Loader 완벽 연동: 파이썬 스크립트가 오라클 초고속 적재를 위한 제어 파일(.ctl)과 로드 쉘 스크립트(load_data.sh)를 자동으로 생성합니다.
  • 현실적인 비즈니스 로직: 단순 무작위 데이터가 아닌 FK 제약조건 준수, 선분이력(SCD Type 2), 비대칭(Skewed) 데이터 등 SQL 튜닝 실습에 최적화된 시나리오가 담겨 있습니다.
  • 총 30개 테이블, 25만+ 로우(Rows): 상품 카테고리 계층형 구조, 주문 이력, 분석(포인트, 위시리스트) 등 핵심 이커머스 도메인 구조를 완벽하게 구현했습니다.

🚀 빠른 시작 (Quick Start)

1. 데이터 생성 (로컬 PC)

# 의존성 설치 및 메인 파이프라인 구동 (약 20MB의 CSV 데이터가 즉시 생성됨)
uv run src/main.py

2. 도커로 파일 복사 및 스키마 설치

# 도커 내부로 파일 복사 및 권한 픽스 (ORA-SQL*Loader-522 방지)
docker cp output/ oracle26ai:/home/oracle/all_schema/output/
docker exec -u 0 oracle26ai chown -R oracle:oinstall /home/oracle/all_schema

# 30개 테이블 DDL 설치 (비밀번호 admin1234 입력)
docker exec -it oracle26ai sqlplus sys/비밀번호 AS SYSDBA
SQL> @/home/oracle/all_schema/output/install.sql

3. 데이터 적재 (초고속 SQL*Loader)

docker exec -it oracle26ai bash
cd /home/oracle/all_schema/output/
sh load_data.sh

4. 데이터 확인 (DBeaver 등)

-- 모든 데이터가 다 들어갔는지 확인해 보세요!
SELECT table_name, TO_NUMBER(EXTRACTVALUE(XMLTYPE(DBMS_XMLGEN.GETXML('SELECT COUNT(*) c FROM ECOMMERCE.' || table_name)), '/ROWSET/ROW/C')) AS row_count
FROM dba_tables WHERE owner = 'ECOMMERCE' ORDER BY row_count DESC;

📂 저장소 구조 (Repository Structure)

.
├── src/
│   ├── generators/       # 데이터를 뽑아내는 파이썬 Faker 제너레이터 로직
│   ├── exporters/        # CSV, CTL, SQL 등 결과물을 출력하는 Exporter 
│   ├── schema.py         # Table, Column 등 DDL 생성을 위한 메타클래스
│   ├── schema_definition.py # 총 30개의 스키마/테이블/제약조건 정의
│   └── main.py           # 파이프라인 실행 엔트리포인트 (uv run src/main.py)
├── output/               # 스크립트 실행 시 생성되는 결과물 (SQL, CSV, CTL)
├── docs/                 # 아키텍처 설계 및 트러블슈팅 가이드
├── INSTALLATION_GUIDE.md # 🐳 완벽 설치 및 도커 연동 가이드 (필독)
└── pyproject.toml        # 의존성 패키지 (Faker) 및 uv 설정

📖 문서 가이드 (Documentation)

이 프로젝트를 처음 사용하시거나 커스터마이징하고 싶으신 분들은 아래의 문서들을 순서대로 읽어주세요!

0. [사전 준비] 오라클 도커 이미지(Oracle 23ai Free) 셋팅

본 프로젝트는 Oracle Database 23ai Free 버전을 도커(Docker)로 구동하여 실습하는 것을 권장합니다. 로컬 환경에 오라클이 설치되어 있지 않다면 아래 과정을 먼저 진행해 주세요.

① 오라클 최신 무료 이미지 다운로드 Oracle Container Registry에서 이미지를 가져옵니다.

docker pull container-registry.oracle.com/database/free:latest

② 도커 컨테이너 구동 및 비밀번호 설정 오라클 이미지를 실행할 때 -e ORACLE_PWD=원하는비밀번호 옵션을 주어 초기 관리자(SYS, SYSTEM) 및 초기 스키마 비밀번호를 일괄 설정할 수 있습니다. 이 실습에서는 통일성을 위해 admin1234로 셋팅합니다.

docker run -d --name oracle26ai \
  -p 1521:1521 \
  -e ORACLE_PWD=admin1234 \
  container-registry.oracle.com/database/free:latest

(주의: 컨테이너가 완전히 부팅되고 데이터베이스가 마운트될 때까지 약 1~2분 정도 소요될 수 있습니다. docker logs -f oracle26ai 명령어로 부팅 완료를 확인하세요.)

③ 관리자(SYSDBA)로 접속 및 PDB 이동 데이터베이스가 준비되면, 터미널에서 아래 명령어로 최고 관리자 계정(sys as sysdba)에 접속합니다.

docker exec -it oracle26ai sqlplus sys/admin1234 as sysdba

접속 후 제일 먼저 플러거블 데이터베이스(PDB) 로 세션을 변경해야 합니다. 오라클 12c 이후의 멀티테넌트 구조에서는 기본 컨테이너(CDB$ROOT) 대신 사용자 정의 데이터를 저장할 수 있는 하위 컨테이너(Free 버전의 경우 FREEPDB1)에서 작업해야 하기 때문입니다.

SQL> ALTER SESSION SET CONTAINER = FREEPDB1;
Session altered.

여기까지 완료하셨다면 데이터를 적재할 모든 준비가 끝났습니다! 바로 다음 INSTALLATION_GUIDE.md를 따라 파이썬 제너레이터를 실행해 주세요.

가장 중요한 문서입니다. 파이썬 환경 설정(uv)부터 시작해서, 생성된 데이터를 오라클 도커(Docker) 컨테이너 내부로 안전하게 밀어넣는 방법까지 5단계로 매우 친절하게 설명되어 있습니다.

왜 무거운 INSERT 문 대신 CSVSQL*Loader 구조를 선택했는지, 파이썬 객체지향 메타클래스 설계는 어떻게 이루어져 있는지에 대한 기술적인 결정 사항을 다룹니다.

개발 및 연동 과정에서 마주쳤던 치명적인 오라클 에러들(ORA-01918 PDB 접속 에러, ORA-01722 줄바꿈 에러, ORA-SQL*Loader 권한 에러 등)을 어떻게 파이썬 코드로 깔끔하게 해결했는지에 대한 생생한 여정이 담겨있습니다.


📋 데이터 볼륨 및 테이블 상세 설명

도메인 (Category) 테이블 (Table Name) 예상 Row 개수 설명 (Description)
Core Commerce categories 53 상품 카테고리 (계층형 Self-Join 구조)
Core Commerce suppliers 60 상품 공급업체
Core Commerce products 280 핵심 상품 마스터 데이터
Core Commerce product_images 686 상품별 다중 이미지
Core Commerce product_prices 712 상품 가격 변동 이력
Core Commerce customers 5,230 고객 기본 정보
Core Commerce customer_addresses 7,313 고객 배송지 주소
Core Commerce staff 5 내부 직원 정보
Core Commerce orders 34,908 고객 주문 마스터
Core Commerce order_items 73,128 주문별 상세 상품 내역
Core Commerce payments 34,908 주문 결제 내역
Core Commerce shipping 34,908 배송 추적 정보
Engagement reviews 15,000 상품 리뷰
Engagement wishlists 20,000 고객 위시리스트
Engagement carts 10,000 쇼핑카트 (Active/Abandoned)
Engagement cart_items 25,030 장바구니 담긴 상품 내역
Engagement complaints 1,000 고객 CS 문의/컴플레인
Engagement returns 2,000 상품 반품 요청 내역
Engagement product_qna 5,000 상품별 Q&A
Analytics point_transactions 45,000 포인트 적립/사용/소멸 로그
Analytics product_views 100,000 상품 클릭/조회 로그
Analytics promotions 129 기획전 및 할인 행사
Analytics promotion_products 439 기획전 대상 상품 매핑
Analytics customer_grade_history 12,000 고객 등급 변동 이력 (SCD Type 2)
Analytics calendar 3,649 일자별 시계열 분석을 위한 달력 차원 테이블
Analytics tags 46 상품 검색용 태그
Analytics product_tags 564 상품-태그 매핑
Analytics inventory_transactions 8,000 재고 입/출고/조정 로그
Analytics coupons 20 할인 쿠폰 마스터
Analytics coupon_usage 5,000 쿠폰 발급 및 사용 내역

About

SQLP_HR실습이후 데이터셋 생성 제너레이터, Oracle Database 26ai에서 SQLP 실습을 위해 꾸려진 이커머스 데이터셋.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages