JPA ์ฑ
Last updated
Was this helpful?
Last updated
Was this helpful?
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ ์ฑ ์ ๊ตฌ๋งคํด์ ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๋ ๊ณณ
JPA๊ฐ ์ค์ํ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ์ด๋ฒ์ ๊ตฌ๋งคํด์ ๊ณต๋ถ์ค
๋ชจ๋ ์ถ์ฒ๋ ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ ์ฑ ๊ณผ ๋ณธ์ธ ๋
ORM : Object Relational Mapping์ ์ค์ธ๋ง๋ก ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ์ฐจ์ด์ ์ ํด๊ฒฐํด์ฃผ๋ ํ๋ ์์ํฌ
JPA : Java Persistence API๋ก ์์์ ์ธ๊ธํ ์๋ฐ ์ง์์์ ์ฌ์ฉํ๋ ORM ํ์ค ๊ธฐ์
JPA๋ ๋ฐ๋ณต์ ์ธ CRUD SQL์ ์์์ ์ฒ๋ฆฌํด์ฃผ๊ณ ๊ฐ์ฒด ๋ชจ๋ธ๋ง๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ์ฐจ์ด์ ๋ ํด๊ฒฐํด์ค๋ค.
JPA๋ ์คํํ๋ ์์ ์ SQL์ ๋ง๋ค์ด์ ์คํํ๋ค.
์๋ฐ๋ก ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ JDBC(์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๋๋ก ํ๋ ์๋ฐ API)๋ฅผ ์ฌ์ฉํด์ SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฌํ๋ ๋ฐฉ์์ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ๋ค.
ํ์ง๋ง ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์์ด ๋ค๋ฅด๋ค. ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ์๋ ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ฐ์ดํฐ ์ค์ฌ์ผ๋ก ๊ตฌ์กฐํ๋์ด ์๊ธฐ๋ ํ๋ฉฐ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์๊ฐํ๊ธฐ์๋ ์ฝ์ง ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋จ์์๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ ๋ฒจ์์ db๋ฅผ ์กฐํํ๊ณ ์ด์ด์ ธ ๋์ค๋ ๋ฐฉ์์ด๋ค.
ORM ํ๋ ์์ํฌ๋ ๊ฐ์ฒด์ ํ ์ด๋ธ์ ๋งคํํด์ ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๊ฐ๋ฐ์ ๋์ ํด๊ฒฐํด์ค๋ค. ๋ฐ๋ผ์ ์ฌ์ฉํ๋ ์ฌ๋ ์ ์ฅ์์๋ ๊ฐ์ฒด ์ธก๋ฉด์์ ๋์ฑ ์ ๊ตํ ๊ฐ์ฒด ๋ชจ๋ธ๋ง์ด ๊ฐ๋ฅํ๊ณ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋๋ก ๋ชจ๋ธ๋งํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด 2๊ฐ๋ฅผ ๋งคํํด์ผ ํ๋ ๋ฐฉ๋ฒ๋ง์ ๋ช ์ํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ORM ํ๋ ์์ํฌ์๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ๊ฐ ์กด์ฌํ๋๋ฐ, ๊ฐ์ฅ ๋ง์ด ํํ๊ฒ ์ฌ์ฉํ๋๊ฑด Hibernate ํ๋ ์์ํฌ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.
์๋ฐ ORM ๊ธฐ์ ์ ๋ํ API ํ์ค ๋ช ์ธ
= ์ฌ๋ฌ๊ฐ์ง ์ธํฐํ์ด์ค๋ฅผ ๋ชจ์๋ ๊ฒ
๋ฐ๋ผ์ ์ด๊ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JPA๋ฅผ ๊ตฌํํ ORM ํ๋ ์์ํฌ๋ฅผ ์ ํํด์ผํ๊ณ ๊ฒฐ๊ตญ์ JPA๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ตฌํ์ฒด์ ๋ํ๋ก๋ Hibernate๊ฐ ์กด์ฌํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋์ ์คํ๋ง ๋ฐ์ดํฐ jpa์์๋ genericDao๋ผ๋ ์ปค์คํ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํด์ค๋ค. ์ด๊ฒ์ ๋ฉ์๋์ ๋ช ์นญ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค.
์ ์ด๊ฑธ ์ฌ์ฉํ๋๊ฐ?
์์ฐ์ฑ : JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด์ ์๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒ ์ฒ๋ผ ์ด๋ ต์ง ์๊ฒ db์ ์ ๊ทผํ๋ฉฐ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต์ ์ธ crud์ ๊ฐ์ sql์ ์ง์ ์์ฑํ์ง ์์ ๊ทธ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ๋ฅผ ๋ฐ์ดํฐ ์ค์ฌ์ด ์๋๋ผ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง
์ ์ง๋ณด์ : ์ํฐํฐ์ ํ๋๊ฐ ์ถ๊ฐ๋๋ค๊ณ ๊ฐ์ ํด๋ณด์์๋ ๊ณผ๊ฑฐ์๋ ์ด์ ๊ด๋ จ๋ crud์ ๊ฐ์ JDBC API๋ฅผ ๋ชจ๋ ์์ ํด์ค์ผํ์ง๋ง ์ด์ ๋ ๊ทธ๋ฐ JDBC API์ฝ๋๋ฅผ JPA๊ฐ ์์์ ์ฒ๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง
ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ํด๊ฒฐ
์ฑ๋ฅ : JPA๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ db์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ธ ๋ฉด์์ ์ต์ ํ๋ฅผ ์๋ํด๋ณผ๋ง ํ๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ์ถ์ํ์ ๋ฒค๋ ๋ ๋ฆฝ์ฑ : ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฐ๊ตญ ์ฒ์์ ์ ํํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ์๋๊ธฐ ๋ง๋ จ์ด๋ค. ํ์ง๋ง JPA๋ ์ ํ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ด์์ ์ถ์ํ๋ ์ ๊ทผ๊ณ์ธต์ ์ ๊ณตํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ์๋์ง ์๋๊ฒ์ด ์ฅ์ ์ด๋ค -> ๊ทธ๋์ ๋ฐฐ๋ฌ๋ํ์ฌ ์ฐ๋ ํ ์คํธ ํ์ด์ง ํ๋ก์ ํธ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ก์ปฌ์์๋ h2๋ฅผ ์ฌ์ฉํด์ ๋ก์ปฌ๋ก ๊ตฌ์ฑํด์ ์๋๋์ง ํ์ธํ๊ณ ์๋ฒ์ ์ฌ๋ฆฌ๊ณ ๋์๋ ์ค๋ผํด์ ์ฌ์ฉํด์ ๋๋น๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฌํ ๊ฒ์ด JPA๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ฅ์ ์ด๋ค.
JPA๋ผ๋ ํ์ค ๋๋ถ์ ํน์ ๊ตฌํ ๊ธฐ์ ์ ๋ํ ์์กด๋๋ฅผ ์ค์ผ ์ ์๊ณ ๋ค๋ฅธ ๊ตฌํ ๊ธฐ์ ๋ก ์์ฝ๊ฒ ์ด๋ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์.