How-to-use-alembic.md
์ค๋์ python์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
ํด alembic
์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๋ คํฉ๋๋ค.
์ต๊ทผ ๊ฐ๋ฐํ๊ณ ์๋ ์กธ์
์ํ์์ FastAPI๋ฅผ ์ด์ฉํ ์๋ฒ๊ฐ๋ฐ์ ๋งก๊ฒ ๋์๋๋ฐ Django๋ฅผ ์ธ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก manage.py
์์ ์ ๊ณตํ๋ migration ๊ธฐ๋ฅ์ด ์ ์ฉํด์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์๊น ์ฐพ๋ ์ค alembic
์ด๋ผ๋ ํด์ ์ฐพ๊ฒ๋์ด ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
๋ง์ด๊ทธ๋ ์ด์
(migration)?
alembic์ ๋ํด ์์๋ณด๊ธฐ ์ ๋ง์ด๊ทธ๋ ์ด์ ์ด๋ ๋ฌด์์ธ์ง ์์๋ด ์๋ค. ์ง์ญํ๋ฉด
migration : ์ด์ฃผ, ์ด์
์ ๋ณด๊ธฐ์ ๋ถ์ผ์์๋ ์ด์ํ๊ฒฝ์ ์ฎ๊ธฐ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ต๊ทผ ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ๋ง์ด ์ฌ์ฉ๋๋ฉด์ ๊ธฐ์กด ์จํ๋ ๋ฏธ์ค ๋ฐฉ์์ IDCํ๊ฒฝ์์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์์ฃผ ๋ณผ ์ ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฝ๊ฒ ํ ์ ์๋ ํด๋ค์ด ๋ง์ด ๋ฑ์ฅํ๊ณ ์์ต๋๋ค.
ex. AWS Storage Gateway, AWS DataSync, AWS Snowcone ๋ฑ
๊ทผ๋ฐ ์ด๋ฐ ๊ฒ๋ค์ ์ธํ๋ผ ์์ฒด๋ฅผ ์ด์ ํ ๋ ์ฐ๋ ๊ฒ ๊ฐ์๋ฐ, alembic์ ๊ทธ๋ผ ๋ญ๊น์?
alembic์ ORM์ผ๋ก ์คํค๋ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ ๋๊ตฌ์ ๋๋ค.
alembic ์คํฌ๋ฆฝํธ์๋ upgrade()
์ downgrade()
ํจ์๋ค์ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ดํ๊ณ ๋ณ๊ฒฝ ํ์คํ ๋ฆฌ๋ฅผ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ค์น
alembic
์ pip ๋ก ์ค์นํ ์ ์๋ค.
์ฌ์ฉ๋ฒ
์ด๊ธฐํ
์์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์ง์ ํ ํด๋๋ช ์ผ๋ก ์๋์ ๊ฐ์ ๋ง์ด๊ทธ๋ ์ด์ ๊ด๋ฆฌ ํด๋๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋
์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ๋ง๋ค์ด์ง env.py
์ run_migrations_offline()
ํจ์์ url
๋ณ์์ ์ฐ๊ฒฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค URI๋ฅผ ์
๋ ฅํฉ๋๋ค.
ํด๋น URI๋ alembic.ini ํ์ผ์ ์์ฑ๋์ด์๋๋ฐ ํด๋น ํ์ผ์์
์์ ๋ณ์์ ๊ฐ์ ์ฐ๊ฒฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค URI๋ก ๋ฐ๊พธ์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋
alembic.ini
๊ฐ ์๋์ด๋ dotenv ๊ฐ์ ๋ชจ๋์ ์ฌ์ฉํ์ฌ env.py์ ๋ฐ๋ก ์ ๋ ฅํ์ฌ ์ฌ์ฉํด๋ ๋ฉ๋๋ค๐
๋ง์ด๊ทธ๋ ์ด์
์ด์ ์ค์ ๋ง์ด๊ทธ๋ ์ด์ ์์ ์ ํด๋ด ์๋ค.
alembic์์๋ revision
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ migration script๋ฅผ ์์ฑํ๊ณ ๋ง์ด๊ทธ๋ ์ด์
์ ์งํํ ์ ์์ต๋๋ค.
revision์ ์์ฑํ๋ฉด versions
ํด๋ ๋ฐ์ {revisioncode}_{migrationscript}.py
๋ก ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
ํด๋น ํ์ผ์๋ upgrade(), downgrade()
๋ ํจ์๊ฐ ์๋๋ฐ, ํด๋น revision์ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ ๋ ์ํ๋ ์์
์ด upgrade()
์ ๋ช
์๋ฉ๋๋ค. downgrade()
์๋ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋ ์๊ธฐ์ ์ํ๊ฐ ๋ช
์๋ฉ๋๋ค.
์ฒซ๋ฒ์งธ revision์๋ ๋ง๋ค์ด์ง๋๋ก ๋น์๋๊ฑฐ๋ table drop์ ์ ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด์ ์ ๋ง ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ revision์ ์ ์ฉ์์ผ ๋ด ์๋ค.
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฅ ์ต๊ทผ์ revision์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํฉ๋๋ค.
์ด์ธ ๊ธฐ๋ฅ๋ค
alembic์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ migration history๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
downgrade ํ๋ ๋ฐฉ๋ฒ downgrade๋ฅผ ์ํํ ๋๋ ํน์ revision๋ฒํธ๋ฅผ ์ง์ ํ๊ฑฐ๋ -1, -2 ๊ฐ์ด ํ์ฌ์ํ์์ ์๋์ ์ธ ์์น์ downgrade๋ฅผ ํ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ alembic์ ๋ํด์ ์ ๋ฆฌํ์ต๋๋ค. pythonํ๋ก์ ํธ๊ฐ ์๋๋๋ผ๋ nodejs, go ๋ฑ ๋ค์ํ ์ธ์ด๋ก ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๊ณ , alembic์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํ ์ ์์ผ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ ๋งํฌ๋ฅผ ๊ณต์ ํด๋ํ ๋ ์ฐธ๊ณ ํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค:D
์ฐธ๊ณ ๋งํฌ
Last updated