[FastAPI] 14. SQLAlchemy์ One-to-Many, Many-to-Many, Self referential relationship
์ง๋ ํฌ์คํธ์์๋ ๋จ์ Column ๋ฐ์ดํฐ์ ๊ทธ๋ฆฌ๊ณ , ๋จ์ผ ์ธ๋ํค ํ๋์ ๊ด๊ณ ๋ฐ์ดํฐ๋ฅผ Pydantic์ผ๋ก ๋งคํํ์ฌ Serialize/Deserialize ํ๋ ๊ฒ์ ๋ํด ์์๋ดค์ต๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ Many-to-Many, One-to-Many ํํ์ Foreign Key๊ฐ ๊ฑธ๋ ค ์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฅผ Joinํด์ ๊ฐ์ ธ์ฌ ๋ ์ด๋ป๊ฒ Pydantic ๋ชจ๋ธ๊ณผ ๋งคํํ ์ ์๋์ง์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
DB์์ ๋จ์ํ๊ฒ ์ ๊ทผ
์ง๋ ํฌ์คํธ์์ ์ฌ์ฉํ ERD๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
Category์ Post๊ฐ ์๊ณ , Post๋ category_id๋ฅผ ์ธ๋ํค๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ์นดํ ๊ณ ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ category ํ ์ด๋ธ์ด ๊ฐ์ง๊ณ ์๋๊ฑด๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ด ์ ๋ณด๋ฅผ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
select * from post as p join category as c on p.category_id = c.id where p.id = ?
ํน์ Post ์ปจํ ์ธ ์ ๋ํ Post, Category ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ค๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ๊ฐ๋จํ ์ Query๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋จ์ ๊ด๊ณ๊ฐ ํ๋์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
ORM์์ ์ ๊ทผ
ํ ์ด๋ธ ๊ฐ ์ฐ๊ด ๊ด๊ณ๊ฐ ์์ ๋ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- DB์ ์ธ๋ํค ์ฌ์ฉ
- SQLAlchemy์ entity ๊ฐ์ฒด ์ฐธ์กฐ
๊ทธ๋ฌ๋ ORM์ ์ฌ์ฉํ ๋๋ ๊ฐ๊ธ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํด์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ด ์ข์ต๋๋ค. DB์ ์ธ๋ํค๋ฅผ ์ฌ์ฉํ ๊ด๊ณ๋ ํ ์ด๋ธ ์ค์ฌ์ ๋ชจ๋ธ๋ง ์ค๊ณ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ธ๋ฐ, ์ด๋ ๊ฒ ํ๋ฉด ์ธ๋ํค์ ์์กดํ๋ฏ๋ก ๊ฐ์ฒด์งํฅ์ค๋ฝ์ง ๋ชปํ ํํ๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๊ด๊ณ๋ฅผ ๋งคํํ๊ณ ๋ชจ๋ธ๋ง ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋จ, ํ์์ ๋ฐ๋ผ์ ์ธ๋ํค๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ ๊ด๊ณ๋ ๋ฐ์ดํฐ์ ์ญ์ ๋ ์ฝ์ ์ DB์ ์์กดํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ์ค๊ณ๋ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ค๊ณํ๋, ์ธ๋ํค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ๋์์ง ์์ ์ ํ์ ๋๋ค.
SQLAlchemy์์๋ Core์ ORM์ด ์กด์ฌํ๋๋ฐ, Core๋ SQLAlchemy์์ ์ ๊ณตํ๋ Syntax(such as Linq)์ด๊ณ , ORM์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ORM์ ์ฌ์ฉํ ๊ฒ์ธ๋ฐ, ORM์์๋ relationship์ ์ด์ฉํด ์ธ๋ํค๊ฐ ๊ฑธ๋ ค ์๋ ํ ์ด๋ธ์ Joinํ์ฌ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ง๋ ํฌ์คํธ์ ๋ด์ฉ์ ๋ณด๋ฉด Post๊ฐ ํ๋์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ฐ์ง ์ ์๋ Many-to-One ํํ์ ๊ด๊ณ ๋ฐ์ดํฐ๋ฅผ ๋งคํํ๋ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ดค๋๋ฐ์. ์ด๋ฐ ๊ฒฝ์ฐ๋ ๊ฐ๋จํ relationship์ foreign_key ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ๋งคํํ ์ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์๊ธฐ ์์ ์ ํ ์ด๋ธ์ ๋ฐ๋ผ๋ณด๋ One-to-Many ํํ์ relationship์ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์์๊น์?
์๊ธฐ ์ฐธ์กฐ ๊ด๊ณ (Self referential relationship)
์๊ธฐ ์์ ์ ํ ์ด๋ธ์ ID๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ์ ๊ด๊ณ ๋ฐ์ดํฐ๋ฅผ SQLAlchemy์์๋ Self referential relationship์ด๋ผ๊ณ ์ด์ผ๊ธฐ ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์นดํ ๊ณ ๋ฆฌ ํ ์ด๋ธ์์ ํ๋์ ์นดํ ๊ณ ๋ฆฌ๋ ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ง๋ ์๋ ์๋ ํํ๋ก ์ค๊ณํ์์ต๋๋ค. ๊ทธ ๋ง์ ์์ ์ด ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋ ์๋ ์๊ณ , ์์ ์นดํ ๊ณ ๋ฆฌ๋ ๋ ์ ์๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ค๊ณํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๋์ ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ๋ ๋จ ํ ๊ฐ๋ง ์กด์ฌํ ์ ์์ผ๋, ๊ทธ ๋ถ๋ชจ์ ๋ํ ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ๋ ํ๋ ์กด์ฌํ ์ ์์ผ๋ฏ๋ก parents๋ผ๊ณ ํ๊ธฐํฉ๋๋ค. children์ ๋๋ฅผ ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ๋ก ์ ํํ ์นดํ ๊ณ ๋ฆฌ๋ค์ด ๋ชจ๋ ์ ํ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๊ฐ๊ฐ ๋ ์ ์์ต๋๋ค.
๋จ, ์ด๋ ๊ฒ ์ค๊ณํ๋ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ์ฃผ์ํด์ผํ๋ ์ ์ด ์์ต๋๋ค.
- ์์น์ ์ผ๋ก ๊น์ด ๊ฐฏ์๋ฅผ ์ ํํ์ง ์์ผ๋, ๊น์ด๋ฅผ ๋ง์ด ์ค์๋ก ๋ก๋ฉ ์๋๊ฐ ๋๋ ค์ง๋ฏ๋ก ์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค
- ๋ถ๋ชจ์ ์์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋์์ ๋ก๋ฉํ์ง ์๋๋ก ํด์ผ ํ๋ค.
๋ณด๋ค์ํผ ํธ๋ฆฌ ํํ๋ก ๊ตฌ์ฑ๋์ด์ง๊ธฐ ๋๋ฌธ์ ์๋ก์ ๊ด๊ณ ๋ก๋ฉ์ ๋ ๊ฐ ๋์์ ์ด๋ฃฐ ๊ฒฝ์ฐ ์๋ก๊ฐ ์๋ก์ ๋ถ๋ชจ, ์์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ณ์ ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ท ์ง์ฅ(๋ฌดํ ์ฐธ์กฐ)์ด ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ ์ค ํ ๊ฐ์ง์ ๊ด๊ณ๋ง์ ๋ก๋ฉํด์ผ ํฉ๋๋ค.
SQLAlchemy์์๋ lazy ์ต์ ์ด ์์ต๋๋ค. ์ด ์ต์ ์ relationship๊ณผ ๊ฐ์ ๊ด๊ณ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ค๋ ๋ค์ํ ์ต์ ์ ์ ํํ๋ ํ๋ผ๋ฏธํฐ๋ก ์ด๋ฅผ noload๋ก ์ค์ ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ORM ๊ฐ์ฒด๋ฅผ ๋ก๋ฉํ ๋ ํด๋น ๊ด๊ณ ๊ฐ์ฒด๋ ๋ก๋ฉํ์ง ์์ต๋๋ค.
SQLAlchemy์์๋ ํ๋์ ํ ์ด๋ธ์ ๋ณต์์ Entity ๊ฐ์ฒด๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ํ ์ด๋ธ ์ด๋ฆ์ด category ์ผ ๋, ๋์ผํ ํ ์ด๋ธ ์ด๋ฆ์ด ๊ฐ๋ Entity ๊ฐ์ฒด๋ฅผ ๋ง๋๋ฉด ๋ฐ๋ก ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ๋ฐ๋ผ์ ์ด๋ด ๋๋ ORM ๋ชจ๋ธ์ ๋ฐ๋ก ๋ก๋ฉํ๊ธฐ ๋ณด๋จ, SQLAlchemy Core๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์ํ๋ relationship์ ํจ์๋ณ๋ก ๋๋ ์ ์์ต๋๋ค. ๋ค๋ง ์ด๋ ๊ฒ ํ๋ ๊ฒฝ์ฐ ORM ๋ชจ๋ธ์ ์๋ lazy ์ต์ ์ ๋ชจ๋ noload๋ก ํด์ผํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ๋ชจ๋ธ์ ๋ฐ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค.
Self referential in Pydantic
๊ทธ๋ ๋ค๋ฉด Pydantic ๋ชจ๋ธ๋ก ๋ณํํ ๋๋ ์ด๋ป๊ฒ ํ ์ ์์๊น์? ํ์ด์ฌ์์ ํด๋์ค๋ฅผ ์ ์ํ๊ณ ์๊ธฐ ์์ ์ ๋ชจ๋ธ์ property ํ์ ์ผ๋ก ๋ฃ์ ๋๋ '' ๋ฐ์ดํ๋ฅผ ๋ฃ์ด ์งํํ ์ ์์ต๋๋ค.
ํ์ง๋ง Pydantic์์ ์ด๋ฐ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ForwardRef error๋ฅผ ๋ด๋ฟ๊ฒ ๋ฉ๋๋ค. ์ค๋ฅ ๋ฉ์์ง์์๋ update_forward_refs ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ์ง์ํ๋๋ฐ, ์ด ๋ฉ์๋๋ ๋ฌด์์ผ๊น์?
update_forward_refs๋ ๋ฌธ์์ด๋ก ์ ์ฐธ์กฐ๋ ๋ชจ๋ธ ํ๋กํผํฐ๋ฅผ ๋ค์ class ์ฐธ์กฐํ ์ ์๋๋ก ํด์ฃผ๋ ๋ ์์ ๋๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ชจ๋ ํ๋์ ๊ฐ์ ๊ฐ์ ธ์ ํด๋์ค ์ฐธ์กฐํ๊ณ , json_encoders์ ์ต์ ๋ ๊ฐ์ด ์ ์ฉ์์ผ์ฃผ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ์๊ธฐ ์ฐธ์กฐ๊ฐ ์ ์ฉ๋ SQLAlchemy ๋ชจ๋ธ์ Pydantic ๋ชจ๋ธ๋ก ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
Many-to-Many
many-to-many ์ฐ๊ด ๊ด๊ณ๋ ๋ค๋๋ค ๊ด๊ณ๋ผ๊ณ ๋ ํ๋ฉฐ ์ค์ ํ ์ด๋ธ ์ค์ฌ์ ๋ชจ๋ธ๋ง์์๋ ์ ๋์ค์ง ์๋ ์ฐ๊ด ๊ด๊ณ์ ๋๋ค. ๊ฐ์ฒด์งํฅ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์์ ๋ ์์ชฝ ์๋ก ๋ชจ๋๊ฐ ์ฐธ์กฐํ ์ ์๋ ๊ด๊ณ๋ฅผ ๋งํ๋๋ฐ, ์ด ๋๋ ๊ฐ ํ ์ด๋ธ์ ์๋ก์ ์ธ๋ํค๋ฅผ ์ง์ ํ๊ธฐ ๋ณด๋จ, ์ธ๋ํค๊ฐ ์๋ ํ ์ด๋ธ์ ๋๋ณํ๋ Entity ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ์ง์ ํด์ผ ์ฐจํ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
SQLAlchemy์์๋ ์ด๋ฅผ SQLAlchemy ORM๊ณผ SQLAlchemy Core ๋ ๊ฐ์ง๋ก ํํํ ์ ์์ต๋๋ค.
post_tags๋ Post Entity์ Tag Entity์ ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํ๋ ๊ด๋ฆฌ ํ ์ด๋ธ์ ๋๋ค. ํ๋์ ์ปจํ ์ธ ๋ ๋์ผํ ํ๊ทธ๋ฅผ ํ๋๋ง ๊ฐ์ง ์ ์์ผ๋ฏ๋ก PK๋ก ์ง์ ํ๋ฉด ์ค๋ณต๋ ํ๊ทธ๊ฐ ๋ค์ด๊ฐ ์ ์๊ณ , ํน์ ํ๊ทธ์ ์ด๋ค ๊ธ์ด ์๋์ง ๋น ๋ฅด๊ฒ ์์ธํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ post_tags๋ ORM์ ์ฌ์ฉํ์ง ์๊ณ Table์ ์ฌ์ฉํ๋๋ฐ ๊ทธ ์ด์ ๋ API์์๋ ์ด๋ค์ ํ ์ด๋ธ์ ์กฐํํ ์ผ์ด ์์ผ๋ฏ๋ก ORM ๋ชจ๋ธ์ด ์๋ ๋จ์ ํ ์ด๋ธ๋ก ์ ์ํ ๊ฒ์ ๋๋ค. ์ด๋ SQLAlchemy์ Core ๋ชจ๋์ ํด๋นํฉ๋๋ค.
๋ TagEntity์ posts๋ viewonly๋ฅผ True๋ก ์ง์ ํ๋๋ฐ, ์ด๋ Tag๋ฅผ ๋ง๋ค ๋ ํน์ ์ปจํ ์ธ ๋ฅผ ์ง์ ํ์ง ์๊ฒ ๋ค๋ ๊ฒ์ด๋ฉฐ ๋จ์ํ ์กฐํ๋ง ์ฌ์ฉํ๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค. SQLAlchemy์์ Many-to-Many๋ฅผ ์ง์ ํ ๋๋ ์๋ก์ Entity๊ฐ relationship์ ๊ฐ์ง๊ณ ์กฐํ/์ฝ์ ํ๋ ํํ๋ฅผ ๋ง๋ค ์๋ ์๋๋ฐ, ์ด๋ ๊ฒ ํ๋ฉด ๋ ์ค ํ๋์ relationship์ viewonly๋ก ๋์ด์ผ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ ๊ฐ์ฒด ๋ฐ์ดํฐ ๋ชจ๋๊ฐ ์ํฅ์ ๋ฐ๊ฒ๋ฉ๋๋ค.
๊ฑฐ๊ธฐ์ loading์ ๋ํด์๋ ์ฌ๊ท ์ง์ฅ(๋ฌดํ ์ฐธ์กฐ)๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์๋ก์ relationship์ด ๋์์ ๋ก๋ฉํ์ง ์๋๋ก ํด์ผ ํฉ๋๋ค. (์๊ธฐ ์ฐธ์กฐ ๊ด๊ณ์์ ํ๋๋๋ก ์งํํ๋ฉด ๋ฉ๋๋ค.)
๋ง์น๋ฉฐ...
ORM์ ๋งคํ ๊ด๊ณ์๋ One-to-One, One-to-Many, Many-to-One, Many-to-Many๊ฐ ์์ต๋๋ค. ํนํ Many-to-Many๋ ๊ฐ์ฒด์งํฅ์ ์ธ ๋ฐฉ๋ฒ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ธ๋ฐ, SQLAlchemy์์๋ ์ด๋ฅผ ๊ฐ๊ธ์ ORM์ผ๋ก ๋ชจ๋ ํํํ์ง ์๊ณ , ๊ทธ๋ค์ด ์ด๋ป๊ฒ ์ฐธ์กฐํ๊ณ ์๋์ง์ ๋ํด์ ๋ณ๋์ ํ ์ด๋ธ์ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์งํํฉ๋๋ค.
ํนํ ORM์ผ๋ก ๊ด๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ฉํ ๋ ๊ฐ์ฅ ์ฃผ์ํด์ผ ํ ๊ฒ์ ๋ฌดํ ์ฐธ์กฐ์ ๋๋ค. ๊ฐ๊ธ์ ๋ฌดํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๊ฒ ์ง๋ง ๋ฌดํ ์ฐธ์กฐํ ์ ๋ฐ์ ์๋ ์ค๊ณ๊ฐ ๋์๋ค๋ฉด ์ด๋ฅผ ์ ์ ํ ๋ก๋ฉํ ์ ์๋๋ก ๋ถ๋ฆฌํ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ผ ์ ์์ต๋๋ค.
Pydantic์ ์ด์ฉํด์ DTO๋ก ๋ณํํ ๋ orm_mode๋ฅผ True ๊ฐ์ผ๋ก ์ฃผ์ด SQLAlchemy Entity ๋ชจ๋ธ์ ๋ณํํ ์ ์๋๋ฐ, ์ฌ๊ธฐ์ relationship์ DTO ๋ชจ๋ธ์ ๋ช ์ํ์ง ์์ผ๋ฉด relationship์ ๋ก๋ฉ ๋ฐฉ๋ฒ๊ณผ ๊ด๊ณ ์์ด ์ง๋๊ฐ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ DTO ๋ชจ๋ธ์ ๋ณํ ๋ฐ์ดํฐ๋ก ๋ฃ์ง ์์ ๋ฟ ์ค์ ๋ก DB์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด์ Pydantic์ ๋จ์ํ relationship ํ๋กํผํฐ๋ฅผ ์ฃผ์ง ์๋ ๊ฒ์ด ๋๋์ง ์๊ณ ํ์ํ์ง ์์ ๋ฐ์ดํฐ์ ๋ํด์๋ loading ํ์ง ์๋๋ก ๊ตฌํํด์ฃผ์ธ์.