Claude Code Plugins

Community-maintained marketplace

Feedback

|

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name migrate-db
description Prisma/SQL 마이그레이션 관리. Use when: (1) 스키마 변경, (2) 마이그레이션 생성/적용, (3) DB 동기화, (4) 마이그레이션 상태 확인, (5) 롤백 필요 시.
tools Bash, Read, Grep
model inherit
triggers 마이그레이션, 스키마 변경, DB 동기화, prisma migrate, 테이블 추가

호출 시 메시지: 이 Skill이 호출되면 반드시 [SEMO] Skill: migrate-db 호출 - {service_name} 시스템 메시지를 첫 줄에 출력하세요.

Migrate DB Skill

Prisma/SQL 마이그레이션 안전 관리

지원 기술 스택

스택 도구 서비스 예시
Prisma prisma migrate ms-notifier, ms-scheduler, ms-ledger, ms-allocator
SQL 수동 마이그레이션 ms-gamer (Go)
Supabase Supabase CLI ms-collector

워크플로우

Phase 0: 환경 확인 (NON-NEGOTIABLE)

# 현재 브랜치 확인
git branch --show-current

# 미커밋 변경사항 확인
git status --porcelain

# 기술 스택 감지
if [ -f "prisma/schema.prisma" ]; then
  MIGRATION_TOOL="prisma"
elif [ -f "go.mod" ]; then
  MIGRATION_TOOL="sql"
else
  MIGRATION_TOOL="unknown"
fi
echo "마이그레이션 도구: $MIGRATION_TOOL"

경고: 프로덕션 환경에서는 반드시 백업 후 진행하세요.


Phase 1: 마이그레이션 상태 확인

Prisma

# 현재 마이그레이션 상태
npx prisma migrate status

# 스키마 유효성 검사
npx prisma validate

# 스키마 포맷 확인
npx prisma format --check

SQL (Go 서비스)

# 마이그레이션 파일 목록
ls -la db/migrations/ 2>/dev/null || ls -la migrations/

# 적용된 마이그레이션 확인 (schema_migrations 테이블)
psql -c "SELECT * FROM schema_migrations ORDER BY version DESC LIMIT 10"

Phase 2: 마이그레이션 생성

Prisma - 개발 환경

# 스키마 변경 후 마이그레이션 생성
npx prisma migrate dev --name {migration_name}

# 예시: 새 필드 추가
npx prisma migrate dev --name add_user_email

Prisma - 프로덕션 환경

# 마이그레이션 파일만 생성 (적용하지 않음)
npx prisma migrate dev --create-only --name {migration_name}

# 생성된 SQL 검토 후 수동 적용
cat prisma/migrations/{timestamp}_{name}/migration.sql

SQL 수동 마이그레이션

# 마이그레이션 파일 생성
TIMESTAMP=$(date +%Y%m%d%H%M%S)
touch db/migrations/${TIMESTAMP}_{migration_name}.sql

# 예시 내용
cat << 'EOF' > db/migrations/${TIMESTAMP}_add_user_email.sql
-- Up
ALTER TABLE users ADD COLUMN email VARCHAR(255);

-- Down
ALTER TABLE users DROP COLUMN email;
EOF

Phase 3: 마이그레이션 적용

Prisma

# 개발 환경
npx prisma migrate dev

# 프로덕션 환경 (CI/CD에서 사용)
npx prisma migrate deploy

SQL (golang-migrate)

# 적용
migrate -path db/migrations -database "$DATABASE_URL" up

# 특정 버전까지만 적용
migrate -path db/migrations -database "$DATABASE_URL" up 1

Phase 4: 롤백 (주의 필요)

경고: 롤백은 데이터 손실을 유발할 수 있습니다. 반드시 백업 후 진행하세요.

Prisma

# Prisma는 직접적인 롤백을 지원하지 않음
# 대신 새 마이그레이션으로 변경 사항 되돌리기

# 1. 되돌릴 스키마 변경 작성
# 2. 새 마이그레이션 생성
npx prisma migrate dev --name revert_{previous_migration}

SQL (golang-migrate)

# 마지막 마이그레이션 롤백
migrate -path db/migrations -database "$DATABASE_URL" down 1

# 모든 마이그레이션 롤백 (위험!)
# migrate -path db/migrations -database "$DATABASE_URL" down

Phase 5: Prisma 클라이언트 재생성

# 스키마 변경 후 클라이언트 재생성
npx prisma generate

# 타입 확인
npx tsc --noEmit

출력 포맷

마이그레이션 성공

[SEMO] Skill: migrate-db 호출 - ms-{service}

=== 마이그레이션 결과 ===

## 환경
- 서비스: ms-{service}
- 도구: Prisma
- 환경: development

## 실행 내역
| 단계 | 상태 | 상세 |
|------|------|------|
| 상태 확인 | ✅ | 대기 중인 마이그레이션 1건 |
| 스키마 검증 | ✅ | 유효 |
| 마이그레이션 적용 | ✅ | 20250122_add_user_email |
| 클라이언트 생성 | ✅ | @prisma/client 재생성 |

## 적용된 마이그레이션
- `20250122143000_add_user_email`
  - ALTER TABLE `users` ADD COLUMN `email` VARCHAR(255)

## 다음 단계
1. `npx tsc --noEmit`로 타입 확인
2. 테스트 실행: `npm test`
3. 커밋: `git add prisma/ && git commit -m "db: add user email field"`

마이그레이션 실패

[SEMO] Skill: migrate-db 호출 - ms-{service}

=== 마이그레이션 실패 ===

## 오류

Error: P3009 migrate found failed migrations in the target database.


## 원인
- 이전 마이그레이션이 실패한 상태로 남아있음

## 해결 방법
1. 실패한 마이그레이션 확인:
   ```bash
   npx prisma migrate status
  1. 수동으로 실패한 마이그레이션 해결:

    npx prisma migrate resolve --rolled-back {migration_name}
    
  2. 재시도:

    npx prisma migrate dev
    

## 안전 체크리스트

### 개발 환경

- [ ] 로컬 DB 백업 불필요 (재생성 가능)
- [ ] 스키마 변경 검토
- [ ] 테스트 통과 확인

### 스테이징/프로덕션 환경

- [ ] DB 백업 완료
- [ ] 마이그레이션 SQL 검토
- [ ] 롤백 계획 수립
- [ ] 다운타임 영향도 확인
- [ ] 팀 공유 및 승인

## 서비스별 스키마 정보

| 서비스 | 스키마명 | Prefix | 주요 테이블 |
|--------|---------|--------|------------|
| ms-notifier | notifier | nf_ | notifications, channels, jobs |
| ms-scheduler | scheduler | sc_ | schedules, executions, job_queue |
| ms-ledger | ledger | lg_ | accounts, transactions, subscriptions |
| ms-allocator | allocator | al_ | tracked_subjects, snapshots, aggregates |
| ms-gamer | public | ladder_ | round, bet, pattern |

## Related Skills

- [setup-prisma](../setup-prisma/SKILL.md) - Prisma 초기 설정
- [debug-service](../debug-service/SKILL.md) - DB 연결 디버깅

## References

- [Prisma Migrate](https://www.prisma.io/docs/concepts/components/prisma-migrate)
- [golang-migrate](https://github.com/golang-migrate/migrate)
- [Microservices Context](/.claude/memory/microservices.md) - 서비스별 스키마 정보