본문으로 건너뛰기

시드 데이터 (Seed Data)

개발, 테스트, 데모 환경을 위한 시드 데이터 구성 및 실행 방법을 설명합니다.

시드 데이터 개요​

데이터 요약​

데이터 저장소데이터 유형건수
Aurora사용자, 주문, 결제, 재고, 배송50 사용자, 200 주문, 150 재고
DocumentDB카테고리, 상품, 프로필, 위시리스트, 리뷰, 알림10 카테고리, 150 상품, 300 리뷰
OpenSearch상품 검색 인덱스150 상품
MSKKafka 토픽40+ 토픽
ElastiCache캐시, 세션, 장바구니다수 키

카테고리 (10개)​

ID카테고리명Slug
CAT-01전자제품electronics
CAT-02패션fashion
CAT-03식품food
CAT-04뷰티beauty
CAT-05가전appliances
CAT-06스포츠sports
CAT-07도서books
CAT-08반려동물pets
CAT-09가구furniture
CAT-10유아용품baby

상품 (150개)​

카테고리별 15개씩, 총 150개의 한국 시장 맞춤 상품 데이터입니다.

전자제품 (CAT-01)​

상품명브랜드가격
삼성 갤럭시 S25 울트라삼성전자1,799,000원
아이폰 16 프로 맥스Apple1,990,000원
LG 그램 17인치 노트북LG전자2,190,000원
삼성 갤럭시 탭 S10삼성전자1,290,000원
소니 WH-1000XM6 헤드폰Sony459,000원

패션 (CAT-02)​

상품명브랜드가격
나이키 에어맥스 DNNike199,000원
노스페이스 눕시 패딩The North Face369,000원
리바이스 501 오리지널 진Levi's129,000원
무신사 스탠다드 맨투맨무신사 스탠다드29,900원

식품 (CAT-03)​

상품명브랜드가격
농심 신라면 멀티팩농심4,980원
비비고 왕교자 1kgCJ비비고12,900원
종가집 포기김치 3kg종가집22,900원
참이슬 후레쉬 360ml 20본하이트진로28,900원

사용자 (50명)​

한국 이름으로 구성된 테스트 사용자입니다.

-- 예시 사용자
('a0000001-0000-0000-0000-000000000001', 'kim.minjun@gmail.com', '김민준', 'active'),
('a0000001-0000-0000-0000-000000000002', 'lee.soyeon@naver.com', '이소연', 'active'),
('a0000001-0000-0000-0000-000000000003', 'park.jihoon@kakao.com', '박지훈', 'active'),
...

회원 등급​

등급사용자 수
bronze10명
silver10명
gold15명
platinum10명
diamond4명
vip1명

주문 (200건)​

다양한 상태의 주문 데이터입니다.

주문 상태 분포​

배송 주소​

도시구예시 주소
서울강남구테헤란로 152
서울마포구월드컵북로 396
부산해운대구해운대해변로 264
인천연수구송도과학로 32
대전유성구대학로 99
대구수성구달구벌대로 2503
광주서구상무대로 1001
수원영통구삼성로 129
성남분당구판교역로 235
제주제주시노형로 75

Kafka 토픽​

도메인별 토픽​

# 주문 도메인
order.created (12 partitions)
order.confirmed (12 partitions)
order.cancelled (6 partitions)
order.status-changed (12 partitions)

# 결제 도메인
payment.initiated (12 partitions)
payment.completed (12 partitions)
payment.failed (6 partitions)
payment.refunded (6 partitions)

# 재고 도메인
inventory.reserved (12 partitions)
inventory.released (6 partitions)
inventory.low-stock (3 partitions)
inventory.restocked (6 partitions)

# 배송 도메인
shipping.dispatched (12 partitions)
shipping.in-transit (12 partitions)
shipping.delivered (12 partitions)
shipping.returned (6 partitions)

# 알림 도메인
notification.email (6 partitions)
notification.push (6 partitions)
notification.sms (3 partitions)
notification.kakao (6 partitions)

