<aside>
</aside>
์๋ ํ์ธ์! ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ 5๋ถ์ ๋ค์ฏ ๋ฒ์งธ ์๊ฐ, 26๊ฐ์ ๋๋ค! ๐
์ง๋ 24๊ฐ๊ณผ 25๊ฐ์์๋ Alembic์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
ํ๊ฒฝ์ ์ค์ ํ๊ณ , ์ฒซ ๋ฒ์งธ ๋ง์ด๊ทธ๋ ์ด์
์ ํตํด tasks
ํ
์ด๋ธ์ ์ฑ๊ณต์ ์ผ๋ก ์์ฑํ์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฐ์ ๊ฐ์ถ์์ฃ !
์ด๋ฒ ์๊ฐ์๋ ์ฌ๊ธฐ์ ํ ๊ฑธ์ ๋ ๋์๊ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ค์ ๋ก ์งํ์ํค๋ ๊ณผ์ ์ ๊ฒฝํํด ๋ด ๋๋ค. ์ฐ๋ฆฌ ToDo ๋ฆฌ์คํธ์ ์ฌ์ฉ์(User) ๊ฐ๋ ์ ๋์ ํ์ฌ, ์ด๋ค ํ ์ผ์ด ์ด๋ค ์ฌ์ฉ์์๊ฒ ์ํ๋์ง๋ฅผ ๋ํ๋ด๋ **๊ด๊ณ(Relationship)**๋ฅผ ์ค์ ํด ๋ณผ ๊ฑฐ์์.
์ด๋ฅผ ์ํด ์๋ก์ด User
SQLAlchemy ๋ชจ๋ธ์ ์ ์ํ๊ณ , ๊ธฐ์กด Task
๋ชจ๋ธ์ ์์ ํ์ฌ ๋ ๋ชจ๋ธ ๊ฐ์ 1:N (One-to-Many) ๊ด๊ณ๋ฅผ ์ค์ ํฉ๋๋ค. ForeignKey
์ ์ฝ ์กฐ๊ฑด๊ณผ SQLAlchemy์ relationship
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ด๊ณ๋ฅผ ์ด๋ป๊ฒ ํํํ๋์ง ๋ฐฐ์ฐ๊ณ , ์ด๋ ๊ฒ ๋ณ๊ฒฝ๋ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ Alembic์ ์ฌ์ฉํ์ฌ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ํ๊ฒ ๋ฐ์ํ๋ ๊ณผ์ ์ ์ค์ตํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ ์ง์ ์ผ๋ก ๋ฐ์ ์ํค๋ ๋ง์ด๊ทธ๋ ์ด์
์ ์ค์ ํ์ฉ๋ฒ์ ์ตํ๋ด
์๋ค! ๐ฅ๐๐
์ด๋ฒ 26๊ฐ์์๋ SQLAlchemy ORM ๋ชจ๋ธ ๊ฐ์ **๊ด๊ณ(Relationship)**๋ฅผ ์ค์ ํ๊ณ , ์ด๋ฌํ ๋ชจ๋ธ ๋ณ๊ฒฝ ์ฌํญ์ Alembic ๋ง์ด๊ทธ๋ ์ด์
์ ํตํด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ฐ์ํ๋ ๊ณผ์ ์ ๋ค๋ฃน๋๋ค. ์ด์ ๊ฐ์์์ ๋ง๋ Task
๋ชจ๋ธ์ ๋ํด, ์๋ก์ด User
๋ชจ๋ธ์ ์ ์ํ์ฌ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋๋ก ํ์ฅํฉ๋๋ค.
ํต์ฌ์ ์ผ๋ก, 'ํ ๋ช
์ ์ฌ์ฉ์๋ ์ฌ๋ฌ ๊ฐ์ ํ ์ผ์ ๊ฐ์ง ์ ์๋ค(One-to-Many)'๋ ๊ด๊ณ๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด๋ฅผ ์ํด Task
๋ชจ๋ธ์ ์ฌ์ฉ์๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ(owner_id
)์ ์ถ๊ฐํ๊ณ , SQLAlchemy์ relationship
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ชจ๋ธ(User์ Task)์ด ORM ๋ ๋ฒจ์์ ์๋ก๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ์ค์ ํฉ๋๋ค. ํนํ, ์๋ฐฉํฅ ๊ด๊ณ ์ค์ ์ ์ํ back_populates
์ธ์์ ์ค์์ฑ์ ์ดํดํฉ๋๋ค.
๋ชจ๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ๋ค์ Alembic์ ์ฌ์ฉํ์ฌ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๊ณ ์๋ก์ด ๋ง์ด๊ทธ๋ ์ด์
์คํฌ๋ฆฝํธ๋ฅผ ์์ฑ(alembic revision --autogenerate
)ํ ํ, ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ(alembic upgrade head
)ํ์ฌ ์ค์ users
ํ
์ด๋ธ์ ์์ฑํ๊ณ tasks
ํ
์ด๋ธ์ ์ธ๋ ํค ์ ์ฝ ์กฐ๊ฑด ๋ฑ์ ์ถ๊ฐํ๋ ๊ณผ์ ์ ์ค์ตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์งํ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ์ Alembic์ผ๋ก ๊ด๋ฆฌํ๋ ์ค์ง์ ์ธ ์ํฌํ๋ก์ฐ๋ฅผ ์ตํ๋๋ค.
์ด ๊ฐ์๋ฅผ ๋ง์น๋ฉด ์ฌ๋ฌ๋ถ์ ๋ค์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค:
User
SQLAlchemy ORM ๋ชจ๋ธ์ ์ ์ํ ์ ์์ต๋๋ค.ForeignKey
๋ฅผ ์ฌ์ฉํ์ฌ ํ
์ด๋ธ ๊ฐ์ ์ธ๋ ํค ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ ์ ์์ต๋๋ค.relationship
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ ๊ฐ์ ๊ฐ์ฒด ๊ด๊ณ(์: 1:N)๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.relationship
์ back_populates
์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐฉํฅ ๊ด๊ณ๋ฅผ ์ค์ ํ๊ณ ๊ทธ ์๋ฏธ๋ฅผ ์ดํดํฉ๋๋ค.-autogenerate
์ต์
์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.alembic upgrade head
๋ช
๋ น์ผ๋ก ์คํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์์ ํ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.