JPA
JPA๋?
- JPA๋ Java Persistence API. ์๋ฐ์ ์์์ฑ(์ง์์ฑ) APIโฆ ์กฐ๊ธ๋ง ๋ ์์๋ณด์.
- JAVA APP <-> JDBC ์ฌ์ด์์ ๋์ํ๋ค.
- JPA๋ฅผ ํตํด์ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ๋๋ฌธ์ JDBC๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
- ์์ ํน์ง์ผ๋ก ์ธํด์ SQL ์ค์ฌ์ ๊ฐ๋ฐ์์ ๊ฐ์ฒด ์ค์ฌ์ ๊ฐ๋ฐ๋ก ๋ฐ๋๊ฒ ๋๋ค.
- ํ์ฌ ์๋ฐ ์ง์์ ORM ๊ธฐ์ ํ์ค
- JPA๋ ORM์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ์๋ ๊ฒ์ด๊ณ , JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Hibernate, EclipseLink, DataNucleus์ ๊ฐ์ ORM์ ์ฌ์ฉํ๋ค.
ORM (Object-relational Mapping)
- ๊ฐ๋ฐํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ DB์ ํ ์ด๋ธ์ด ๋งคํ๋๋ ๊ฒ์ด๋ค.
-
java์๋ง ์๋ ๊ฒ์ ์๋๊ณ , ๋ค์ํ ์ธ์ด/ํ๋ ์์ํฌ์๋ ์๋ค.
<example> 1. DB SELECT * FROM members WHERE members.memberId = 1 2. ORM member = member.findAllByMemberId(1);
- DB query๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ , ๋ฉ์๋๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ผ๋, ์์ฐ์ฑ์ด ๋งค์ฐ ๋์์ง๋ค.
- ํ์ง๋ง, query๊ฐ ๋ณต์กํด์ง๋ฉด, ORM๋ง์ผ๋ก ํํํ๋๋ฐ ํ๊ณ๊ฐ ์๊ณ , ๋ฉ์๋ ์ด๋ฆ์ด ์์ฒญ๋๊ฒ ๊ธธ์ด์ง ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
JPA ์ด์ ์ ๋ฌธ์ ์
- Mybatis์์๋ SQL ๋ฐ๋ณต ์์ ์ด ๋งค์ฐ ๋ง์๋ค. ํ ์ด๋ธ์ด ์ข ์์ ๋๋ฉด, ์ด์ ๊ด๋ จ๋ ๋ชจ๋ DAO์ SQL์ ์์ ํ๋ค.
- DAO์ ํ ์ด๋ธ์ด ๊ฐํ ์์กด์ฑ์ ๊ฐ๊ณ ์์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ฐ์ฒด ๋ชจ๋ธ๋ง๋ณด๋ค ๋ฐ์ดํฐ ์ค์ฌ ๋ชจ๋ธ๋ง(ํ ์ด๋ธ ์ค๊ณ)์ ์ฐ์ ์ํ๋ค.
- ๊ฐ์ฒด์งํฅ์ ์ฅ์ (์ถ์ํ, ์บก์ํ, ์ ๋ณด์๋, ์์, ๋คํ์ฑ)์ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ๋จ์ํ ๋ฐ์ดํฐ ์ ๋ฌ ๋ชฉ์ (VO, DTO)์๋ง ์ฌ์ฉํ๋ค.
์ฆ, ๊ฐ์ฒด์งํฅ ๊ฐ๋ฐ์๋ค์ด ๊ฐ๋ฐํ๊ณ ์๋ ๋ฐฉ๋ฒ์ด ์ ํ ๊ฐ์ฒด ์งํฅ์ ์ด์ง ์๋ค๋ ๊ฒ์ ๋๋ผ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๊ฐ์ฒด์ ํ ์ด๋ธ์ ๋งคํ ์์ผ์ฃผ๋ ORM์ด ์ฃผ๋ชฉ ๋ฐ๊ธฐ ์์ํ๊ณ , ์๋ฐ ์ง์์์๋ JPA๋ผ๋ ํ์ค ์คํ์ด ์ ์ ๋์๋ค.
Hibernate
์์ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํด์ค ๊ฒ์ด Hibernate. ๋ฌผ๋ก ์ฅ๋จ์ ์ ์๋ค.
์ฅ์
-
์์ฐ์ฑ
- SQL์ ์ง์ ์ฌ์ฉ X -> ๋ฉ์๋ ์ฌ์ฉ -> SQL ๋ฐ๋ณต ์์
X
- ๋ค๋ง, SQL์ ์ง์ ์ฌ์ฉํ์ง ์์ ๋ฟ SQL์ ์ ์์์ผ JPA๋ฅผ ์ ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
- Hibernate๊ฐ ์คํํ ์ฟผ๋ฆฌ๋ฅผ ์ฝ์๋ก ๋ณผ ์ ์๋๋ฐ, SQL์ ์ ์์์ผ ์ฟผ๋ฆฌ๊ฐ ์๊ฐ๋๋ก ์ํ๋์๋์ง ํ์ธํ ์ ์๋ค.
- SQL์ ์ง์ ์ฌ์ฉ X -> ๋ฉ์๋ ์ฌ์ฉ -> SQL ๋ฐ๋ณต ์์
X
-
์ ์ง๋ณด์
- ํ ์ด๋ธ์ด ์์ ๋์ ๊ฒฝ์ฐ, ๊ด๋ จ๋ ๊ท์ฐฎ์ ์ผ๋ค์ JPA๊ฐ ๋์ ํด์ค์ ์ ์ง๋ณด์๊ฐ ์ข๋ค.
-
๋ค์ํ DB์ ํธํ ๊ฐ๋ฅ
- ์ฌ๋ฌ DB ๋ฒค๋( MySQL, Oracle ๋ฑ.. )๋ง๋ค SQL ์ฌ์ฉ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ ์ฒ์ ์ ํํ DB๋ฅผ ๋์ค์ ๋ฐ๊พธ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต.
- ๊ทธ๋ฐ๋ฐ JPA๋ ์ถ์ํ๋ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํน์ ๋ฒค๋์ ์ข ์์ ์ด์ง ์๋ค.
- ์ฆ, ์ค์ ํ์ผ์์ JPA์๊ฒ ์ด๋ค DB๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ์๋ ค์ฃผ๊ธฐ๋ง ํ๋ฉด ์ผ๋ง๋ ์ง DB๋ฅผ ๋ฐ๊ฟ ์๊ฐ ์๊ฒ ๋๋ค.
๋จ์
-
์ฑ๋ฅ
- ๋ฐ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค JPA ๋ด๋ถ์ ์ผ๋ก ๋์์ด ์ถ๊ฐ์ ์ผ๋ก ์์ผ๋ฏ๋ก ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
- ๊ณผ๊ฑฐ ORM์ ์ฑ๋ฅ์ด ์ ๋ง ๋ง์ด ์ ์ข์์ผ๋, ํ์ฌ๋ ๋ง์ด ๋ฐ์ ํ์์.
-
์ธ๋ฐํจ
- ๋ฐ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ์ ๋นํด ์ธ๋ฐํจ์ด ๋จ์ด์ง๋ค. JPA๋ฅผ ์๋ชป ์ฌ์ฉํ์ ๊ฒฝ์ฐ ์๋ํ๋๋ก ๋์ํ์ง ์์ ์ ์๋ค.
- ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ๋ฉ์๋ ํธ์ถ๋ง์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ํ๋ค๋ค.
- JPA์์ ๋ค๋ฃจ๊ธฐ ํ๋ ๊ฒ๋ค์ ๋ณด์ํ๊ธฐ ์ํด JPQL, nativeQuery ๋ฑ์ ์ง์ํ๋ค.
-
๋ฌ๋์ปค๋ธ
- ๊ธฐ์กด์ ๋นํด ๋ฐฐ์์ผํ ๊ฒ์ด ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