# 사용자 도메인
user.registered (6 partitions)
user.profile-updated (6 partitions)
user.login (6 partitions)

# 상품 도메인
product.created (6 partitions)
product.updated (6 partitions)
product.price-changed (6 partitions)
product.viewed (12 partitions)

# 리뷰 도메인
review.submitted (6 partitions)
review.approved (6 partitions)

# 분석 도메인
search.query-logged (12 partitions)
analytics.page-view (12 partitions)
analytics.click (12 partitions)

# 인프라
dlq.all (6 partitions, 30일 보관)
saga.orchestrator (12 partitions)

ElastiCache 데이터​

캐시 유형​

키 패턴용도TTL
product:{id}상품 상세 캐시1시간
cache:categories카테고리 목록24시간
cart:{userId}장바구니7일
session:{sessionId}사용자 세션2시간
ratelimit:api:{userId}API Rate Limit60초
leaderboard:popular인기 상품 (Sorted Set)영구
stock:{productId}실시간 재고영구
search-history:{userId}검색 기록30일
promo:*프로모션 캐시다양

예시 데이터​

// 장바구니 (cart:a0000001-0000-0000-0000-000000000001)
{
"userId": "a0000001-0000-0000-0000-000000000001",
"items": [
{"productId": "PROD-001", "quantity": 2, "price": 1799000},
{"productId": "PROD-015", "quantity": 1, "price": 299000}
],
"updatedAt": "2026-03-15T10:00:00Z"
}

// 프로모션 (promo:flash-sale)
{
"id": "FLASH-001",
"title": "오늘만 특가! 전자제품 최대 50% 할인",
"products": ["PROD-001", "PROD-005", "PROD-010", "PROD-015"],
"discountRate": 50
}

시드 스크립트 실행​

환경 변수 설정​

# Aurora
export AURORA_ENDPOINT="production-aurora-global-us-east-1.cluster-xxx.us-east-1.rds.amazonaws.com"
export AURORA_USER="mall_admin"
export AURORA_PASSWORD="<password>"
export AURORA_DB="mall"

# DocumentDB
export DOCUMENTDB_URI="mongodb://mall_admin:<password>@production-docdb-global-us-east-1.cluster-xxx.us-east-1.docdb.amazonaws.com:27017/?tls=true&replicaSet=rs0"
export TLS_CA_FILE="/tmp/global-bundle.pem"

# OpenSearch
export OPENSEARCH_ENDPOINT="https://vpc-production-os-use1-xxx.us-east-1.es.amazonaws.com"
export OPENSEARCH_USER="admin"
export OPENSEARCH_PASS="<password>"

# MSK
export MSK_BOOTSTRAP="b-1.productionmskuseast1.xxx.c3.kafka.us-east-1.amazonaws.com:9096"
export KAFKA_HOME="/opt/kafka"

# ElastiCache
export ELASTICACHE_ENDPOINT="clustercfg.production-elasticache-us-east-1.xxx.use1.cache.amazonaws.com"
export ELASTICACHE_PORT="6379"

개별 스크립트 실행​

cd /home/ec2-user/multi-region-architecture/scripts/seed-data

# Aurora PostgreSQL
PGPASSWORD=$AURORA_PASSWORD psql \
-h $AURORA_ENDPOINT \
-U $AURORA_USER \
-d $AURORA_DB \
-f seed-aurora.sql

# DocumentDB
# 먼저 TLS CA 인증서 다운로드
wget -O /tmp/global-bundle.pem https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
node seed-documentdb.js

# OpenSearch
bash seed-opensearch.sh

# Kafka Topics
bash seed-kafka-topics.sh

# ElastiCache
bash seed-redis.sh

마스터 스크립트 실행​

# 모든 시드 데이터 한 번에 실행
cd /home/ec2-user/multi-region-architecture/scripts/seed-data
bash run-seed.sh

