๐[Spring] JPA๋ฅผ ์ฌ์ฉํ๋ ์ด์ .
- JPA(Java Persistence API) ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด ๊ฐ์ ์ํธ์์ฉ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ๊ฒ ์ ์ฉํ๊ธฐ ์ํด์ ์ ๋๋ค.
- JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋จ์ํํ๊ณ , ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กด์ ์ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ๋ ๋์ , ๊ฐ์ฒด ๋ชจ๋ค์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๐โโ๏ธ ์ํํธ์จ์ด ๊ณตํ์์์ ๋ชจ๋
๐โโ๏ธ ๋ชจ๋๊ณผ ์ปดํฌ๋ํธ๋ฅผ ๋ ๊ณ ๋ธ๋ก์ ๋น์ ํด๋ณด๋ฉด?!
1๏ธโฃ JPA๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ ์ด์ .
1. ๊ฐ์ฒด-๊ด๊ณ ๋งคํ(ORM, Object-Relational Mapping) ์ง์.
- JPA๋ ORM(Object-Relational Mapping) ํ์ค์ ์ ๊ณตํฉ๋๋ค.
- ORM์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ์ ๋ณํ์ ์๋ํํ ์ ์์ต๋๋ค.
- ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ(row)์ ๊ฐ์ฒด๋ก ๋งคํํ๊ณ , ๊ฐ์ฒด์ ์์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด(column)๊ณผ ์ฐ๊ฒฐํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ SQL ์ฟผ๋ฆฌ ์์ฑ์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ , ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ฑ.
- JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐด๋์ ์ข ์์ ์ด์ง ์์ ์ถ์ํ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค.
- JPA๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ์ง ์์ผ๋ฏ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ต์ฒดํ๊ฑฐ๋ ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ํฌ๊ฒ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, MySQL์์ PostgreSQL๋ก ์ ํํด๋ JPA์ ์ค์ ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ถ๋ถ์ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐โโ๏ธ DIP์ ์ ์์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ๊ณผ โ์ถ์ํโ์ ๊ฐ๋ ์ ์ฐจ์ด์ .
3. SQL ์์ฑ ๋ถ๋ด ๊ฐ์.
- JPA๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ ์ฅ, ์์ , ์ญ์ ํ๋ ๋ฐ ํ์ํ SQL ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ง์ SQL์ ์์ฑํ์ง ์์๋ ๋๊ณ , ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์์ผ๋ฉฐ, ๋ณต์กํ SQL ์์ฑ์ ๋ถ๋ด์ ์ค์ผ ์ ์์ต๋๋ค.
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๊ด๋ฆฌ.
- JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ๊ฑฐ๋ ๊ฐฑ์ ํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ๊ณ , ์๋ก์ด ์ํฐํฐ(๊ฐ์ฒด)๋ฅผ ์ถ๊ฐํ๋ฉด ๊ทธ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
5. ์บ์ฑ ์ง์.
- JPA๋ 1์ฐจ ์บ์์ 2์ฐจ ์บ์๋ฅผ ์ ๊ณตํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
- 1์ฐจ ์บ์๋ ์์์ฑ ์ปจํ ์คํธ(Entity Manager)๊ฐ ๊ด๋ฆฌํ๋ ์บ์๋ก, ๋์ผํ ํธ๋์ญ์ ๋ด์์ ์ด๋ฏธ ์กฐํ๋ ์ํฐํฐ๋ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํํ์ง ์๊ณ ์บ์์์ ๊ฐ์ ธ์ต๋๋ค.
- 2์ฐจ ์บ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ๊ณต์ ๋๋ ์บ์๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐ ๋์์ ์ค๋๋ค.
6. ํธ๋์ญ์ ๊ด๋ฆฌ.
- JPA๋ ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํฉ๋๋ค.
- JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด์ฃผ๊ธฐ ๋๋ฌธ์, ํธ๋์ญ์ ์ด ์๋ฃ๋๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋๊ฑฐ๋ ๋กค๋ฐฑ๋ฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
7. Lazy Loading๊ณผ Eager Loading.
- JPA๋ ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์ง์ฐ ๋ก๋ฉ(Lazy Loading) ํ๊ฑฐ๋ ์ฆ์ ๋ก๋ฉ(Eager Loading) ํ ์ ์์ต๋๋ค.
- Lazy Loading์ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋๋ง ๊ฐ์ ธ์ค๊ณ , Eager Loading์ ์ฆ์ ๋ชจ๋ ์ฐ๊ด ๋ฐ์ดํฐ๋ฅผ ํ๊บผ๋ฒ์ ๊ฐ์ ธ์ต๋๋ค.
- ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
8. JPQL(Java Persistence Query Language).
- JPA๋ JPQL(Java Persistence Query Language) ์ด๋ผ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- JPQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๋์ ์ํฐํฐ ๊ฐ์ฒด ๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ค๋๋ค.
- ์ด๋ฅผ ํตํด SQL์ฒ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ์์ ์ธ ์ฟผ๋ฆฌ ๋์ , ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, SQL์ด ์๋ ๊ฐ์ฒด ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ JPQL ์ฟผ๋ฆฌ
SELECT u FROM User u WHERE u.age > 20
- ์ ์ฟผ๋ฆฌ๋ User ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ์ง ์์ต๋๋ค.
9. ์ ์ฐํ ๊ด๊ณ ๋งคํ.
- JPA๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๊ณ๋ฅผ ๊ฐ์ฒด๋ก ๋งคํํ๋ ๋ฐฉ๋ฒ์ ์ง์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, 1๋1, 1๋๋ค, ๋ค๋์ผ, ๋ค๋๋ค ๊ด๊ณ๋ฅผ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ํํํ ์ ์์ผ๋ฉฐ, ์ธ๋ ํค(foreign key)์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๊ณ๋ฅผ ๊ฐ์ฒด ๊ฐ์ ์ฐธ์กฐ๋ก ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
10. ํ์คํ๋ API.
- JPA๋ ์๋ฐ EE์ ํ์ค API์ด๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ๊ตฌํ์ฒด๋ค(Hibernate, EclipseLink ๋ฑ)์์ ๋์ผํ API๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ด๋ ๊ฐ๋ฐ์๋ค์ด ํน์ ๊ตฌํ์ฒด์ ์ข ์๋์ง ์๊ณ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํด์ค๋๋ค.
2๏ธโฃ ๊ฒฐ๋ก .
- JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์์ด, ๊ฐ๋ฐ์๋ SQL ์์ฑ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ์์ฑ์ ์ค์ด๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์์ต๋๋ค.
- ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ฑ, ํธ๋์ญ์ ๊ด๋ฆฌ, ์บ์ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- JPQL๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ํตํด ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๋ฐ์ดํฐ ์กฐํ ๋ฐ ๊ด๋ฆฌ๋ฅผ ํ ์ ์์ผ๋ฉฐ, ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ๋งคํํ ์ ์๋ ์ฅ์ ๋ ์ ๊ณตํฉ๋๋ค.
JPA๋ ์ถ์ํ ๊ณ์ธต์ ์ ๊ณตํ์ฌ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๊ฐ๊ทน์ ์ค์ด๊ณ , ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ผ ์ ์๋ ๋๊ตฌ์ ๋๋ค.