: Java Persistence API์ ์ฝ์๋ก, Java ์ง์์์ ORM ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ ๋ชจ์์ด๋ค. (์ ์ ๋ค๋ฃฌ ORM ๊ฐ๋ ) ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค์ด๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ๋ถ๋ถ์ JPA๋ ํน์ ๊ธฐ๋ฅ์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ์ธํฐํ์ด์ค๋ผ๋ ์ ์ด๋ค. ์ด๋ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด Hibernate, OpenJPA ๋ฑ์ด JPA๋ฅผ ๊ตฌํํ๋ค.

โ ์ฝ๊ฒ ๋งํด, JPA๋ ๋จ์ง ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง๋ฅผ ์ ์ํ๋ ํ ๋ฐฉ๋ฒ์ผ ๋ฟ์ด๋ฉฐ ๋จ์ํ ๋ช ์ธ์ด๊ธฐ์ ๊ตฌํ์ ์๊ณ , ๋ค์ํ ORM ํ๋ ์์ํฌ(์: Hibernate, EclipseLink, OpenJPA ๋ฑ)์์ ๊ตฌํํ ์ ์๋ ๊ณตํต API๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค. (JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JPA๋ฅผ ๊ตฌํํ ORM ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.)
JPA๋ ์ธํฐํ์ด์ค, Hibernate๋ JPA์ ๊ตฌํ์ฒด, Spring Data JPA๋ JPA๋ฅผ ์ฐ๊ธฐ ํธํ๊ฒ ๋ง๋ค์ด๋์ ๋ชจ๋!
JDBC์ ๊ตฌํ์ฒด๊ฐ Hibernate. Hibernate๋ฅผ ๋ค์ ์ถ์ํํ ๊ฒ JPA. JPA๋ฅผ ํ ๋ฒ ๋ ์ฌํํ๊ฒ ์ถ์ํํ ๊ฒ Spring Data JPA
: ์ด๋ ์๋์ ๊ฐ์ด ํ ๋ฌธ์ฅ์ผ๋ก ํํํ ์ ์๊ฒ ๋ค.
Spring Data JPA๋ JPA ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ณด๋ค ๊ฐํธํ๊ฒ ๋ง๋๋ ํ๋ ์์ํฌ์ด๋ค.
Spring์ผ๋ก ๊ฐ๋ฐํ๋ฉฐ DB์ ์ ๊ทผํ ํ์๊ฐ ์๋ ๋๋ถ๋ถ์ ์ํฉ์๋ Repository๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ๋ค. JPA๋ฅผ ํ ๋จ๊ณ ์ถ์ํ์ํจ ์ด Repository๊ฐ Spring Data JPA์ ํต์ฌ์ด๋ค.
Spring Data JPA๋ Spring์์ ์ ๊ณตํ๋ ๋ชจ๋ ์ค ํ๋๋ก, JPA ์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํด JPA ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ณด๋ค ๊ฐํธํ๊ฒ ๋ง๋ค์ด ์ค๋ค. CRUD ์ฐ์ฐ, ํ์ด์ง, ์ ๋ ฌ๊ณผ ๊ฐ์ JPA ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฐ ํ์ํ ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ ์ค์ด๋ ์ธํฐํ์ด์ค์ ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค.
: JPA๋ฅผ ์ฌ์ฉํ ๋๋ EntityManager๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํ๋ค.
๋ฐ๋ฉด์ Spring Data JPA๋ฅผ ์ฌ์ฉํ ๋๋ Repository ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ EntityManager ๋์ ์ ์ฌ์ฉํ ์ ์๋ค. CRUD (์์ฑ, ์ฝ๊ธฐ, ๊ฐฑ์ ๋ฐ ์ญ์ ) ์์ ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์์ฑํ์ง ์์๋ ๋๋ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ค.
๋ค์์ ์ ์ ์ ๋ฐ์ ์ธ ๊ฐ๋ ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ ๊ฒ์ด๋ค.

์ด์ฒ๋ผ, ์ ์ ๋น์ทํ ์์ญ์ ์์นํด ์์ผ๋ ๊ทธ ์ญํ ์ด ๋ช ํํ ๊ตฌ๋ถ๋๋ค. ๊ทธ๋ฌ๋ ์ ์ ํผ๋ํ์ง ์๋๋ก ์ ์ํ์.