ORM
in DB
๐ก ORM(Object-Relational-Mapping)์ด๋?
DB์ OOP ๊ฐ์ ํธํ๋์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ
โช ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ฌ์ด์ ์ค๊ฐ๋ค๋ฆฌ ์ญํ
โช ์ฝ๋ฉ์ ๋์ฑ ํธ๋ฆฌํ๊ฒ ํด์ค๋ค.
โช ORM์ ๊ฐ๋จํ์ง๋ง, ๋ง์คํฐํ๊ธฐ๋ ํ๋ค๋ค.
โช ์๋๋ฉด ๊ฐ ORM์๋ ์์ญ๊ฐ์ ํ๊ณผ ์๋ น์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
โช python(flask)์์๋ ์ฃผ๋ก โSQLAlchemyโ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
๐ก ORM ์๋๋ฐฉ์
์ผ๋ฐ์ ์ผ๋ก ORM์ OOP์ DB ์ค๊ฐ์์ ์์ ์ ํ๋ค. ํต์ญ์ฌ๋ผ๊ณ ์๊ฐํ๋ ์ดํด๊ฐ ์ฌ์ ๋ค.
Python ์ฝ๋๋ก ์์ฑํ ๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์คํํ๊ณ ์ถ์ ๋๋ ORM์ด ๋์์ค๋ค.
์ด์ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ํ๋ค.
๋ฟ๋ง ์๋๋ผ ORM์ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ์์ฑ ๋ฐ ์ญ์ , ์กฐํ๊น์ง ๊ฐ๋ฅํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ MySQL, PostgreSQL ๋ฑ ๋ค์ํ โ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค(RDBMS)โ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ก ORM ์ฅ์
โช ORM์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ค.
โช SQL๋ฌธ ๋์ ์ Pythom์ธ์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑ, ์ญ์ , ์ผ๊ธฐ, ์์ ์ด ๊ฐ๋ฅํ๋ค.
โช ๋ถํ์ํ๊ฒ ๋ง์ ์ฝ๋๋ฅผ ์ ์ง ์์๋ ๋๋ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ณ , ์์ฐ์ฑ์ด ์ข์์ง๋ค.
โช ์ด๋ก ์ ์ผ๋ก ๋ค์ํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ํํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
๐ก ORM ๋จ์
โช Impedance Mismatches (๊ฐ์ฒด-๊ด๊ณ ๋ถ์ผ์น)
์ํ์๋ฆฌ์ ๊ธฐ๋ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ๊ณผ,
์ํํธ์จ์ด ์์ง๋์ด๋ง ์๋ฆฌ์ ๊ธฐ๋ฐํ OOP๊ฐ ํจ๊ป ์๋ํ๊ธฐ ๋๋ฌธ.
โช ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ
ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ฅผ SQL๋ฌธ์ผ๋ก ๋ฐ๊ฟ ๋, ์ ์ ํ ์กฐ์ ์ด ๋์ง์์ ๋ฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ฟผ๋ฆฌ๋ฌธ์ ๋ณด๋ด๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํ ๋ฐ์.
โช Shifting complexity from the database into the app code
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ App์ฝ๋๋ก ๋ณต์ก์ฑ ์ด๋
์๋ฅผ ๋ค๋ฉด ํ ์ด๋ธ๋ค์ ๊ด๊ณ ๋ฑ์ OPP ์ฝ๋๋ก ์ ์๋ฅผ ํด์ค์ผํ๋ค.