DB/이론

[DB] 테이블 Migration 파일 관리 도구

yubi5050 2024. 12. 29. 21:52

개요

초기 단계의 간단한 프로젝트의 경우에는 데이터베이스 구조가 자주 변하지 않거나, 작업자가 히스토리를 잘 아는 경우

직접 SQL 쿼리를 실행하거나, ORM을 사용해 수작업으로 데이터베이스를 업데이트하는 방법으로 DB Migration을 관리 할 수 있다.

 

하지만 여러 명의 개발자가 동시에 작업하거나, 빈번한 스키마 변경(모델 자주 수정, 새로운 테이블 등 추가), 다양한 환경(개발, 스테이징, 프로덕션 등)에서 데이터베이스를 관리해야 하는 경우, DB Migration 히스토리를 관리하는 것은 DB 상태를 관리하는데 중요하다.

 

이를 잘 관리하기 위해 다양한 마이그레이션 도구가 존재한다.

 

마이그레이션 도구 사용시 장점

1. 스키마(모델) 자동 관리

- 테이블, 컬럼, 인덱스, 키 등의 추가, 수정, 삭제 같은 스키마 변경 작업 자동화

 

2. 버전 관리

- 데이터베이스 변경 내역을 버전별로 관리하여 팀원 간 작업 충돌을 방지, 변경 사항을 쉽게 추적 가능

 

3. 롤백 및 복구

- 변경 작업 실패 시 이전 상태로 되돌릴 수 있는 기능을 제공

 

4. 다중 환경 지원

- 개발, 테스트, 프로덕션 등의 환경에 맞는 마이그레이션 적용을 쉽게 관리할 수 있습니다.

 

마이그레이션 도구 

데이터베이스의 스키마와 데이터를 효율적으로 관리하고 변경하기 위해 다음과 같은 DB 마이그레이션 도구들이 사용된다. 이 도구들의 사용이 필수는 아니지만, 데이터베이스 변경의 추적, 관리, 복구 등이 필요시, 몇몇 프레임워크에서 마이그레이션 도구들을 지원하기도 한다. 

  

1. Django ORM (링크)

- Python의 Django 프레임워크에서 제공.

- ORM 모델 변경 사항을 자동으로 마이그레이션 파일로 생성

 

2. Alembic (링크)

- Python 기반 SQLAlchemy ORM과 연동. 

- 데이터베이스 스키마의 변경 작업을 관리.

 

3. Flyway (링크)

- Java 애플리케이션과 잘 통합됨

- API / CLI 외에 GUI도 제공

 

4. Liquibase (링크)

- XML, YAML, JSON 또는 SQL로 변경 사항을 정의 및 관리

- 데이터베이스 상태를 쉽게 비교하고 동기화 가능 

- 다양한 플러그인과 연동 기능이 강력.

 

5. Active Record Migrations (링크)

- Ruby on Rails에서 제공.

- Ruby 코드로 데이터베이스 변경 사항을 관리.