JPA์ Hibernate
+ Spring Data JPA
JPA๋ ์๋ฐ ์ง์์์ ORM(Object-Relational Mapping) ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค์ ๋ชจ์์ด๋ค. ๊ทธ ๋ง์ ์ฆ, ์ค์ ์ ์ผ๋ก ๊ตฌํ๋๊ฒ์ด ์๋๋ผ ๊ตฌํ๋ ํด๋์ค์ ๋งคํ์ ํด์ฃผ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ด๋ค. JPA๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ์คํ์์ค๋ก๋ Hibernate๊ฐ ์๋ค.
JPA(Java Persistence API)
JPA๋ Java์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ด๋ค. ๋ฐ๋ผ์ ์ด๋ค ์ฝ๋๊ฐ ๊ตฌํ๋์ง ์์๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ Java ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ฆ, ์๋ฐ ์ง์์์ ORM ๊ธฐ์ ํ์ค์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ JDBC ์ฌ์ด์ ๋์ํ๋ค.
์ฌ๊ธฐ์ ORM์ด๋, Object Relationsip Mapper์ ์ฝ์๋ก JDBC๋ Spring JDBC, iBatis์์๋ db ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ณ๋๋ก ๋ก์ง์ ์์ฑํ๊ณ , ์ด๋ฅผ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ง๋ง ORM์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฉ์์ DB๋ฅผ ์ฌ์ฉํ๋ค.
๋ํ์ ์ธ ํ๋ ์์ํฌ๋ก Hibernate๊ฐ ์กด์ฌํ๋ค.
Hibernamte
Hibernate๋ JPA์ ๊ตฌํ์ฒด์ด๋ค. ์ค์ ๋ก JPA์ ํต์ฌ์ธ EntityManagerFactory, EntityManager, Entity Transaction์ Hibernate์์๋ SessionFactory, Session, Trasaction์ผ๋ก ์์ ๋ฐ๊ณ ๊ฐ๊ฐ Impl๋ก ๊ตฌํํ๊ณ ์๋ค.


Impl ํด๋์ค๋ Hibernate์ ํด๋์ค์ด๋ค.

JPA์ Hibernate๋ ๋ค์๊ณผ ๊ฐ๋ค.
JPA
JPA๋ ORM ๋๊ตฌ์ ์ผ๋ถ ๊ธฐ๋ฅ๊ณผ ํ์ค์ ์ ๊ณตํ๋ Java ์ฌ์์ผ ๋ฟ ๊ตฌํ์ด ์๋๋ค.
๊ฐ์ฒด-๊ด๊ณํ ๋งคํ์ ๊ตฌํํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ค์ ํ๋ ๊ท์น์ ์งํฉ์ด๋ค.
๋คํ์ฑ๊ณผ ์์์ ์ง์ํ๋ค.
๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ ์ธ์ด๋ก์ JPQL์ ์ฌ์ฉํ์ฌ DB ์์ ์ ์คํํ๋ค.
Hibernate
JPA์ ๊ฐ์ด๋๋ผ์ธ์ ๊ตฌํ์ฒด์ด๋ค.
JPA๊ฐ ์ ๊ณตํ ๊ณตํต ํ์ค์ ๋ฐ๋ฅธ๋ค.
RDB ์์คํ ์ Java ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ ORM ๋๊ตฌ์ด๋ค.
๊ฒฐ๋ก ์ Hibernate๋ ํ๋ ์์ํฌ์ด๊ณ JPA๋ API ์ฌ์์ด๋ค.
์ฅ์ ์ ๋ฌด์์ผ๊น?
jdbc๋ฅผ ์ฌ์ฉํ์ ๋ sql ์ฟผ๋ฆฌ๋ค์ ์ง์ ์์ฑํ๋ฉด์ ์ค๋ณต๋ ์ฝ๋๋ค์ด ๋ฐ์ํ์๋ค. ๋, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋งคํํ๋ ์์ ์ด๋ค. RDB๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ค์ ๊ด๊ณํ์ผ๋ก ๋ฌถ๊ธฐ ์ํจ์ธ๋ฐ, ์ด๋ฅผ ์์์ ๋งคํํด์ค๋ค.
์์ฐ์ฑ ํฅ์ : CRUD ์์ ์ ์ฒ๋ฆฌํด์ฃผ๊ณ ๋ฐ๋ณต์ ์ธ SQL ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์์๋ ๋จ
์ ์ง๋ณด์ : ๊ฐ์ฒด ์์ ์ ๋ฐ๋ฅธ SQL ์ฝ๋ ์์ ์์ ์ด ํ์ ์๋ค.
๋ฐ์ดํฐ ๊ด๊ณ ๋งคํ : ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฅผ ๋งคํํ๋ ๊ณผ์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌ
์ฑ๋ฅ : ์บ์ฑ ์ง์
๋จ์ ์ ๋ฌด์์ผ๊น?
ORM์ ํธํ์ง๋ง ์ค์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๊ฒ ๋งํผ์ ์ฑ๋ฅ์ด ์ข์ง ์๋ค๊ณ ํ๋ค.
๊ฐ๋จํ ์๋น์ค๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ณณ์์๋ ์ฌ์ฉํ๊ธฐ ์ข๊ฒ ์ง๋ง, ์๋น์ค๊ฐ ๋ณต์กํ๊ณ ๊ทธ๋งํผ ์๊ตฌ์ฌํญ์ด ํฌ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค๊ฒ์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ JPA๊ฐ ์ง์ํ๋ JPQL์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ Query๋ฅผ ์ง์ ์ ์ํ๊ฑฐ๋, ORM๊ณผ MyBatis๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๊ฑฐ๋, QueryDSL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
JPA๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ Entity์ ์๋ช ์ฃผ๊ธฐ, ์บ์, ์ฐ๊ธฐ ์ง์ฐ, ์์ ์ ๋ต, ์ปฌ๋ ์ ๋งคํผ ๋ฑ DB๋ฅผ ์ฌ์ฉํ๋ ๋ค์ํ ์ต์ ๋ค์ด ์กด์ฌํ๋๋ฐ, ์ด๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ์ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง๋ค.
Spring Data JPA
Data JPA๋ JPA๋ฅผ ๋ ํธํ๊ณ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด๋์ ๋ชจ๋์ด๋ค. JPA๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐํ๋ฉด @Entity์ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ํ์ฉํ๋ฉด ์์์ DDL์ ์ํํ์๋ค. ์ด๊ฒ์ด Spring Data JPA์ด๋ค.
JpaRepository๋ฅผ ์ฌ์ฉํด์ JPA์ ๊ตฌํ์ฒด์ธ Hibernate๋ก ์์ฒญ์ ์ ๋ฌํ๊ณ , Hibernate๋ ๊ทธ์ ๋ง๋ JDBC API๋ฅผ ์ฌ์ฉํด์ DB์ ์ ๊ทผํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ํ๋ฆฌ์์ด์ ์ ๋ฐํํด์ฃผ๋ ๋ฐฉ์์ด๋ค.

JPA๋ ๋ด๋ถ์์ JDBC API๊ฐ ์ค์ ๋ก ๋์ํ๊ณ ์๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ SQL์ ์์ฑํ์ง ์์ ๋ฟ ๋์์ ๋์ผํ๋ค.
Last updated