728x90
๐ปJPA๋?
- ์๋ฐ ํผ์์คํด์ค API๋๋ ์๋ฐ ์ง์์ฑ API(Java Persistence API, JPA)๋ ์๋ฐ ํ๋ซํผ SE์ ์๋ฐ ํ๋ซํผ EE๋ฅผ ์ฌ์ฉํ๋ ์์ฉํ๋ก๊ทธ๋จ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ฆฌ๋ฅผ ํํํ๋ ์๋ฐ API์ด๋ค.
- ํ์ฌ ์๋ฐ ์ง์์ ORM ๊ธฐ์ ํ์ค์ผ๋ก, ์ธํฐํ์ด์ค์ ๋ชจ์์ด๋ค.
- ์ค์ ๋ก ๋์ํ๋ ๊ฒ์ ์๋๋ค
- JPA์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ์คํ์์ค๊ฐ Hibernate์ด๋ค.
- ๊ณผ๊ฑฐ์ ์๋ฐ ํ์ค์ EJB์๋ค.๊ทธ๋ฌ๋ EJB๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋งค์ฐ ์ง์ ๋ถํ๊ณ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์์๋ค.
๐ORM
- ( Object-relational mapping (๊ฐ์ฒด ๊ด๊ณ ๋งคํ))์๊ฐ์ฒด๋ ๊ฐ์ฒด๋๋ก ์ค๊ณํ๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋๋ก ์ค๊ณํ๋ค.
- ORM ํ๋ ์์ํฌ๊ฐ ์ค๊ฐ์์ ๋งคํํด์ฃผ๊ณ ๋์ค์ ์ธ ์ธ์ด์๋ ๋๋ถ๋ถ ORM ๊ธฐ์ ์ด ์กด์ฌํ๋ค.
- ORM์ ๊ฐ์ฒด์ RDB ๋ ๊ธฐ๋ฅ ์์ ์๋ ๊ธฐ์ ์ด๋ค.
๐ปJPA ํน์ง
- ์๋ฐ ๊ฐ์ฒด์ DB ํ
์ด๋ธ ์ฌ์ด์ ๋งคํ ์ค์ ์ ํตํด SQL์ ์์ฑํฉ๋๋ค. ๋ณดํต JDBC๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ์ฝ๋๊ฐ ๋น์ทํ ํํ๋ก ๋ฐ๋ณต๋๊ฒ ๋ฉ๋๋ค.
DB์ปค๋ฅ์ ์ ๊ตฌํ๊ณ , ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๊ณ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ์๋ฐ ๊ฐ์ฒด์ ์ค์ ํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช ์ด ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝ์ด ๋๋ค๋ฉด ๊ด๋ จ๋์ด ์๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ ํด์ผ ํ ๊ฒ์ธ๋ฐ JPA๋ ๋งคํ ์ค์ ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.
๋ํ ์คํํ ์ฟผ๋ฆฌ๋ฅผ ์๋ฐ ๊ฐ์ฒด์ ์ค์ ํด์ค์ผํ๋๋ฐ JPA๋ ์๋ฐ ๊ฐ์ฒด๋ก ๋งคํํ์ฌ ๊ฒ์ํ ์ ์์ต๋๋ค. ์ฆ ์ ์ง๋ณด์๊ฐ ์ฝ์ต๋๋ค. - ๊ฐ์ฒด๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ JPQL(Java Persistence Query Language)๋ฅผ ์ง์ํฉ๋๋ค.
- JPA๋ ์ฑ๋ฅ ํฅ์์ ์ํด ์ง์ฐ ๋ก๋ฉ์ด๋ ์ฆ์ ๋ก๋ฉ๊ณผ ๊ฐ์ ๋ช๊ฐ์ง ๊ธฐ๋ฒ์ ์ ๊ณตํ๋๋ฐ ์ด๊ฒ์ ์ ํ์ฉํ๋ฉด SQL์ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค. ํ์ง๋ง ์๋ชป์ดํดํ๊ณ ์ฌ์ฉํ๋ JPA๋ ์ฑ๋ฅ์ ํฌ๊ฒ ๊ฐ์์ํฌ ์ ์์ต๋๋ค.
๐JPA๋ฅผ ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
1. SQL ์ค์ฌ์ ์ธ ๊ฐ๋ฐ์์ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ
2. ์์ฐ์ฑ
- JPA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ง์น Java Collection์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์๋ค ๋นผ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ ๊ฒ์ด๋ค.
- ๊ฐ๋จํ CRUD
- ์ ์ฅ: em.persist(member)
- ์กฐํ: Member member = em.find(memberId)
- ์์ : member.setName("๋ณ๊ฒฝํ ์ด๋ฆ")
- ์ญ์ : em.remove(member)
- ํนํ, ์์ ์ด ๊ต์ฅํ ๊ฐ๋จํ๋ค.๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๊ทธ๋ฅ ์์์ DB์ UPDATE Query๊ฐ ๋๊ฐ๋ค
3. ์ ์ง๋ณด์
- ๊ธฐ์กด: ํ๋ ๋ณ๊ฒฝ ์ ๋ชจ๋ SQL์ ์์ ํด์ผ ํ๋ค.
- JPA: ํ๋๋ง ์ถ๊ฐํ๋ฉด ๋๋ค. SQL์ JPA๊ฐ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์๋ ๊ฒ์ด ์๋ค.
๐REFERENCE
- https://ko.wikipedia.org/wiki/์๋ฐ_ํผ์์คํด์ค_API
- zttps://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html
- https://dev-troh.tistory.com/150
728x90
'Dev > SpringData' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] DTO ์ฌ์ฉ๋ฒ์์ ๋ํ์ฌ (0) | 2021.11.12 |
---|---|
[JPA]Fetch.Lazy๋ฅผ ์ค์ ํ์๋ @OneToOne์์ ๋ฐ์ํ๋ ์ด์ (0) | 2021.10.13 |
[JPA] ์ํฐํฐ ๋งคํ (0) | 2021.09.10 |
Querydsl ์ค๋ฅ (querydsl error cannot find symbol) (0) | 2021.09.02 |
[JPA]์์์ฑ ๊ด๋ฆฌ,์์์ฑ ์ปจํ ์คํธ (0) | 2021.07.19 |