본문 바로가기
C.W.K.
Stream
Lesson 04 of 10 · published

개발용 데이터 재현하기

~10 min · apps, seeding

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

새 데이터베이스를 같은 출발점으로

seed는 마이그레이션을 마친 빈 데이터베이스에 개발과 시험에 필요한 가짜 데이터를 넣어. 고정 SQL은 정확히 재현하기 쉽고, Faker·Mimesis·모델 팩터리 같은 생성기는 양과 다양성을 만들기 좋아.

두 번 실행해도 안전하게

고정 식별자는 ON CONFLICT DO NOTHING으로 넣거나 개발 환경에서만 비우고 다시 채워. 한 번만 성공하는 seed는 언젠가 두 번째 실행에서 작업을 막아.

운영 개인정보를 복사하지 마

현실적인 모양은 가짜 데이터로 만들 수 있어. 실제 고객 데이터를 노트북으로 옮기는 순간 개발 편의가 보안 사고로 바뀔 수 있어.

고정 자료는 seed.sql에 두고, 고정 식별자를 다시 넣을 때는 ON CONFLICT DO NOTHING으로 멱등성을 지킬 수 있어.

Code

멱등한 SQL 초기 데이터·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;
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

프로젝트를 완전한 시작 상태로 만드는 멱등 초기 데이터 스크립트를 작성해. 데이터베이스를 지우고 다시 만든 뒤 마이그레이션과 초기 데이터 입력을 차례로 실행해서 전체 흐름이 동작하는지 확인해.

Progress

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

댓글 0

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

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