์๋ฐ์์ ใ ORM(Object-Relational Mapping)์ ๊ตฌํํ๊ธฐ ์ํ ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ JavaEE ์คํ ์ ๋๋ค.**
JPA๋ ORM์ ์ฌ์ฉํ๊ธฐ ์ํ API์ด๋ฉฐ, ORM ํ๋ ์์ํฌ์ ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. JDBC๋ฅผ ์ฌ์ฉํ๋ DAO ์์ฑ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์ถ์ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค.
JPA ์ด์ ์๋ ๊ฐ๋ฐ์๊ฐ Java ๊ฐ์ฒด๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋งคํํ๊ฑฐ๋ ๋๋ ๊ทธ ๋ฐ๋๋ก ๋งคํํ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ผ ํ์ต๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์๊ฐ์ด ๋ง์ด ์์๋๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
โ SQL์ ์์กด์ ์ธ ๊ฐ๋ฐ์ ๋ํ ๋ฌธ์
JPA๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Java ๊ฐ์ฒด์ ์์์ฑ์ ์ฝ๊ฒ ํํํ ์ ์๋ ํ์คํ๋ ์๋ฃจ์ ์ผ๋ก ๋์์ต๋๋ค. ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ถ์ํํ๋ ์ผ๋ จ์ ์ธํฐํ์ด์ค ๋ฐ ์ฃผ์์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฎ์ ์์ค์ SQL ๋ฌธ์ ์ฒ๋ฆฌํ๋ ๋์ ๊ฐ์ฒด๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ฐ์ฑ : ๋ฐ๋ณต์ ์ธ CRUD SQL๋ฌธ ์์ฑ์ ํ์ง ์์๋ ๋๋ฉฐ, DDL๋ฌธ์ ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ ๊ธฐ๋ฅ๋ ์์ต๋๋ค.
์ ์ง๋ณด์ : SQL์ ์์กด์ ์ธ ๊ฐ๋ฐ์ ํ๋ ๊ฒฝ์ฐ SQL์ ๊ฒฐ๊ณผ๋ฅผ ๋งคํํ๊ธฐ ์ํ ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ JPA๊ฐ ๋์ ์ฒ๋ฆฌํด์ฃผ๋ฏ๋ก ์ ์ง๋ณด์ํด์ผ ํ๋ ์ฝ๋ ์๊ฐ ์ค์ด๋ญ๋๋ค.
ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ํด๊ฒฐ : ์์, ์ฐ๊ด๊ด๊ณ, ๊ฐ์ฒด ๊ทธ๋ํ ํ์, ๋น๊ต์ ๊ฐ์ ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ์ ์์ด ์๋ชจํด์ผํ๋ ๋น์ฉ์ ํฌ๊ฒ ์ ๊ฐํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ์ถ์ํ์ ๋ฒค๋ ๋ ๋ฆฝ์ฑ : ๊ฐ์ ๊ธฐ๋ฅ๋ ๋ฒค๋๋ง๋ค ์ฌ์ฉ๋ฒ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฐ๊ฐ ์ฌ์ฉ๋ฒ์ ๋ฐฐ์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. JPA๋ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์ ๊ณตํ์ฌ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ ์ ์ข ์๋์ง ์๋๋ก ํฉ๋๋ค.
JPA์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งคํ๋ ๊ฐ์ฒด์ ๋๋ค. ํด๋น ํด๋์ค๋ @Entity ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ๋งคํ๋ฉ๋๋ค.
Entity์ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ ์ํํ๋ ๊ฐ์ฅ ์ค์ํ ๊ฐ์ฒด ์ค ํ๋์ด๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ์์ํ๊ณ ์ข ๋ฃํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
JPQL(Java Persistence Query Language)๋ก ๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํ JPA์์ ์ ๊ณตํ๋ ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค. SQL๊ณผ๋ ์ ์ฌํ์ง๋ง ๊ฐ์ฒด ์งํฅ์ ์ธ ๊ฐ๋ ์ ์ฌ์ฉํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ์ถ์ํํ์ฌ ์ฝ๋ ์์ฑ์ ํธ๋ฆฌํ๊ฒ ๋์์ค๋๋ค.
ํด๋น ๋ฉ์๋๋ JPA ์ํฐํฐ์ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ์ ๋ํ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ์ ์ํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ดํ์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
JPA์์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ํฐํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋งคํํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์์ ์ธ๋ํค๋ฅผ ์ฌ์ฉํ์ฌ ํํ๋ฉ๋๋ค. ์ผ๋์ผ, ์ผ๋๋ค, ๋ค๋์ผ, ๋ค๋๋ค ๋ฑ ๋ค์ํ ๊ด๊ณ๋ฅผ ์ง์ํฉ๋๋ค.
JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๊ธฐ ์ํ ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. EntityManager์์ ์์ํ๋ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ ์ ์ํํ๊ณ ์ปค๋ฐ ๋๋ ๋กค๋ฐฑํ ์ ์์ต๋๋ค.
JPA์ ์ถ์ํ๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ์ง๋ง SQL ์ฟผ๋ฆฌ์ ๋ํ ์ธ๋ถ์ ์ธ ์ ์ด๋ ์ ํ๋ฉ๋๋ค. ํน์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด JPA์์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ๋ถํ์ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ต์ ํ๋ SQL์ ์ง์ ์์ฑํ๋ ๊ฒ์ด ๋ ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์ ์ข์ต๋๋ค.
JDBC(Java Database Connectivity)์ ๋นํด ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๋๋ฒ๊น ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค. JPA์์ ์ ๊ณตํ๋ ์ถ์ํ ๊ณ์ธต์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์์ ์ ๋ชจํธํ๊ฒ ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด๋ ๋ฐ์ดํฐ ์์ธ์ค์ ๊ดํ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค.