fastapi ์์ alembic ์ฌ์ฉํ๊ธฐ
SQLAlchemy + pydamic ๋ณด๋ค๋ SQLAlchemy+ alembic๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ถ์ธ. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ๋ ์ฝ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Alembic์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํ๋ ๊ณผ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ช ๋จ๊ณ๋ก ๋๋ฉ๋๋ค.
์ฌ๊ธฐ์๋ ์ด๊ธฐ ์ค์ , ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ์ ์์ฑ, ๊ทธ๋ฆฌ๊ณ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ฉ์ด ํฌํจ๋ฉ๋๋ค.
SQLAlchemy ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ง๋ค๊ธฐ ์ํด, ๋จผ์ Alembic ์ค์ ์ ์๋ฃํด์ผ ํฉ๋๋ค.
๊ทธ ํ, ๋ชจ๋ธ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋ ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ ์ ์ฉํด์ผ ํฉ๋๋ค.
- Alembic ์ค์ : ํ๋ก์ ํธ ๋ฃจํธ์์ $ pip install alembic ; alembic init alembic ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ Alembic์ ์ด๊ธฐํํฉ๋๋ค. ์ด ๋ช ๋ น์ alembic ํด๋์ ์ค์ ํ์ผ์ธ alembic.ini๋ฅผ ์์ฑํฉ๋๋ค.
-- ๊ฐ ํ์ผ์ ๋ํ ๊ฐ๋ต ์ค๋ช
- alembic.ini
- env.py ํ์ผ์์ Configuration ํ์ผ๋ก ์ฌ์ฉ๋๋ alembic ์ค์ ํ์ผ
- env.py
- ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํ๋๋ ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ์คํ ์ฝ๋
- script.py.mako
- ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ ํ ํ๋ฆฟ ํ์ผ
- versions
- ๋ง์ด๊ทธ๋ ์ด์ ํ ์คํฌ๋ฆฝํธ ์ฝ๋ ์ ์ฅ
-- env.py ํ์ผ๋ก ํ ๋ฒ ํ๊ฒฝ์ ์ธํ ํ๊ณ ๊ทธ ์ดํ๋ก๋ versions ๋ฅผ ์ด์ฉํ์ฌ ๊ด๋ฆฌ
- alembic.ini ํ์ผ์์ SQLAlchemy ๋ฐ์ดํฐ๋ฒ ์ด์ค URL์ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ alembic/env.py ํ์ผ์์ target_metadata ๋ณ์๋ฅผ ๋ชจ๋ธ์ ๋ฉํ๋ฐ์ดํฐ๋ก ์ค์ ํฉ๋๋ค.
<alembic/env.py ํ์ผ์์ target_metadata ๋ณ์๋ฅผ ๋ชจ๋ธ์ ๋ฉํ๋ฐ์ดํฐ๋ก ์ค์ >
# ์์: myapp/models.py ํ์ผ์ ์ ์๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
from myapp.models import Base # myapp/models.py ํ์ผ์์ Base ์ํฌํธ
target_metadata = Base.metadata
<alembic.ini ํ์ผ์์ sqlalchemy.url ์ค์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฌธ์์ด๋ก ์์ >
# alembic.ini ํ์ผ ๋ด
sqlalchemy.url = driver://user:pass@localhost/dbname
2. ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ ์์ฑ:
๋ชจ๋ธ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ, alembic revision --autogenerate -m "Add japanese and known tables" ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๋ช ๋ น์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๊ณ ์ค๋ช ์ ํฌํจํ ์๋ก์ด ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ alembic/versions ํด๋์ ์ถ๊ฐํฉ๋๋ค.
3. ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฉ:
๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ๋ ค๋ฉด, alembic upgrade head ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค. ์ด ๋ช ๋ น์ ์ต์ ๋ง์ด๊ทธ๋ ์ด์ ๊น์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค.
์ด ๊ณผ์ ์ ํตํด, SQLAlchemy ๋ชจ๋ธ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํ ์ ์์ต๋๋ค.