마이그레이션(Migration) 툴은 소프트웨어 개발에서 데이터베이스 스키마(테이블, 열, 제약 조건 등의 구조)를 관리하고, 데이터베이스 스키마의 변경을 관리하는 도구입니다. 마이그레이션은 데이터베이스 스키마를 초기 상태에서 원하는 상태로 변경하는 작업을 의미합니다.
마이그레이션 툴은 일반적으로 다음과 같은 작업을 할 수 있습니다.
데이터베이스 스키마 생성
마이그레이션 툴을 사용하여 데이터베이스에 초기 스키마를 생성할 수 있습니다. 이는 새로운 데이터베이스를 설정하거나 프로젝트를 시작할 때 유용합니다.
스키마 변경 관리
마이그레이션 툴은 스키마 변경을 추적하고 관리합니다. 새로운 테이블, 열, 제약 조건 등을 추가하거나 기존 스키마를 수정할 때, 마이그레이션 스크립트를 작성하여 변경 사항을 반영할 수 있습니다.
데이터베이스 버전 관리
마이그레이션 툴은 데이터베이스의 버전을 추적하고 관리합니다. 각 마이그레이션 스크립트는 일련의 순차적인 번호 또는 타임스탬프를 가지며, 특정 버전의 스키마로 데이터베이스를 업데이트할 수 있습니다.
롤백 기능
마이그레이션 툴은 변경 사항을 롤백하고 이전 상태로 되돌릴 수 있는 기능을 제공합니다. 스키마 변경이 실패한 경우 또는 이전 상태로 되돌아갈 필요가 있는 경우, 롤백 기능을 사용하여 데이터베이스를 이전 상태로 복원할 수 있습니다.
다양한 마이그레이션 툴이 있지만 이번에는 yoyo
에 대해 소개해보려고 합니다.
yoyo는 Python을 위한 마이그레이션 툴입니다. Yoyo는 데이터베이스 스키마의 버전 관리와 마이그레이션을 지원하여 데이터베이스 스키마의 변경을 쉽게 관리할 수 있도록 도와줍니다.
yoyo
는 간단하고 가벼운 마이그레이션 프레임워크로, SQL을 사용하여 스키마 변경 작업을 정의합니다. 마이그레이션 스크립트는 버전 관리되며, 스키마 변경을 위한 업그레이드 및 다운그레이드 작업을 수행할 수 있습니다. 또한, 마이그레이션 스크립트는 순차적으로 실행되어 데이터베이스의 일관성을 유지합니다.
파이썬 애플리케이션과 다양한 데이터베이스 시스템(예: PostgreSQL, MySQL, SQLite)을 함께 사용할 수 있습니다. 마이그레이션 스크립트는 순수한 SQL 또는 파이썬 코드로 작성할 수 있으며, Yoyo는 스크립트의 실행과 롤백을 관리합니다.
명령줄 도구와 Python API를 제공하여 마이그레이션 작업을 수행할 수 있습니다. 이를 통해 개발자는 손쉽게 데이터베이스 스키마의 변경을 추적하고 관리할 수 있으며, 프로젝트의 버전 관리 시스템과 통합하여 협업과 배포 과정을 효율적으로 관리할 수 있습니다.
간편한 구성
Yoyo는 간단하고 직관적인 구성을 제공합니다. 마이그레이션 스크립트는 순수한 SQL 또는 파이썬 코드로 작성되며, 스크립트 파일의 이름에는 버전 정보가 포함됩니다. 이를 통해 스키마 변경을 쉽게 추적하고 관리할 수 있습니다.
가볍고 빠른 실행
Yoyo는 가볍고 빠른 실행 속도를 자랑합니다. 마이그레이션 스크립트의 실행은 빠르며, 필요한 경우 롤백 작업을 신속하게 수행할 수 있습니다.
다양한 데이터베이스 지원
Yoyo는 다양한 데이터베이스 시스템(예: PostgreSQL, MySQL, SQLite)을 지원합니다. 따라서 여러 종류의 데이터베이스를 사용하는 프로젝트에서 일관된 마이그레이션 접근 방식을 유지할 수 있습니다.
유연한 스크립트 작성
Yoyo는 스크립트를 SQL 또는 파이썬 코드로 작성할 수 있는 유연성을 제공합니다. 이는 개발자가 자신의 선호도에 따라 적합한 방식으로 스키마 변경 작업을 정의할 수 있도록 합니다.
통합 및 협업 지원
Yoyo는 버전 관리 시스템과 통합할 수 있습니다. 스크립트 파일의 이름에는 버전 정보가 포함되어 있으므로, 프로젝트의 코드와 함께 마이그레이션 스크립트를 관리할 수 있습니다. 이를 통해 협업과 배포 과정을 보다 효율적으로 관리할 수 있습니다.
파이썬 버전 확인을 해주세요.
버전은 패키지가 호환될 수 있는 버전이면 됩니다.
conda를 이용하여 파이썬 가상환경을 이용해도 무방합니다.
필요한 패키지를 설치해주세요.
PyMySQL
MySQL 데이터베이스에 연결하고 상호 작용하기 위한 파이썬 DB-API 드라이버입니다. PyMySQL을 사용하면 Python 코드에서 MySQL 데이터베이스와 통신할 수 있습니다.
저는 MySQL을 사용하니 해당 패키지도 설치하겠습니다.
text-unidecode
유니코드 문자열을 ASCII로 변환하는 패키지입니다. 유니코드 문자열에 포함된 각 문자를 가능한 한 유사한 ASCII 문자로 변환합니다.
yoyo-migrations
데이터베이스 마이그레이션을 위한 패키지로, 데이터베이스 스키마 변경 작업을 관리합니다. 마이그레이션 스크립트의 생성, 실행, 롤백 등의 작업을 지원합니다.
마이그레이션을 할 땐 작업 디렉토리 상에서 아래 명령어를 입력해주면 됩니다.
yoyo apply --database rdbms://username:password@host:port/db-name
물론 TypeORM이나 Sequelize도 강력한 기능들을 제공하고 있지만 지금 빠르게 제작해야하는 프로젝트에서는 익숙한 툴을 사용하는 것이 좋겠다고 생각을 했습니다.
프로젝트에 대한 언급은 아마 이후 포스팅에서 언급하면서 위 두가지에 대한 사용 기술 방법에 대해서도 언급할 것 같네요!
yoyo는 파이썬을 기반으로 하고 있지만 사실 yoyo의 패키지를 사용할 뿐이지, raw query로 스키마를 설계하여 마이그레이션을 할 수 있기 때문에 yoyo를 선택한 이유도 있습니다.
이미 사용해 본 툴에 대해 좀 더 파고드는 것도 재밌네요.