Junhyunny's Devlogs

글 검색

기술 글 제목, 본문, 카테고리에서 검색합니다.

    이전 화면으로

    스키마 마이그레이션

    • information
    • database
    이 글의 목차

    1. Risk of Change Schema

    애플리케이션을 개발하거나 시스템을 운영하다 보면 데이터베이스 스키마(schema)에 변경이 발생하게 된다.

    • 새로운 기능(feature)이 추가되면서 데이터 모델의 변화가 발생할 수 있다.
    • 성능 최적화를 위한 인덱스 추가, 변경 등의 스키마 변경이 발생할 수 있다.
    • 데이터를 효율적으로 관리하기 위해 데이터 모델이 재구조화될 수 있다.
    • 데이터 정확성과 일관성을 유지하기 위해 제약조건(constraint)을 추가할 수 있다.

    개발 혹은 테스트를 위한 데이터베이스의 스키마 변경은 쉬운 편이다. 반면 운영 중인 데이터베이스의 스키마를 바꾸는 일은 상당히 어렵다. 시스템 규모가 클수록 스키마 변경의 어려움은 커진다.

    • 잘못된 스키마 변경으로 운영 중인 데이터의 손실이 발생할 수 있다.
    • 스키마를 변경하면 동작 중인 애플리케이션에 이상이 발생할 수 있다.
    • 큰 규모의 스키마 변경은 데이터베이스 다운타임(downtime)이 필요할 수 있다.
    • 스키마를 변경 후 문제가 발생한 경우 백업과 롤백이 어려울 수 있다.

    2. Schema Migration

    스키마 마이그레이션(schema migration)은 스키마 변경을 계획적으로 관리하는 프로세스

    스키마 변경에 대한 리스크를 완화하기 위해 버전 관리, 롤백, 테스트 작업 등을 수행한다. 데이터베이스 마이그레이션이라 부르기도 하며 데이터 마이그레이션(data migration)과는 다르므로 주의해야 한다.

    2.1. Why Schema Migration?

    개발이 진행되면 애플리케이션 실행 환경마다 서로 다른 데이터베이스를 사용하기 때문에 스키마가 달라질 수 있다. 소스 코드는 깃(git) 같은 형상 관리 도구를 통해 공통적인 코드 베이스 관리가 가능하지만, 데이터베이스에 대한 형상 관리는 어려움이 따른다.

    • 개발자마다 로컬 환경에 필요한 데이터베이스를 설치하여 사용한다.
      • 개발자 Axel은 기능 개발을 위해 자신의 로컬 데이터베이스의 스키마만 변경 후 변경된 기능을 검증한다.
      • 코드를 올리면 CI 환경과 다른 개발자들 환경에서 스키마 관련된 에러가 발생할 수 있다.
    • 개발, 테스트, 프로덕션 환경마다 서로 다른 데이터베이스를 사용한다.
      • 각 환경으로 애플리케이션이 배포될 때마다 개발자 혹은 DBA가 변경된 스키마를 위한 작업을 수행해야 한다.
      • DDL(Data Definition Language) 스크립트를 일일이 작성하고 실행하는 것은 실수의 위험이나 빠른 롤백의 어려움이 있다.
    https://documentation.red-gate.com/fd/why-database-migrations-184127574.html

    2.2. Schema Migration Tools

    프로그램적으로 작업을 수행할 수 있는 도구를 통해 스키마 마이그레이션이 가능하다. 마이그레이션 도구를 통해 다음과 같은 이점들을 얻을 수 있다.

    • 스키마 마이그레이션을 위한 스크립트를 작성하고 관리할 수 있다.
      • 코드 형상 관리 도구를 스크립트를 관리할 수 있으며 이를 통해 변경된 스키마 마이그레이션 정보를 개발자들이 쉽게 알 수 있다.
      • 변경된 데이터베이스 스키마 정보를 각 환경마다 적용시킬 수 있다.
    • 스키마 변경에 대한 이력성 메타 데이터를 관리한다.
      • 변경 작업에 대한 버전 관리를 수행한다.
      • 변경 작업을 추적하고 롤백하는데 유용하다.
    • 여러 개발자가 동시에 작업을 수행하더라도 일관된 스키마 변경을 유지할 수 있다.
      • 모든 변경 사항이 버전으로 관리되므로 개발자는 최신 스키마 상태를 유지할 수 있다.
    • 변경 작업을 테스트하고 롤백할 수 있는 기능을 제공한다.
      • 테스트 환경에서 검증할 수 있으며 롤백을 통해 이전 상태로 돌릴 수 있다.
    • 마이그레이션 파일에 변경 내용과 목적을 설명하는 주석을 함께 작성할 수 있다.
      • 변경 사항에 대한 의도와 내용을 문서화할 수 있다.
      • 스키마 변화를 추적할 수 있다.

    스키마 마이그레이션 도구를 사용하더라도 스키마 변경으로 인한 데이터 손실의 위험성은 동일하므로 주의가 필요하다.

    KEEP READING

    DISCUSSION

    댓글