๐ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐจ์ด
`๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํจ๋ฌ๋ค์์ด ๋ค๋ฅด๋ค`
1. ์์
: ๊ฐ์ฒด๋ ์์ ๊ด๊ณ๊ฐ ์์ผ๋, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ๊ด๊ณ๊ฐ ์๋ค.
2. ์ฐ๊ด๊ด๊ณ
: ๊ฐ์ฒด๋ ์๋ฐฉํฅ์ผ๋ก ์ฐธ์กฐ๊ฐ ๋์ด์์ง ์๋ค. (์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ getter๋ก ๊ฐ์ ธ์ฌ ์ ์์)
: ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ Key๊ฐ์ผ๋ก join์ ํด์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์์ด ์๋ฐฉํฅ์ผ๋ก ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
3. ๋ฐ์ดํฐ ํ์
4. ๋ฐ์ดํฐ ์๋ณ ๋ฐฉ๋ฒ
๐ค ์ฐจ์ด์ ๋ค๋ก, ๊ฐ์ฒด ๋ชจ๋ธ๋ง์ ํ ์๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งคํ ํ๋ ์์ ์ด ๋์ด๋๋ค.
โ ์๋ฐ์ ์ปฌ๋ ์ ์ฒ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์๊น?? - JPA!
๐ JPA(Java persistence API)
์๋ฐ ์ง์์ ORM ๊ธฐ์ ํ์ค์ผ๋ก, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํด์ค๋ค.
โ ORM(Object-relational mapping - ๊ฐ์ฒด ๊ด๊ณ ๋งคํ)
- ๊ฐ์ฒด๋ ๊ฐ์ฒด๋๋ก, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋๋ก ์ค๊ณ
- ORM ํ๋ ์์ํฌ๊ฐ ์ค๊ฐ์์ ๋งคํ
โ JPA ๋์
- jpa๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ jdbc ์ฌ์ด์์ ๋์ํ๋ค.
- jpa์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด, JPA๋ Entity ๋ถ์ํด ํด๋น SQL์ ์์ฑํ๋ค.
- SQL ์์ฑ ํ JDBC API๋ฅผ ์ฌ์ฉํด, ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ๋ฐ๋๋ค.
๐ค [์ค์] JPA๋ query๋ฅผ ๊ฐ๋ฐ์๋ค์ด ์์ฑํ์ง ์๊ณ , jpa์์ ๋ง๋ค์ด์ค๋ค๋ ๊ฒ๊ณผ, ํจ๋ฌ๋ค์์ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํด ์ค๋ค.
๐ JPA๋ฅผ ์ ์ฌ์ฉํด์ผ ํ ๊น?
1. ์์ฐ์ฑ
- JPA๊ฐ CRUD๋ฅผ ์ง์ํด์ค๋ค.
- ์ ์ฅ, ์กฐํ, ์์ , ์ญ์
2. ์ ์ง๋ณด์
: ๊ธฐ์กด์๋ ํ๋ ๋ณ๊ฒฝ์ ๋ชจ๋ SQL์ ์์ ํด์ผํ๋ค.
- JPA๋ ํ๋๋ง ์ถ๊ฐํ๋ฉด, SQL์ jPA๊ฐ ์ฒ๋ฆฌํด์ค๋ค.
3. JPA์ ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ํด๊ฒฐ
4. JPA์ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฅ
โ 1์ฐจ ์บ์์ ๋์ผ์ฑ ๋ณด์ฅ
String memberId = "100";
Member m1 = jpa.find(Member.class, memberId);
Member m2 = jpa.find(Member.class, memberId);
println(m1 == m2);
- m2๋ m1์ ๋ณต์ ํด์ค๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
โ ํธ๋์ญ์ ์ ์ง์ํ๋ ์ฐ๊ธฐ ์ง์ฐ(transactional write-behind)
- ํธ๋์ญ์ ์ ์ปค๋ฐํ ๋ INSERT SQL์ ๋ชจ์์ ๋ณด๋ธ๋ค.
- (ํ๋ํ๋ ๋ณด๋ด๋ฉด ํ๋์ฉ ๋คํธ์ํฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋ ์๋.)
โ ์ง์ฐ ๋ก๋ฉ(Lazy Loading) / ์ฆ์ ๋ก๋ฉ
- ์ง์ฐ ๋ก๋ฉ : ๊ฐ์ฒด๊ฐ ์ค์ ์ฌ์ฉ๋ ๋ ๋ก๋ฉ
- ์ฆ์ ๋ก๋ฉ : JOIN SQL๋ก ํ๋ฒ์ ์ฐ๊ด๋ ๊ฐ์ฒด๊น์ง ๋ฏธ๋ฆฌ ์กฐํ
๐ค ์ง์ฐ ๋ก๋ฉ๊ณผ, ์ฆ์ ๋ก๋ฉ ์ต์ ์ ๋ฐ๊ฟ์ ์ธ ์ ์๋ค.
REFERENCE
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
'๊ณต๋ถ > ORM,JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] JPA ์์, ํ๋ก์ ํธ ์ค์ ๋ฐ H2,JPA ์ค์ (0) | 2021.11.22 |
---|