[Fast api] alembic을 이용한 DB 버전 관리

강버섯·2022년 1월 1일
0

FAST API⚡️

목록 보기
3/5

👉 alembic?

Database migration을 해주는 프로그램이다.
데이터베이스의 모양은 일정한 것이 아니라 변경이 일어날 수도 있는데, 이러한 데이터베이스(DB)의 version을 key로 구분하여서 버전 관리를 할 수 있도록 도움을 주는 프로그램이 바로 alembic이다.

프로젝트를 진행할 시에는 데이터베이스의 버전을 확인하고, 서버와 데이터베이스의 버전이 서로 맞는지 확인할 필요가 있다.

alembic docs

👉 사용하기

1. 초기화

alembic을 사용하기 위해서는 dependency 추가가 선행되어야 한다.

$> alembic init 폴더명

위 명령어를 수행하면 작성한 폴더명으로 alembic 정보가 담길 폴더가 생성된다.
폴더명을 'alembic'으로 입력하면 'alembic'이라는 이름의 폴더'alembic.ini'라는 파일이 생성된다.

2. 설정

  • alembic.ini
    데이터베이스의 접속 정보를 관리한다.
    alembic 초기화(1번)을 통해서 생성된 폴더 내부에 생성되는 env.py에서 config로 사용하는 alembic 설정 파일'alembic.ini' 이다.
[alembic]
script_location = alembic

#데이터베이스 접속 정보 저장 -> SQLAlchemy가 사용하는 접속 정보, env.py에서만 사용
sqlalchemy.url = postgresql://user:password@host/db_name
  • env.py
    'env.py' 파일 수정을 통해서 데이터베이스의 접속 정보를 관리한다.
    alembic migration tool이 적용될 때 실행되는 python script이다.

    파일 설정👇

config = context.config
# alemic.ini에서 sqlachemy.url을 수정하는 것과 동일하게 동작
# dsn? 데이터 원본 이름 : 데이터베이스에 대한 연결을 설정하도록 함
cofig.set_main_option('sqlachemy.url', dsn)

from app import models

# 데이터베이스의 metadata 설정
target_metadata = models.Base.metadata

데이터베이스의 metadata를 설정할 때에는 model이 설정된 이후의 metadata를 이용해서 설정해야한다.

3. 사용

  • revision을 이용해서 버전 관리
# 새로운 revision 추가
$> alembic revision
$> alembic revision -m "message" # 메세지를 추가하여 등록

# alembic에서 변화를 자동적으로 감지해 revision을 작성해줌
$> alembic revision --autogenerate
$> alembic revision --autogenerate -m "message"

--autogenerate 옵션을 사용하지 않고 revision을 진행하면 직접 변화를 작성해주어야한다.
revision을 이용해 생성된 version 파일은 alembic 초기화를 할 때 생성한 폴더에 존재하는 versions 폴더 내부에 생성된다.

  • version 파일
revision = revision ID
down_revision = 이전 revision ID
branch_lables = None
depends_on = None


생성된 파일 내부를 보면 데이터베이스의 변화를 확인할 수 있다.
upgrade에는 현재 revision을 통해서 감지된 변화가, downgrade에는 원래의 데이터베이스의 모습이 작성되어있다.

  • 데이터베이스 버전 바꾸기
$> alembic upgrade head # 가장 상단의 버전으로 db가 upgrade됨

$> alembic downgrade base # 가장 하단의 버전으로 db가 downgrade됨

$> alembic upgrade/downgrade +-N # N만큼 upgrade/downgrade

$> alembic upgrade/downgrade revisionID # 해당 revision ID로 upgrade/downgrade

revision 명령어를 통해 생성한 revision들은 upgrade 혹은 downgrade 명령을 통해 DB의 버전을 변경해야만 반영이 된다.
upgrade/downgrade 명령을 실행하지 않으면 revision을 생성했다고 하더라고 DB의 모양이 변경되지는 않는다.

$> alembic histroy

명령어를 통해서 데이터베이스 스키마의 변경 기록을 확인할 수도 있다.

profile
무럭무럭 버섯농장

0개의 댓글