본문 바로가기
💻 뚝딱뚝딱/방통대CBT (knou-cbt)

[개발일지#016] 데이터베이스 마이그레이션 하기

by 뚜루리 2025. 9. 12.
728x90
320x100

1. 마이그레이션이란?

  • DB 스키마(테이블, 컬럼, 인덱스 등) 변경 사항을 버전 관리하면서 적용하는 과정
  • create table, alter table 같은 쿼리를 직접 날리는 대신, 코드/도구로 관리

2. 왜 필요한가?

  • 개발/테스트/운영 환경을 똑같이 맞추기 위함
  • 팀 단위 협업 시 "누가 alter 했더라?" 문제 방지
  • 배포 시 Render 서버가 자동으로 동일한 DB 스키마로 맞춰짐

3. 도구 선택

🔹 Spring Boot에서 주로 쓰는 툴

  • Flyway (가장 많이 씀)
  • Liquibase

👉 보통 Flyway를 간단히 붙이면 충분함.


4. Flyway 설정 방법

의존성 추가 (Gradle)

dependencies {
    implementation 'org.flywaydb:flyway-core'
}

application.yml

spring:
  flyway:
    enabled: true
    baseline-on-migrate: true
    locations: classpath:db/migration

마이그레이션 파일 생성

src/main/resources/db/migration/V1_table.sql (예)

CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT now()
);

Flyway가 자동으로 순서대로 실행 → DB에 반영

 

5. Render/Supabase에서 적용

  • 애플리케이션이 실행될 때 Flyway가 DB 연결 후 db/migration 폴더에 있는 스크립트를 확인하고,
    아직 실행 안 된 파일만 실행 → 자동 반영

6. 마이그레이션 절차 (운영 기준)

  1. 마이그레이션 파일 작성 (V3_table.sql)
  2. 로컬 DB에 적용 & 테스트
  3. Git push → Render 자동 배포
  4. Render 서버 실행 시 Supabase DB에 자동 반영
  5. 실패 시 Flyway 로그 확인 (중복 실행 방지됨)

7. 장점

  • DB 변경 사항을 깃으로 관리 가능
  • 과거 버전 추적 가능
  • 운영 배포 시 사람 손으로 DDL 직접 안 쳐도 됨

728x90
320x100