How to Automate DB Migrations: Claude Code 활용 가이드
automate db migrations: Claude Code 활용. 실용적인 코드 예시와 단계별 가이드를 포함합니다.
DB마이그레이션の悩みをClaude Code로解決
스키마변경のたびに마이그레이션파일を手書きするのは手間がかかり、ミスも起きやすい作業です。Claude Code를 활용하면 스키마の설계변경から마이그레이션생성、시드 데이터데이터の업데이트まで一気に대응할 수 있습니다。
Prismaでの마이그레이션
스키마설계から마이그레이션実行まで
> Prisma스키마に다음의테이블를 추가해줘、마이그레이션を생성・適用して。
>
> 테이블: Order
> - id: UUID, 主キー
> - userId: User への外部キー
> - items: OrderItem[] (1対多)
> - totalAmount: Decimal
> - status: enum (pending, confirmed, shipped, delivered, cancelled)
> - createdAt, updatedAt
Claude Code가 생성する스키마の例です。
enum OrderStatus {
pending
confirmed
shipped
delivered
cancelled
}
model Order {
id String @id @default(uuid())
userId String
user User @relation(fields: [userId], references: [id])
items OrderItem[]
totalAmount Decimal @db.Decimal(10, 2)
status OrderStatus @default(pending)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
@@index([status])
}
model OrderItem {
id String @id @default(uuid())
orderId String
order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)
productId String
quantity Int
price Decimal @db.Decimal(10, 2)
}
그後、Claude Code는 自動で마이그레이션コマンドを実行します。
npx prisma migrate dev --name add_order_tables
Drizzleでの마이그레이션
Drizzle ORM를 사용하는場合も同様に指示할 수 있습니다。
> Drizzle ORMの스키마にOrder테이블를 추가해줘。
> 마이그레이션파일も생성して。
import { pgTable, uuid, decimal, timestamp, pgEnum } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
import { users } from "./users";
export const orderStatusEnum = pgEnum("order_status", [
"pending", "confirmed", "shipped", "delivered", "cancelled",
]);
export const orders = pgTable("orders", {
id: uuid("id").defaultRandom().primaryKey(),
userId: uuid("user_id").notNull().references(() => users.id),
totalAmount: decimal("total_amount", { precision: 10, scale: 2 }).notNull(),
status: orderStatusEnum("status").default("pending").notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
export const ordersRelations = relations(orders, ({ one, many }) => ({
user: one(users, { fields: [orders.userId], references: [users.id] }),
items: many(orderItems),
}));
既存스키마の변경
カラム추가やリネームなど、既存테이블の변경も安全に処理할 수 있습니다。
> users 테이블に다음의변경を加えて。
> - phoneNumber カラムを추가(nullable)
> - name を firstName と lastName に分割
> - 既存데이터の移行ロジックも含めて
Claude Code는 데이터移行スクリプト付きの마이그레이션を생성します。
-- マイグレーション: split_user_name
ALTER TABLE "users" ADD COLUMN "first_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "last_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "phone_number" VARCHAR(20);
-- 既存データの移行
UPDATE "users"
SET
"first_name" = split_part("name", ' ', 1),
"last_name" = CASE
WHEN array_length(string_to_array("name", ' '), 1) > 1
THEN split_part("name", ' ', 2)
ELSE ''
END;
ALTER TABLE "users" ALTER COLUMN "first_name" SET NOT NULL;
ALTER TABLE "users" ALTER COLUMN "last_name" SET NOT NULL;
ALTER TABLE "users" DROP COLUMN "name";
시드 데이터데이터の생성
개발用の테스트데이터も合わせて作れます。
> Order 테이블の시드 데이터데이터を20件생성して。
> 각ステータスが均等に分布するように。
> リアルなダミー데이터にして。
마이그레이션の安全性を확인
> 現在の마이그레이션履歴を확인して、
> 本番適用前に問題がないかチェックして。
> 특히데이터消失リスクのある변경を指摘して。
API개발でのDB연동パターン에 대해서는API개발を高速化する方法で解説しています。또한、CLAUDE.mdに데이터베이스関連のルールを書いておくと安全性が向上します。書き方のコツはCLAUDE.mdの書き方完全가이드를 참고하세요.
정리
Claude Code를 활용하면 DB스키마の설계から변경、마이그레이션생성、시드 데이터데이터생성まで一貫して자동화할 수 있습니다。특히데이터移行ロジックを含む複雑な마이그레이션で威力を発揮します。
Prismaの詳しい使い方はPrisma공식 문서、Claude Codeの機能에 대해서는Anthropic공식 문서를 참고하세요.
무료 PDF: 5분 완성 Claude Code 치트시트
이메일 주소만 등록하시면 A4 한 장짜리 치트시트 PDF를 즉시 보내드립니다.
개인정보는 엄격하게 관리하며 스팸은 보내지 않습니다.
이 글을 작성한 사람
Masa
Claude Code를 적극 활용하는 엔지니어. 10개 언어, 2,000페이지 이상의 테크 미디어 claudecode-lab.com을 운영 중.
관련 글
Claude Code 다국어 글을 매일 발행하기 전에 확인할 7가지
누락된 언어, 깨진 CTA, 반영되지 않은 배포를 막기 위해 다국어 Claude Code 글을 매일 발행하기 전에 확인할 체크리스트입니다.
Codex Automations란? 잠자는 동안 AI가 콘텐츠 운영을 처리하게 하는 방법
Codex Automations로 트래픽 분석, 주제 선정, 글 작성, CTA 개선, 배포까지 자동화하는 실전 가이드.
Claude Code × GCP Cloud Functions 완전 가이드 | 서버리스 함수 초고속 개발
Claude Code로 GCP Cloud Functions를 효율화. HTTP/Pub/Sub/Firestore 트리거 구현부터 로컬 테스트·배포 자동화까지, Masa의 실무 경험을 토대로 실제 코드로 해설.