ORM(Oject-Relational-Mapping) Framework
๐ฌ ORM(Oject-Relational-Mapping) Framework๋ ๋ฌด์์ธ๊ฐ์?
โ ์ถ์ํ์ ์์ ๋คํ์ฑ์ ํน์ง์ ์ง๋ ๊ฐ์ฒด์งํฅ๊ณผ, ๋ฐ์ดํฐ ์ค์ฌ๊ตฌ์กฐ์ธ RDB์ฌ์ด์์ ๋ฐ์ํ๋ ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ํ๋ ์์ํฌ๋ก, SQL๋ฌธ์ด ์๋ ๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํฉ๋๋ค. SQL Mapper๊ฐ ์ฝ๋์์ผ๋ก๋ JDBC API์ SQL์ ๊ตฌ๋ถ ์ง์๋ค ํ๋๋ผ๋, ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐํ ์์กด์ฑ์ด ์ง์๋๊ณ ์์์ต๋๋ค. ๊ฐ๊ฐ์ DB๋ง๋ค ์ฟผ๋ฆฌ๋ฌธ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ, ๊ฐ๋ฐ์๊ฐ ๊ฐ DB์ ์ฟผ๋ฆฌ๋ฌธ์ ์ฌ์ฉํ ์ค ์์์ผ๋ง DB๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ ์ ์๋ก ๋ค ์ ์์ต๋๋ค..
ORM Framework๋?
๐ ๊ฐ์ฒด-๊ด๊ณ ๋งคํ.
์ฌ๋ฌผ์ ์ถ์ํ์์ผ ์ดํดํ๋ ค๋ OOP(Object_Oriented Programming)์ ์ฌ๊ณ ๋ฐฉ์๊ณผ DataModel์ ์ ํํํ์ฌ ๊ด๋ฆฌํ๋ ค๋ RDB ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ ๊ณ์ธต์ ์ญํ ๋ก ์ ์๋ ํจ๋ฌ๋ค์. ๋จ์ํ๊ฒ ํํํ๋ฉด, ๊ฐ์ฒด์ ๊ด๊ณ์ ์ค์ ์ด๋ผ๊ณ ํ ์ ์์. RDB์ ๋ชจ๋ธ์ OOP์ Entity ํํ๋ก ํฌ์์ํค๋ ๋ฐฉ์์ ์ฌ์ฉ.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ์ ํธํ๋์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
- ORM์ ์ด์ฉํ๋ฉด ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ก ์ธํด ๋ ์ง๊ด์ ์ด๋ฉฐ, ๋น์ฆ๋์ค ๋ก์ง์ ๋ ์ง์คํ ์ ์๊ฒ ๋์์ค๋ค.
- ์ ์ธ๋ฌธ, ํ ๋น, ์ข ๋ฃ ๊ฐ์ ๋ถ์์ ์ธ ์ฝ๋๊ฐ ์๊ฑฐ๋ ๊ธ๊ฒฉํ ์ค์ด๋ ๋ค
- ๊ฐ์ข ๊ฐ์ฒด์ ๋ํ ์ฝ๋๋ฅผ ๋ณ๋๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์๋ ค์ค๋ค
- SQL์ ์ ์ฐจ์ ์ด๊ณ ์์ฐจ์ ์ธ ์ ๊ทผ์ด ์๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ ๊ทผ์ผ๋ก ์ธํด ์์ฐ์ฑ์ด ์ฆ๊ฐํ๋ค.
- ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์์ ํธ๋ฆฌ์ฑ์ด ์ฆ๊ฐํ๋ค.
- ORM์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ๋์ด ์๊ณ , ํด๋น ๊ฐ์ฒด๋ค์ ์ฌํ์ฉ ํ ์ ์๋ค. ๋๋ฌธ์ ๋ชจ๋ธ์์ ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค๋ฌ์ ์ํด ๋ทฐ์ ํฉ์ณ์ง๋ ํํ๋ก ํจํด์ ๊ฒฌ๊ณ ํ๊ฒ ๋ค์ง๋๋ฐ ์ ๋ฆฌํ๋ค.
- ๋งคํ์ ๋ณด๊ฐ ๋ช ํํด ERD๋ฅผ ๋ณด๋ ๊ฒ์ ๋ํ ์์กด๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
- ์ข ์์ ์ด์ง ์๋ค๋ ๊ฒ์ ๊ตฌํ ๋ฐฉ๋ฒ ๋ฟ ์๋๋ผ ๋ง์ ์ค๋ฃจ์ ์์ ๋ฐ์ดํฐ ์๋ฃํ ํ์ ๊น์ง ์ ํจํ๋ค
- ํ๋ก๊ทธ๋๋จธ๋ Object์ ์ง์คํจ์ผ๋ก์จ ๊ทน๋จ์ ์ผ๋ก DBMS๋ฅผ ๊ต์ฒดํ๋ ๊ฑฐ๋ํ ์์ ์๋ ์ ์ ๋ฆฌ์คํฌ์ ์๊ฐ์ด ์์๋๋ค. ๋ํ ์๋ฐ์์ ๊ฐ๊ณตํ ๊ฒฝ์ฐ equals, hashCode์ ์ค๋ฒ๋ผ์ด๋ ๊ฐ์ ์๋ฐ์ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๊ณ , ๊ฐ๊ฒฐํ๊ณ ๋น ๋ฅธ ๊ฐ๊ณต์ด ๊ฐ๋ฅํ๋ค.
- DBMS์ ๋ํ ์ข ์์ฑ์ด ์ค์ด๋ ๋ค.
- ๋ํ์ ์ธ ํ๋ ์ ์ํฌ๋ก Hibernate, sequelize, ์ด๋ฅผ JAVA ํ์ค๋ฐฉ์์ผ๋ก ์ ์ํ JPA๊ฐ ์์
ORM Framework์ ๋จ์
- ์๋ฒฝํ ORM๋ง์ผ๋ก ์๋ฒ๋ฅผ ๊ตฌํํ๊ธฐ๋ ์ด๋ ต๋ค
- ์ฌ์ฉํ๊ธฐ๋ ํธํ์ง๋ง, ์ค๊ณ๋ ๋งค์ฐ ์ ์คํ๊ฒ ํด์ผํ๋ค.
- ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ด ์ปค์ง ๊ฒฝ์ฐ ๋์ด๋ ๋ํ ์ฌ๋ผ๊ฐ ์ ์๋ค.
- ์๋ชป ๊ตฌํํ ๊ฒฝ์ฐ ์๋ ์ ํ ๋ฐ ์ฌ๊ฐํ ๊ฒฝ์ฐ ์ผ๊ด์ฑ์ด ๋ฌด๋์ง๋ ๋ฌธ์ ์ ์ด ์๊ธธ ์ ์๋ค.
- ์ผ๋ถ ์์ฃผ ์ฌ์ฉ๋๋ ๋ํ ์ฟผ๋ฆฌ๋ ์๋๋ฅผ ์ํด SP๋ฅผ ์ฐ๋ ๋ฑ ๋ณ๋์ ํ๋์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- DBMS์ ๊ณ ์ ๊ธฐ๋ฅ์ ์ด์ฉํ๊ธฐ ์ด๋ ต๋ค.
- ํ๋ก์์ ๊ฐ ๋ง์ ์์คํ
์์๋ ORM์ ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฅ์ ์ ํ์ฉํ๊ธฐ ์ด๋ ต๋ค.
- ์ด๋ฏธ ํ๋ก์์ ๊ฐ ๋ง์ ์์คํ ์์ ๋ค์ ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ผ ํ๋ฉฐ, ๊ทธ ๊ณผ์ ์์ ์์ฐ์ฑ ์ ํ๋ ๋ฆฌ์คํฌ๊ฐ ๋ง์ด ๋ฐ์ํ ์ ์๋ค.
- ์ธ๋ฐํจ์ ๋ถ์ผ์น
- ํ์ ํ์ ๋ฌธ์ (RDB์๋ ์์์ ๊ฐ๋ ์ด ์๊ธฐ ๋๋ฌธ)
- ๋์ผ์ฑ ๋ฌธ์ (JAVA์ ๊ฒฝ์ฐ Equals๋ก ํ๊ฐ ๊ฐ๋ฅํ์ง๋ง, DB๋ PK๊ธฐ์ค)
- ์ฐ๊ด ๊ด๊ณ -FK๋ ์ฐ๊ด์ ๋ฐฉํฅ์ฑ์ ๊ฐ์ง์ง ๋ชปํจ. ๋ฐ๋ผ์ N : N ๊ด๊ณ์ ๊ฒฝ์ฐ Link ํ ์ด๋ธ์ ๋์ ํด์ผ ํจ
- ๋ฐ์ดํฐ ๊ฒ์ - RDB๋ ํ ๋ฒ์ ๋ง์ด ๊ฐ์ ธ์ฌ์ง(๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ) ๋น๋ฒํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง(์ฑ๋ฅ ๋ฌธ์ ) ๊ณ ๋ฏผํด์ผ ํจ.
ORM์ ๊ฐ๋ฐ์๋ฅผ RBD์์ ๋ถ๋ฆฌ์ํค๋ ๊ธฐ์ ์ด ์๋, ์คํ๋ ค ๊ฐ๋ฐ์์๊ฒ ๋์ RDB์ง์์ ์ํ๋ค. ์ด๋ ๊ฐ์ฒด๊ตฌ์กฐ์ ์ค๊ณ ์ DB์ ์คํค๋ง๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ์์ ๋ ์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋ฆฌ
ORM์ด ์์ ๋์๋ ๊ฐ๋ฐ์๊ฐ DB์ ์ ๊ทผํ๊ธฐ ์ํด์ SQL Query๋ฅผ ์ง์ ๋ง๋ค์๋ค. ์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ SQL๋ฌธ๋ฒ์ ์์งํด์ผ ํ๋ฉฐ, ์ฝ๋์ DB๊ฐ ์๋ก ์ข ์๊ด๊ณ๋ฅผ ๋งบ๊ฒ ๋์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ORM์ด ๋ฑ์ฅํ์๋ค.
JPA_Jakarta(Java) Persistence API
- ์๋ฐ์์ ORM ๊ธฐ์ ์ ์ฌ์ฉํด RDBMS๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ์ธํฐํ์ด์ค ํ์ค ๋ช ์ธ
- API + JPQL + metadata(+Criteria API)
JPQL_Jakarta(java) Persistence Query Language
- ํ๋ซํผ์ผ๋ณด๋ถํฐ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ ์ธ์ด
- JPA ํ์ค์ ์ผ๋ถ๋ก ์ ์๋จ
- RDBMS์ ์ํฐํฐ๋ฅผ ๋ค๋ฃจ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋๋๋ฐ ์ฌ์ฉ
- SQL์ ์ํฅ์ ๋ฐ์ ํ์์ด ์ ์ฌ
'Web_Backend > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB, SQL] ๋ฐ์ดํฐ๋ฒ ์ด์ค, PostgreSQL์ค์น, SQL๊ตฌ๋ฌธ(SELECT, WHERE, BETWEEN, IN, LIKE, ILIKE, ORDER BY, DISTINCT, COUNT, DATE) (2) | 2024.01.02 |
---|---|
[mysqlDump] DB ํฉ์น๊ธฐ.. ๊ทธ๊ฑฐ ์ด๋ป๊ฒ ํ๋๊ฑด๋ฐ.....? feat.. mysqldump (0) | 2023.09.06 |
[DB] RDB ์ NoSQL (0) | 2023.05.26 |
[DB] Primary Key๋? (0) | 2023.05.26 |
db ์ฐ๊ฒฐ์ฉ ์ปจํธ๋กค๋ฌ ํจํค์ง ์์ฑ (0) | 2022.03.08 |
์ผ๋์ ์ฝ๋ฉ ์ผ๊ธฐ์ฅ :) #์ฝ๋ฉ๋ธ๋ก๊ทธ #๊ธฐ์ ๋ธ๋ก๊ทธ #์ฝ๋ฉ #์กฐ๊ธ์ฉ,๊พธ์คํ
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!