# 출력 예시
============================================
Shopping Mall - Data Seeding
Region: us-east-1
Time: 2026-03-15T10:00:00Z
============================================

──────────────────────────────────────────
▶ Aurora PostgreSQL
──────────────────────────────────────────
Seed complete: 50 users, 200 orders, 200 payments, 150 inventory items, 180 shipments
✓ Aurora PostgreSQL completed

──────────────────────────────────────────
▶ DocumentDB
──────────────────────────────────────────
Inserted 10 categories
Inserted 150 products
Inserted 50 user profiles
Inserted 30 wishlists
Inserted 300 reviews
Inserted 50 notifications
✓ DocumentDB completed

──────────────────────────────────────────
▶ OpenSearch
──────────────────────────────────────────
Bulk indexing complete: 150 products indexed successfully
✓ OpenSearch completed

──────────────────────────────────────────
▶ MSK Topics
──────────────────────────────────────────
MSK seed complete: 42 topics created
✓ MSK Topics completed

──────────────────────────────────────────
▶ ElastiCache
──────────────────────────────────────────
Total keys: 350
✓ ElastiCache completed

============================================
Seed Summary
============================================
Succeeded: 5
Failed: 0
Skipped: 0
============================================

데이터 검증​

Aurora 검증​

-- 테이블별 건수 확인
SELECT 'users' as table_name, count(*) FROM users
UNION ALL
SELECT 'orders', count(*) FROM orders
UNION ALL
SELECT 'order_items', count(*) FROM order_items
UNION ALL
SELECT 'payments', count(*) FROM payments
UNION ALL
SELECT 'inventory', count(*) FROM inventory
UNION ALL
SELECT 'shipments', count(*) FROM shipments;

-- 주문 상태 분포
SELECT status, count(*) FROM orders GROUP BY status ORDER BY count DESC;

DocumentDB 검증​

// mongosh
use mall

// 컬렉션별 건수
db.getCollectionNames().forEach(c => {
print(`${c}: ${db[c].countDocuments()}`);
});

// 카테고리별 상품 수
db.products.aggregate([
{ $group: { _id: "$category.name", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
]);

OpenSearch 검증​

# 인덱스 목록
curl -s -u $OPENSEARCH_USER:$OPENSEARCH_PASS --insecure \
"$OPENSEARCH_ENDPOINT/_cat/indices?v"

# 상품 검색 테스트
curl -s -u $OPENSEARCH_USER:$OPENSEARCH_PASS --insecure \
-X POST "$OPENSEARCH_ENDPOINT/products/_search" \
-H 'Content-Type: application/json' \
-d '{"query": {"match": {"name": "삼성"}}, "size": 5}' | jq '.hits.hits[]._source.name'

ElastiCache 검증​

redis-cli -h $ELASTICACHE_ENDPOINT -p $ELASTICACHE_PORT --tls

# 키 개수
DBSIZE

# 인기 상품 TOP 5
ZREVRANGE leaderboard:popular 0 4 WITHSCORES

# 장바구니 확인
GET cart:a0000001-0000-0000-0000-000000000001

데이터 초기화​

테스트 후 데이터를 초기화해야 할 경우:

# Aurora - 테이블 truncate
psql -h $AURORA_ENDPOINT -U $AURORA_USER -d $AURORA_DB << 'EOF'
TRUNCATE shipments, payments, order_items, orders, inventory, users CASCADE;
EOF

# DocumentDB - 컬렉션 삭제
mongosh "$DOCUMENTDB_URI" --eval "
['categories','products','user_profiles','wishlists','reviews','notifications']
.forEach(c => db[c].drop())
"

# OpenSearch - 인덱스 삭제
curl -X DELETE "$OPENSEARCH_ENDPOINT/products" --insecure -u $OPENSEARCH_USER:$OPENSEARCH_PASS

# ElastiCache - 모든 키 삭제
redis-cli -h $ELASTICACHE_ENDPOINT --tls FLUSHALL

관련 문서​