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공식 문서를 참고하세요.
Claude Code 워크플로우를 한 단계 업그레이드하세요
지금 바로 Claude Code에 복사해 쓸 수 있는 검증된 프롬프트 템플릿 50선.
이 글을 작성한 사람
Masa
Claude Code를 적극 활용하는 엔지니어. 10개 언어, 2,000페이지 이상의 테크 미디어 claudecode-lab.com을 운영 중.
관련 글
Claude Code로 리팩토링을 자동화하는 방법
Claude Code를 활용해 코드 리팩토링을 효율적으로 자동화하는 방법을 알아봅니다. 실전 프롬프트와 구체적인 리팩토링 패턴을 소개합니다.
Claude Code로 사이드 프로젝트 개발 속도를 극대화하는 방법 [예제 포함]
Claude Code를 활용해 개인 프로젝트 개발 속도를 획기적으로 높이는 방법을 알아봅니다. 실전 예제와 아이디어부터 배포까지의 워크플로를 포함합니다.
Complete CORS Configuration Guide: Claude Code 활용 가이드
complete cors configuration guide: Claude Code 활용. 실용적인 팁과 코드 예시를 포함합니다.