๐พ [CS] ORM์ด๋ ๋ฌด์์ผ๊น์?
- ORM(Object-Relational Mapping)์ ๊ฐ์ฒด-๊ด๊ณ ๋งคํ์ ์๋ฏธํ๋ฉฐ, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์: Java, Python ๋ฑ)์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋งคํํ๋ ๊ธฐ์ ์ ๋งํฉ๋๋ค.
- ORM(Object-Relational Mapping)์ ๊ฐ์ฒด ์งํฅ ๋ฐฉ์๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋ก ๋ค๋ฅด๋ค๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์๋ฃจ์ ์ผ๋ก, ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ถ์ ์ธ SQL ์ฟผ๋ฆฌ ์์ด ๊ฐ์ฒด ๋ชจ๋ธ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์๋๋ก ๋์์ค๋๋ค.
1๏ธโฃ ORM(Object-Relational Mapping)์ ์ฃผ์ ๊ธฐ๋ฅ.
1๏ธโฃ ๊ฐ์ฒด์ ํ ์ด๋ธ ๊ฐ์ ๋งคํ.
-
๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฒด๋ก ํํ๋๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋ฐ์ดํฐ๊ฐ ํ
์ด๋ธ ํํ๋ก ์ ์ฅ๋ฉ๋๋ค.
- ORM(Object-Relational Mapping)์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์๋์ผ๋ก ๋งคํํ์ฌ, ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
2๏ธโฃ SQL ์ถ์ํ.
- ORM(Object-Relational Mapping)์ SQL ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ , ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ฝ์
, ์ญ์ , ์์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒํฉ๋๋ค.
- ์ด๋ฅผ ํตํด SQL ์์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
๐โโ๏ธ SQL์ด๋?
๐โโ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋?
3๏ธโฃ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ฑ.
- ORM(Object-Relational Mapping)์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข
์๋์ง ์๊ณ , ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์ผํ ์ฝ๋๋ก ๋์ํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ORM์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ๊ฑฐ์ ์์ ํ์ง ์์๋ ๋ฉ๋๋ค.
4๏ธโฃ ๊ฐ์ฒด ๋ชจ๋ธ ์ค์ฌ์ ๊ฐ๋ฐ.
- ORM์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ๋ชจ๋ธ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฉ์๊ณผ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค.
- ์ด๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ์์ฉ์ ์์ฐ์ค๋ฝ๊ฒ ํตํฉํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
๐โโ๏ธ ๋น์ฆ๋์ค ๋ก์ง(Business Logic)์ด๋?
๐โโ๏ธ API ์ค๊ณ, ๊ณ์ธตํ ์ํคํ ์ฒ, ํธ๋์ญ์ , ์ํฐํฐ(Entity), ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๊ท์น์ ์ฐจ์ด์ .
2๏ธโฃ ORM์ ๋์ ์๋ฆฌ.
1๏ธโฃ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๋งคํ.
- ๊ฐ์ฒด์ ์์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ปฌ๋ผ(Column, ์ด)์ ๋์ํ๊ณ , ๊ฐ์ฒด์ ์ธ์คํด์ค๋ ํ ์ด๋ธ์ ๋ก์ฐ(Row, ํ)์ ๋์๋ฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ๊ฐ์ฒด ๋ชจ๋ธ์
User
ํด๋์ค๊ฐ ์๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋User
ํ ์ด๋ธ์ด ์๊ณ , ๊ทธ ์์ฑid
,name
,email
๋ฑ์ ํ ์ด๋ธ์ ์ปฌ๋ผ(Column, ์ด)๊ณผ ๋งคํ๋ฉ๋๋ค.
2๏ธโฃ SQL ์๋ ์์ฑ.
- ORM(Object-Relational Mapping) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก SELECT, INSERT, UPDATE, DELETE์ ๊ฐ์ SQL ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด,
User
๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ORM(Object-Relational Mapping)์ด ์๋์ผ๋ก INSERT SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ํ ์ด๋ธ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํฉ๋๋ค.
3๏ธโฃ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋.
- ORM(Object-Relational Mapping)์ ๊ฐ์ฒด ์ํ๋ฅผ ์ถ์ ํ๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๊ธฐํํฉ๋๋ค.
- ๊ฐ์ฒด์ ์์ฑ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ORM(Object-Relationl Mapping)์ ์๋์ผ๋ก UPDATE ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
3๏ธโฃ ORM์ ์ฅ์ .
1๏ธโฃ ์์ฐ์ฑ ํฅ์.
- ORM(Object-Relational Mapping)์ ์ฌ์ฉํ๋ฉด SQL ์์ฑ์ ์ค์ด๊ณ , ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ ๋ ์ ์ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์์ต๋๋ค.
- ์ด๋ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒํฉ๋๋ค.
2๏ธโฃ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ฑ.
- ORM(Object-Relational Mapping)์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ์ง ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ORM(Object-Relational Mapping) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๋ง์ถ๋ฉด ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๊ฑฐ์ ์์ ํ์ง ์๊ณ ๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์ํ ์ ์์ต๋๋ค.
3๏ธโฃ ๋ณด์์ฑ
- ORM(Object-Relational Mapping)์ ์๋์ผ๋ก SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ SQL ์ธ์ ์
๊ณต๊ฒฉ๊ณผ ๊ฐ์ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ง์ SQL์ ์์ฑํ ํ์๊ฐ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์, ๋ณด์์ฑ์ด ํฅ์๋ฉ๋๋ค.
4๏ธโฃ ์ ์ง๋ณด์์ฑ.
- ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์์ด, ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ณ๊ฒฝ์ด ํ์ํ ๋๋ ๊ฐ์ฒด ๋ชจ๋ธ์ ํตํด ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
4๏ธโฃ ORM์ ๋จ์ .
1๏ธโฃ ๋ณต์กํ ์ฟผ๋ฆฌ ์์ฑ์ ํ๊ณ.
- ORM์ ๋ณต์กํ ์ฟผ๋ฆฌ ์ต์ ํ๋ ํน์ ํ SQL ๊ธฐ๋ฅ์ ์ถฉ๋ถํ ์ง์ํ์ง ์์ ์ ์์ต๋๋ค.
- ๋งค์ฐ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ORM ๋์ ์ง์ SQL์ ์์ฑํด์ผ ํ ๋๋ ์์ต๋๋ค.
2๏ธโฃ ์ฑ๋ฅ ์ด์.
- ์๋์ผ๋ก SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ORM์ ์ง์ ์์ฑํ SQL์ ๋นํด ์ฑ๋ฅ์ด ๋ค์ ๋จ์ด์ง ์ ์์ต๋๋ค.
- ๋๊ท๋ชจ ํธ๋ํฝ์ด๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๋ง์ ํ๊ฒฝ์์๋ ORM(Object-Relational Mapping) ์ฌ์ฉ์ด ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
3๏ธโฃ ์ถ์ํ๋ก ์ธํ ์ ์ด๋ ฅ ๊ฐ์.
- ORM(Object-Relational Mapping)์ SQL์ ์ถ์ํํ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ถ์ ์ธ ์ ์ด๊ฐ ์ด๋ ต์ต๋๋ค.
- SQL์ ์ธ๋ถ ๋์์ ์ง์ ๊ด๋ฆฌํ๊ณ ์ถ์ ๋๋ ORM(Object-Relational Mapping)๋ณด๋ค ์ง์ SQL ์์ฑ์ด ๋ ๋์ ์ ์์ต๋๋ค.
๐โโ๏ธ ์ถ์ํ(abstraction)
๐โโ๏ธ DIP์ ์ ์์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ์ด๋ ๋ฌด์์ผ๊น?
๐โโ๏ธ DIP์ ์ ์์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ๊ณผ โ์ถ์ํโ์ ๊ฐ๋ ์ ์ฐจ์ด์ .
5๏ธโฃ ๋ํ์ ์ธ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
Hibernate
-
Java์ JPA(Java Persistence API)๋ฅผ ์ง์ํ๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ORM ํ๋ ์์ํฌ์
๋๋ค.
- Hibernate๋ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ํฉ๋๋ค.
๐โโ๏ธ JPA๋ ๋ฌด์์ธ๊ฐ์?
๐โโ๏ธ JPA๋ฅผ ์ฌ์ฉํ๋ ์ด์ .
6๏ธโฃ ๊ฒฐ๋ก .
-
ORM(Object-Relational Mapping)์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๊ด๋ฆฌํ๋ ๊ธฐ์ ๋ก, ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ํํ ์ ์๊ฒ ํด์ค๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ SQL ์์ฑ์ ๋ฒ๊ฑฐ๋ก์์ ์ค์ด๊ณ , ์์ฑ์ฑ, ์ ์ง๋ณด์์ฑ, ๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ ๋ณต์กํ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๋ ์ฑ๋ฅ ๋ฌธ์ ์ ์์ด์๋ SQL์ ์ฅ์ฑํ๋ ๊ฒ์ด ๋ ๋์ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ SQL ์์ฑ์ ๋ฒ๊ฑฐ๋ก์์ ์ค์ด๊ณ , ์์ฑ์ฑ, ์ ์ง๋ณด์์ฑ, ๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ORM(Object-Relation Mapping)์ ์ ์ ํ ํ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.