C.W.K.
Stream
Lesson 04 of 10 · published

개발 위한 Seeding 데이터

~10 min · apps, seeding

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

재현 가능한 로컬 데이터

Seed 가 신선한 DB 를 합리적 테스트 데이터로 채우는 스크립트 (SQL 또는 코드). 프로젝트 실행하는 모든 개발자가 같은 시작 상태 — 같은 username, 같은 product, 같은 edge case.

두 패턴

  1. Static SQL seed: INSERT 있는 seed.sql. 단순, deterministic, git commit 쉬움.
  2. Programmatic seed: 데이터 생성하는 스크립트 (Faker, Mimesis, 모델 factory). 다양성과 양에 더 좋음; 정확히 재현 어려움.

멱등성 win

Seed 멱등하게 — 재실행이 크래시 안 나야. 고정 ID 행엔 ON CONFLICT DO NOTHING; 다른 모든 거엔 truncate-then-reload (dev 만). 두 번 실행 못 할 거는 결국 두 번 실행됨.

Code

멱등 SQL seed·sql
-- seeds/users.sql
INSERT INTO users (id, name, email, role) VALUES
    (1, 'Alice Admin',     'alice@dev.local',  'admin'),
    (2, 'Bob Builder',     'bob@dev.local',    'user'),
    (3, 'Carol Customer',  'carol@dev.local',  'user')
ON CONFLICT (id) DO NOTHING;

INSERT INTO products (id, name, price) VALUES
    (1, 'Widget',  9.99),
    (2, 'Gadget', 24.50),
    (3, 'Gizmo',  99.00)
ON CONFLICT (id) DO NOTHING;
Programmatic seed (Python + Faker)·python
from faker import Faker
fake = Faker()

with conn.cursor() as cur:
    for _ in range(1000):
        cur.execute(
            "INSERT INTO users (name, email) VALUES (%s, %s) ON CONFLICT (email) DO NOTHING",
            (fake.name(), fake.unique.email()),
        )
conn.commit()

External links

Exercise

프로젝트의 완전한 시작 상태 만드는 멱등 seed 스크립트 작성. DB drop, 재생성, 마이그레이션 실행, 그 다음 seed. End-to-end 동작 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.