๋ฐ์ํ
2024.01.22 - [๐ Language/Java] - [Java] Hibernate๋?
์ด์ ์ Hibernate๋ ๋ฌด์์ผ๊น์ ๋ํ์ฌ ์ ์๋๋ง ์ดํด๋ดค์ต๋๋ค.
Hiberante์์ ๊ฐ์ฅ ๋ง์ด ๋์ค๋ ORM๊ณผ ์์์ฑ(Persistence)์ ๋ํ์ฌ ์์ธํ ํ๋ฒ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
ORM(Object-relational mapping) ์ด๋?
- ๊ฐ์ฒดํ ๋ฐ์ดํฐ(Objcet)์ ๊ด๊ณํ ๋ฐ์ดํฐ(Releational) ์ฌ์ด์์ ๊ฐ๋ ์ ์ผ๋ก ์ผ์นํ์ง ์๋ ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ์ด ๋์ Mapping(์ค์ )ํ๋ ๊ฒ
- ๊ฐ์ฒด์ ๊ด๊ณํ๋ฐ์ดํฐ ์ฌ์ด์ ๊ฐ๋ ์ ๋ถ์ผ์น๋ฅผ ์ฐ๋ฆฌ๋ ํจ๋ฌ๋ค์์ ๋ถ์ผ์น๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฅ์
- ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
- ORM์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๋ด๋นํ๋ฏ๋ก, ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์ ์ฉ์ด์ฑ
- ORM์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ ์ ORM์ด ์ด์ ๋์ํ์ฌ ์ฝ๋ ์์ ์ ์ต์ํํ๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข
์์ฑ ๊ฐ์
- ORM์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ์์ฑ์ ๋ฎ์ถ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ด๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก์ ์ด์ ์ ์๋์ ์ผ๋ก ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ์์ฐ์ฑ ํฅ์
- ORM์ ๋ฐ๋ณต์ ์ธ ์์ ์ ๊ฐ์์ํค๊ณ , ๊ฐ๋ฐ์๊ฐ ๋น ๋ฅด๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์ ์์ฐ์ฑ์ ํฅ์์ํต๋๋ค.
๋จ์
- ์ฑ๋ฅ ์์ค
- ORM์ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋ณํ ์์ ์ ์ํํ๋ฏ๋ก, ์ด๋ก ์ธํด ์ฑ๋ฅ ์์ค์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ ์์๋ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ํ์ต ๊ณก์
- ORM์ ์ฌ์ฉํ๋ ค๋ฉด ORM ๋๊ตฌ ๋ฐ ๊ฐ๋ ์ ๋ํ ํ์ต์ด ํ์ํฉ๋๋ค. ์ด๋ณด์์๊ฒ๋ ํ์ต ๊ณก์ ์ด ์์ ์ ์์ต๋๋ค.
- ๋ณต์ก์ฑ
- ์ผ๋ถ ๋ณต์กํ ์ฟผ๋ฆฌ๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด์๋ ORM์ ์ฐํํ๊ณ SQL์ ์ง์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํน์ฑ ๋์์ ํ๊ณ
- ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณ ์ ํ ํน์ฑ์ ๋ชจ๋ ์ง์ํ์ง ๋ชปํ ์ ์์ต๋๋ค. ํนํ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ ํธํ๋์ง ์์ ์ ์์ต๋๋ค.
์์์ฑ(Persistence) ์ด๋?
- ์ํฐํฐ(Entity)๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ.
- ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์์ ๊ฐ์ฒด๋ฅผ ๋ณด๊ดํ๋ ๊ฐ์์ ์ ์ฅ์ ๊ฐ์ ์ญํ .
- ์ํฐํฐ ๋งค๋์ (EntityManager)๋ฅผ ํตํด ์์์ฑ ์ปจํ ์คํธ์ ์ ๊ทผ.
- EntityManager ๋ฅผ ํตํด Entity ๋ฅผ ์ ์ฅ, ์กฐํํ๋ฉด EntityManager ๋ ์์์ฑ ์ปจํ ์คํธ์ ํด๋น Entity ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌ.
์ฅ์
- ๋ฐ์ดํฐ ๋ณด์กด
- ์์์ฑ์ ํตํด ๋ฐ์ดํฐ๋ ์์คํ ์ด ์ข ๋ฃ๋๊ฑฐ๋ ์ฌ์์๋๋๋ผ๋ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋์ด ๋ณด์กด๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ณต์
- ์ฌ๋ฌ ์ฌ์ฉ์๋ ์ฌ๋ฌ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด ์ค์ ์ง์ค์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ์ฅ์ ๋์
- ์์คํ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์์์ฑ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ ์์ค๋์ง ์๊ณ ํ๋ณต์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ๋์ ๋๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐํ ๋ฐ ๊ฒ์
- ์์์ฑ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ฒ์ํ ์ ์์ต๋๋ค. ์ ์ ํ ์ธ๋ฑ์ฑ ๋ฐ ์ฟผ๋ฆฌ ์์ฑ์ ํตํด ๋ฐ์ดํฐ ๊ฒ์ ์๋๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
๋จ์
- ์ฑ๋ฅ ์ค๋ฒํค๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค ๋ฐ ๊ด๋ฆฌ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํนํ ๋๊ท๋ชจ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ ๋ณต์กํ ์ฟผ๋ฆฌ ์ํ ์์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ณต์ก์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ์ ์งํ๋๋ฐ ์ผ์ ์์ค์ ๋ณต์ก์ฑ์ด ๋ฐ๋ฆ ๋๋ค. ์ด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ๋น์ฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ๋ฐ ๋ผ์ด์ผ์ค, ์ ์ง๋ณด์ ๋ฑ์ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ ๊ธฐ์ ์์๋ ์ด๋ฌํ ๋น์ฉ์ด ์๋นํ ํฌ๊ฒ ๋ํ๋ ์ ์์ต๋๋ค.
- ์ผ๊ด์ฑ ์ ์ง ์ด๋ ค์
- ๋ค์์ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ ๋, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด ํธ๋์ญ์ ๊ด๋ฆฌ์ ๋ฝ(Lock) ๋ฑ์ ๊ธฐ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํจ๋ฌ๋ค์์ ๋ถ์ผ์น
- OOP(๊ฐ์ฒด๋ชจ๋ธ)์ ๊ด๊ณํ DB์ ๋ฐ์ดํฐ ํํ ๋ฐฉ์, ์ด๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์์ด ๊ฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ผ์ด๋๋ ํ์๋ค์ ์ผ์ปซ๋ ์ฉ
- ์๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ๊ฐ์ ๋ฐ์ํ๋ ์ดํด์ ์ด๋ ค์์ด๋ ์กฐํ ๋ถ์ฌ๋ฅผ ๋ํ๋ธ๋ค.
๊ฐ์ฒด | ๊ด๊ณํ DB | |
์์ | ์์ | ์ํผํ์ ๊ณผ ์๋ธํ์ |
์ฐ๊ด๊ด๊ณ | ์ฐธ๊ณ (reference) | ์ธ๋ ํค๋ฅผ ํตํ ์กฐ์ธ |
๋ชจ๋ธ๋ง | ๊ฐ์ฒด์งํฅ | ๋ฐ์ดํฐ๊ด์ |
๊ฐ์ฒด๊ทธ๋ํํ์ | ์ฐธ์กฐ๋ฅผ ํตํ ๋ฌด์ ํ ํ์๊ฐ๋ฅ | SQL์ ์กฐ์ธ๋ฒ์์ ๋ฐ๋ผ ๊ฒ์ ๋ฒ์๊ฐ ์ ํด์ง |
๋น๊ต | ์ฃผ์๊ฐ์ผ๋ก ๋น๊ต (==, !=) ๊ฐ์ฒด ๋ด๋ถ ๊ฐ ๋น๊ต (equals()) |
๊ธฐ๋ณธ Key ๊ฐ์ผ๋ก Row ๋น๊ต |
๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ์ผ์น
- ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฐจ์ด
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ฐ์ฒด๋ ์์, ๋คํ์ฑ ๋ฑ์ ๊ฐ๋ ์ ๊ฐ์ง๋ฉฐ, ํ ์ด๋ธ์ ์ ๊ทํ, ์ธ๋ ํค ๋ฑ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ์ฐจ์ด๋ก ์ธํด ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ํ ์ด๋ธ์ ๋งคํํ๋ ๊ฒ์ด ์ฝ์ง ์์ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด ์๋ณ๊ณผ ๊ด๊ณํ ์๋ณ์์ ์ฐจ์ด
- ๊ฐ์ฒด๋ ์ฃผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฐธ์กฐ๋ฅผ ํตํด ๊ณ ์ ํ๊ฒ ์๋ณ๋์ง๋ง, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฃผ๋ก ํค(Primary Key)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์๋ณํฉ๋๋ค. ์ด๋ก ์ธํด ๊ฐ์ฒด์ ์๋ณ ๋ฐฉ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ณ ๋ฐฉ์๊ณผ ์ผ์น์ํค๋๋ฐ ์ด๋ ค์์ด ์์ ์ ์์ต๋๋ค.
- ์์๊ณผ ๊ด๊ณ์ ์ฒ๋ฆฌ
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ์์์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋ฐ๋ฉด, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ด๋ฅผ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ก ๋งคํํด์ผ ํฉ๋๋ค. ์ด๋ก ์ธํด ์์๊ณผ ๊ด๋ จ๋ ๋ณต์กํ ๋งคํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ORM์ ์ญํ ๊ณผ ๋ถ์ผ์น
- ๊ฐ์ฒด์ ํ
์ด๋ธ ๊ฐ์ ๋งคํ
- ORM์ ๊ฐ์ฒด์ ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์ํํ๋๋ฐ, ์ด ๋งคํ์ด ํญ์ ์๋ฒฝํ๊ฒ ์ผ์นํ์ง๋ ์์ต๋๋ค. ๊ฐ์ฒด ์งํฅ ๋ชจ๋ธ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ ์ฌ์ด์ ๋ณต์กํ ๋งคํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ผ๋ถ ์ ์ฝ์ด๋ ๋ณํ ์์ ์ด ํ์ํฉ๋๋ค.
- ์ฑ๋ฅ ์์ค
- ORM์ ์ฌ์ฉํ๋ฉด ๋งคํ ๋ฐ ๋ณํ ์์ ์ด ํ์ํ๋ฏ๋ก ์ฑ๋ฅ ์์ค์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ํนํ ๋ณต์กํ ์ฟผ๋ฆฌ๋ ๋๋์ ๋ฐ์ดํฐ ์์ ์์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ฟผ๋ฆฌ ์ธ์ด์ ์ฐจ์ด
- ๊ฐ์ฒด ์งํฅ ์ธ์ด์ SQL์ ๊ฐ๊ฐ์ ๋ชฉ์ ์ ๋ง๊ฒ ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ORM์ ์ฌ์ฉํ ๋ ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฟผ๋ฆฌ ์ธ์ด์ SQL ์ฌ์ด์ ๋ถ์ผ์น๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์์์ฑ ์ปจํ ์คํธ
- ์ํฐํฐ ํด๋์ค์์ ๋ง๋ค์ด์ง๋ ์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅ, ๊ด๋ฆฌํ๋ ํ๊ฒฝ
์์์ฑ ์ปจํ ์คํธ์ 4๊ฐ์ง ์ํ
- ๋น์์์ฑ(new/transient)
- ์ํฐํฐ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ ธ์ ์์ง ์ ์ฅ๋์ง ์์ ์ํ, ์์์ฑ ์ปจํ ์คํธ์ ์ ํ ๊ด๊ณ๊ฐ ์๋ ์ํ
- ์์(managed)
- ์ํฐํฐ๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅ, ์์์ด ์ปจํ ์คํธ๊ฐ ๊ด๋ฆฌํ ์ ์๋ ์ํ
- ์ค์์(detached)
- ์ํฐํฐ๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅ๋์ด ์๊ฑฐ๋ ๋ถ๋ฆฌ๋ ์ํ, ์์์ฑ ์ปจํ ์คํธ๊ฐ ๋ ์ด์ ๊ด๋ฆฌํ์ง ์๋ ์ํ
- ์ญ์ (removed)
- ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ญ์
ํน์ง
- ์์์ฑ ์ปจํ ์คํธ๋ ์ํฐํฐ๋ฅผ ์๋ณ์ ๊ฐ(@Id)์ผ๋ก ๊ตฌ๋ถ. ๊ณ ๋ก ์์ ์ํ๋ ์๋ณ์ ๊ฐ์ด ๋ฐ๋์ ์์ด์ผ ํ๋ค.
- ์์์ฑ ์ปจํ ์คํธ์ ์ํฐํฐ๋ฅผ ์ ์ฅํ ๋ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ, 1์ฐจ ์บ์์ ์ํฐํฐ๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด์ ์ ์ฅํฉ๋๋ค. ์ด๋ ๊ฒ ์์ธ ์ฟผ๋ฆฌ๋ฌธ์ flush( )๊ฐ ์คํ๋ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋๋ค.
- ์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ Persistence Object๊ฐ ์ฐ๊ฒฐํด์ฃผ๊ณ ์๋๊ฒ์ผ๋ก ํ์ธ ํ ์ ์๋ค.
๋ฐ์ํ
'๐ Language > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Hibernate๋? (0) | 2024.01.22 |
---|---|
[Java] JVM(Java Virtual Machine) ์ด๋? (0) | 2024.01.13 |
[Java] Java์ ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2024.01.12 |