테스트 데이터로 데이터베이스 초기화
INSERT ... SELECT와 generate_series로 현실적인 테스트 데이터를 생성하고 간단한 분석 쿼리로 확인합니다.
테스트 데이터로 데이터베이스 초기화은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
시드 데이터가 필요한 이유
빈 데이터베이스에서는 버그가 드러나지 않습니다. 현실적인 데이터가 필요한 이유는 다음과 같습니다:
- UI/E2E 테스트를 실행하기 위해
- 성능 특성(인덱스, 쿼리 실행 계획)을 확인하기 위해
- 애플리케이션을 시연하기 위해
수동으로 작성한 시드 데이터
몇 개의 "고정 데이터" 행만 필요하다면 SQL이나 마이그레이션에 직접 작성하세요:
INSERT INTO users (id, email, full_name) VALUES
(1, 'alice@example.com', 'Alice Adams'),
(2, 'bob@example.com', 'Bob Brown');
SELECT setval('users_id_seq', (SELECT MAX(id) FROM users));대량 작업에 generate_series 사용하기
generate_series를 활용하세요. 게시물 1000개를 만들어 보겠습니다:
INSERT INTO posts (author_id, title, body, published_at)
SELECT
((random() * 9 + 1)::int), -- random user 1-10
'Post number ' || g,
'Lorem ipsum body ' || g,
NOW() - (random() * INTERVAL '90 days')
FROM generate_series(1, 1000) AS g;무작위 외래 키
무작위 부모 행을 선택합니다:
INSERT INTO comments (post_id, author_id, body)
SELECT
(SELECT id FROM posts ORDER BY random() LIMIT 1),
(SELECT id FROM users ORDER BY random() LIMIT 1),
'Sample comment ' || g
FROM generate_series(1, 5000) AS g;
-- Slow at scale — see next slide for a faster pattern.더 빠르게: 부모 행 미리 캐시하기
후보 ID를 한 번만 구체화합니다:
WITH u AS (SELECT id FROM users),
p AS (SELECT id FROM posts)
INSERT INTO comments (post_id, author_id, body)
SELECT
(SELECT id FROM p OFFSET floor(random()*1000)::int LIMIT 1),
(SELECT id FROM u OFFSET floor(random()*10)::int LIMIT 1),
'Sample comment ' || g
FROM generate_series(1, 5000) AS g;faker_fdw와 도구
이름, 주소, 단락과 같이 더 풍부한 가짜 데이터를 만들려면 다음을 사용하세요:
faker_fdw— Python Faker를 노출하는 Postgres 확장- Node의
@faker-js/faker - 스크립트 형태의 Django/Rails 시드 생성기
대량 가져오기에 COPY 사용하기
100만 개의 행을 불러올 때는 COPY가 INSERT보다 5~10배 빠릅니다:
COPY users (email, full_name)
FROM '/tmp/seed_users.csv' WITH (FORMAT csv, HEADER true);시퀀스 재설정
명시적인 ID를 사용하여 행을 직접 삽입했다면, 이후 자동 생성되는 ID가 충돌하지 않도록 시퀀스를 미리 진행하세요:
SELECT setval('users_id_seq', (SELECT COALESCE(MAX(id), 0) FROM users));멱등성 있는 시드 데이터
시드를 여러 번 실행해도 안전하도록 만드세요. UPSERT 또는 TRUNCATE 후 INSERT를 사용합니다:
INSERT INTO products (sku, name, price) VALUES
('A-001', 'Widget', 9.99)
ON CONFLICT (sku) DO UPDATE
SET name = EXCLUDED.name, price = EXCLUDED.price;실제와 같은 분포
테스트 데이터는 운영 환경의 형태를 반영해야 합니다. 게시물의 80%에 댓글이 0개이고 1%에 1000개가 있다면 테스트 데이터도 그렇게 구성해야 합니다. 그렇지 않으면 인덱스 실행 계획이 잘못된 정보를 줄 수 있습니다.
CI에서 시드 데이터 넣기
엔드투엔드 테스트에서는 마이그레이션 후, 테스트 모음 실행 전에 시드 스크립트를 실행하세요. 시드는 버전 관리에 보관하세요.
복습
좋은 시드 데이터 = 현실적인 데이터 + 멱등성 있는 스크립트 + 빠른 로드(대량 데이터에는 COPY).
- 대량 데이터에는 generate_series
- 반복 실행에는 UPSERT
- 수동 삽입 후에는 setval
- 운영 환경의 분포를 반영
빠른 확인
테스트 데이터 10,000개 행을 빠르게 삽입하려고 합니다. 행 번호를 생성하는 PostgreSQL 함수는 무엇입니까?
자주 묻는 질문
“테스트 데이터로 데이터베이스 초기화” 강의는 무료인가요?
네 — “테스트 데이터로 데이터베이스 초기화” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“테스트 데이터로 데이터베이스 초기화”에서 뭘 배우나요?
INSERT ... SELECT와 generate_series로 현실적인 테스트 데이터를 생성하고 간단한 분석 쿼리로 확인합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“테스트 데이터로 데이터베이스 초기화” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 블로그 모델링: 사용자, 게시물, 댓글
- 키와 형식 선택
- 일반 쿼리를 위한 인덱스
- 테스트 데이터로 데이터베이스 초기화