โจ JPA(Java Persistence API)
์๋ฐ ์ง์์์ ORM(Object-relational Mapping) ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค์ ๋ชจ์
- ์๋ฐ ORM ๊ธฐ์ ์ ๋ํ ํ์ค ๋ช ์ธ๋ก, JAVA ์์ ์ ๊ณตํ๋ API์ด๋ค.
- ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค์ด๋ค.(ORM์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ ์ธํฐํ์ด์ค)
- ์ํฐํฐ ๋น์ ๋์ฒดํ๋ ๊ธฐ์ ์ด๋ค.
- ORM์ด๊ธฐ ๋๋ฌธ์ ์๋ฐ ํด๋์ค์ DBํ ์ด๋ธ์ ๋งคํํ๋ค. (SQL ์ ๋งคํํ์ง ์์)
โจ ORM์ด๋? (SQL Mapper ์ ORM)
- ORM์ DBํ ์ด๋ธ์ ์๋ฐ ๊ฐ์ฒด๋ก ๋งคํํจ์ผ๋ก์จ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL์ ์๋์ผ๋ก ์์ฑ (Mapper๋ SQL์ ๋ช ์ํด์ฃผ์ด์ผํจ)
- ORM์ RDB์ ๊ด๊ณ๋ฅผ Object์ ๋ฐ์ํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ผ๋ฉด, Mapper๋ ๋จ์ํ ํ๋๋ฅผ ๋งคํ์ํค๋ ๊ฒ์ด ๋ชฉ์
SQL Mapper | ORM(Object-Relation Mapping / ๊ฐ์ฒด - ๊ด๊ณ ๋งคํ) |
SQL ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ์ง์ DB๋ฅผ ์กฐ์ | ๊ฐ์ฒด์ DB์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋งคํ - SQL ์ฟผ๋ฆฌ๊ฐ ์๋ ๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ค. - ๊ฐ์ฒด๊ฐ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL์ ์๋์ผ๋ก ์์ฑํ๋ค. - Persistant API |
MyBatis, JDBC Template | JPA, Hibernate |
โจ JPA ๋์ ๊ณผ์
JPA๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ JDBC ์ฌ์ด์์ ๋์ํ๋ค.
๊ฐ๋ฐ์๊ฐ JPA๋ฅผ ์ฌ์ฉํ๋ฉด, JPA ๋ด๋ถ์์ JDBC API๋ฅผ ์ฌ์ฉํ์ฌ SQL์ ํธ์ถ → DB์ ํต์ ํ๋ค.
MemberDAO ์์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ์ถ์ ๋ ๊ฐ๋ฐ์๋ JPA์ Member ๊ฐ์ฒด๋ฅผ ๋๊ธด๋ค.
์ํฐํฐ ๋ถ์ → INSERT SQL ์์ฑ → JDBC API๋ฅผ ์ฌ์ฉํ์ฌ SQL์ DB์ ์ ์ก
์ฐพ๊ณ ์ ํ๋ Member์ PK๊ฐ์ JPA์ ๋๊ธด๋ค.
์ํฐํฐ ๋ถ์ → SELECT SQL ์์ฑ → JDBC API๋ฅผ ์ฌ์ฉํ์ฌ SQL์ DB์ ์ ์ก → DB ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ด
→ ๊ฒฐ๊ณผ (ResultSet)๋ฅผ ๊ฐ์ฒด์ ๋ชจ๋ ๋งคํ
(SQL ์ฟผ๋ฆฌ๋ฅผ JPA๊ฐ ๋ง๋ค์ด ์ฃผ๋ฏ๋ก Object์ RDB ๊ฐ์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํ ์ ์์)
โจ JPA ํน์ง
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๊ณ ๊ฐ์ฒด์งํฅ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฐ ๊ฐ์ฒด์ DB ํ ์ด๋ธ ์ฌ์ด์ ๋งคํ ์ค์ ์ ํตํด SQL์ ์์ฑํ๋ค.
- ๊ฐ์ฒด๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ JPQL(Java Persistence Query Language)๋ฅผ ์ง์ํจ
- JPA๋ ์ฑ๋ฅ ํฅ์์ ์ํด ์ง์ฐ ๋ก๋ฉ์ด๋ ์ฆ์ ๋ก๋ฉ๊ณผ ๊ฐ์ ๋ช๊ฐ์ง ๊ธฐ๋ฒ์ ์ ๊ณตํ๋๋ฐ ์ด๊ฒ์ ์ ํ์ฉํ๋ฉด SQL์ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ ์ฑ๋ฅ์ ์ป์ ์ ์๋ค.
โจ JPA ๋ฅผ ์ฌ์ฉํด์ผํ๋ ์ด์
- SQL ์ค์ฌ์ ์ธ ๊ฐ๋ฐ์์ ๊ฐ์ฒด ์ค์ฌ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค
- ์์, ์ฐ๊ด๊ด๊ณ, ๊ฐ์ฒด๊ทธ๋ํ ํ์ ๋ฑ์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค๋ค.
- ์ ์ง๋ณด์๊ฐ ์ฝ๋ค (๊ธฐ์กด์๋ ๋ชจ๋ SQL์ ์์ ํ์ง๋ง JPA๋ ํ๋๋ง ์ถ๊ฐํ๋ฉด ๋๋ค. SQL์ JPA๊ฐ ์ฒ๋ฆฌํจ)
- ๊ด๊ณํ ๋ฐ์ดํฐ์ด์ค๋ ๊ฐ์ ๊ธฐ๋ฅ๋ ๋ฒค๋๋ง๋ค ์ฌ์ฉ๋ฒ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์๋ฅผ ๋ค์๋ฉด ๊ฒ์๋ฌผ ํ์ด์ง์ฒ๋ฆฌ ์ฟผ๋ฆฌ๋ฌธ์ DB๋ง๋ค ๋ฌ๋ผ์ ์ฌ์ฉ๋ฒ์ ๊ฐ๊ฐ ๋ฐฐ์์ผ ํ์ง๋ง, JPA๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ DB์ฌ์ด์ ์ถ์ํ๋ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์ ๊ณตํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ DB์ ์ข ์๋์ง ์๋๋ค.