Orm.md
๊ฐ๋
๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก **๋งคํ(์ฐ๊ฒฐ)**ํด์ฃผ๋ ๊ฒ์ ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์์ ํด๋์ค == RDB์ ํ ์ด๋ธ
๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด๊ณํ ๋ชจ๋ธ ๊ฐ์ ๋ถ์ผ์น(๊ฐ์ฒด ์ํผ๋์ค ๋ถ์กฐํ) ๋ฌธ์ ๊ฐ ์กด์ฌํฉ๋๋ค.
ORM์ ์ฌ์ฉํด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL์ ์๋ ์์ฑํ์ฌ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์ฅ/๋จ์
์ฅ์
๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋๋ก ์ธํด ๋ ์ง๊ด์ ์ผ๋ก ๋ก์ง์ ์ง์คํ ์ ์์ต๋๋ค.
ORM์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ CRUD ์์ ์ SQL(Raw) Query๊ฐ ์๋ ์ฝ๋(๋ฉ์๋)๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ์ฒด์ ๋ํ ์ฝ๋๋ฅผ ๋ณ๋๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ฌ๋ผ๊ฐ๋๋ค.
์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์์ ํธ๋ฆฌ์ฑ
ORM์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ๋์ด ์๊ณ , ํด๋น ๊ฐ์ฒด๋ค์ ์ฌ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ์์ ๊ฐ๊ณต๋๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค๋ฌ์ ์ํด ๋ทฐ์ ํฉ์ณ์ง๋ ํํ๋ก ๋์์ธ ํจํด(MVC, MVT ๋ฑ๋ฑ)์ ๊ฒฌ๊ณ ํ๊ฒ ๋ค์ง๋ ๋ฐ ์ ๋ฆฌํฉ๋๋ค.
DBMS์ ๋ํ ์ข ์์ฑ ๊ฐ์
๋๋ถ๋ถ์ ORM ์๋ฃจ์ ์ DB์ ์ข ์์ ์ด์ง ์๊ณ , ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ์ ๋ฐ๋ผ SQL์ ์๋์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธฐ ๋ค๋ฅธ DBMS์ ๋ง์ถ์ด ์ค๊ณํ ํ์๊ฐ ์์ต๋๋ค.
๊ฐ์ฒด์ ์ง์คํจ์ผ๋ก์จ DBMS๋ฅผ ๊ต์ฒดํ๋ ๊ฑฐ๋ํ ์์ ์์ ๋น๊ต์ ์ ์ ๋ฆฌ์คํฌ์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
๋จ์
ORM์ผ๋ก๋ง ์๋น์ค๋ฅผ ๊ตฌํํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
์ฌ์ฉํ๊ธฐ ํธํ์ง๋ง ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ด ์ปค์ง๊ฒฝ์ฐ ๋์ด๋ ๋ํ ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ ์ค๊ณ๋ฅผ ๋งค์ฐ ์ ์คํ๊ฒ ํด์ผํฉ๋๋ค.
์๋์ผ๋ก SQL์ ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ ์์ฑ๋๋ ์ฟผ๋ฆฌ์ ๋ถํ์ํ ์ ์ฝ๋ค์ด ์ฌ๋ผ๊ฐ๊ธฐ๋ ํ๋ฉฐ ์ฟผ๋ฆฌ์ ์๋๊ฐ ํ๋ฝํฉ๋๋ค.
์ฌ์ฉ
Python
SQLAlchemy
Django Framework => ORM์ ๊ธฐ๋ณธ ์ ๊ณต
Java
Hibernate
JPQL
Mybatis & JPA
Javascript
Sequelize.js
TypeORM ๋ฑ๋ฑ
๊ฐ์ฒด-์ํผ๋์ค ๋ถ์กฐํ (The Object-Relational Impedance Mismatch)
์ธ๋ถ์ฑ
๊ฒฝ์ฐ์ ๋ฐ๋ผ DB์ ์๋ ํ ์ด๋ธ ์๋ณด๋ค ๋ ๋ง์ ํด๋์ค๋ฅผ ๊ฐ์ง ๊ฐ์ฒด ๋ชจ๋ธ์ ๊ฐ์ง ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ธ๋ถ ์ฌํญ์ด๋ผ๋ ํ ์ด๋ธ์ ์๊ฐํด๋ด ์๋ค.
Person๊ณผ Address๋ผ๋ ๋๊ฐ์ ํด๋์ค๋ก ๋๋์ด ์ง ์ ์์ง๋ง DB์๋ person์ด๋ผ๋ ํ๋์ ํ ์ด๋ธ์ ์ฌ์ฉ์ ์ธ๋ถ ์ฌํญ์ ์ ์ฅํ ์ ์์ต๋๋ค.
Object : 2๊ฐ != Table : 1๊ฐ
์์
์ผ์น
RDB์์๋ ๊ธฐ๋ณธํค(PK)๋ฅผ ์ฌ์ฉํ์ฌ 'sameness'์ ๊ฐ๋ ์ ์ ์ํ์ง๋ง ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์๋ ์ฃผ์๊ฐ์ด ๊ฐ๊ฑฐ๋ ๋ด์ฉ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํ์ฌ ์ ์ ํฉ๋๋ค.
์ฐ๊ด์ฑ
ํ์
Last updated