728x90
JPA ๊ฐ์
Persistence
Java ๊ฐ์ฒด(์ ํฌํจ๋์ด์๋ ๋ฐ์ดํฐ)๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด ์ ์ฅ ๋ฐ ๊ด๋ฆฌํจ์ผ๋ก์จ ๊ฐ์ฒด์ ์์์ฑ์ ๋ณด์ฅํจ
Java Persistence API
- Object-Relational Mapping(ORM) ์ ์คํํ๊ธฐ ์ํ Java ํ์ค API
- Entity๋ก ์ ์๋ Java ๊ฐ์ฒด์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฌ์ด์ mapping ๋ฐฉ๋ฒ์ ์ค์ (annotation ์ด์ฉ)
- ์ค์ ๋ Mapping์ ๋ฐ๋ผ Java๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅ, ์์ , ์ญ์ ๊ฒ์ ํ ์ ์๋ Interface ์ ๊ณต -> EntityManager
- JDBC API๋ Data Mapper (ex: MyBatis)์ ๋์
- Java ์ค์ฌ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
Persistence Provider (JPA Provider)
- JPA์ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ex) Hibernate, DataNucleus, EclipseLink ๋ฑ
- SQL๋ฌธ ์๋ ์์ฑ ๋ฐ ์คํ
๊ตฌ์ฑ์์
Entity
ORM์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์์ ์ผ๋ก ์ ์ฅ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด
- ์์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ POJO๊ฐ์ฒด(Plain Old Java Object)
- POJO๋?
- ๊ฐ์ฒด์งํฅ์ ์ธ ์๋ฆฌ์ ์ถฉ์คํ๋ฉด์ ํ๊ฒฝ๊ณผ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ํ์์ ๋ฐ๋ผ ์ฌํ์ฉ๋ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ ์ค๋ธ์ ํธ๋ฅผ ๋งํ๋ค. ๊ทธ๋ฌํ POJO์ ์ดํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ๋ก์ง๊ณผ ๊ธฐ๋ฅ์ ๋ด์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ POJO ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
- ์กฐ๊ฑด
- ํน์ ๊ท์ฝ์ ์ข ์๋์ง ์๋๋ค. (์๋ฐ ์ธ์ด๊ณผ ๊ผญ ํ์ํ API ์ธ์๋ ์ข ์๋์ง ๋ง์์ผํ๋ค).
- ํน์ ํ๊ฒฝ์ ์ข ์๋์ง ์๋๋ค. (ํน์ ๊ธฐ์ ์ ํ๋ ์์ํฌ๋ ์๋ฒ์์๋ง ๋์๊ฐ๋ฅํ ์ฝ๋๋ผ๋ฉด POJO๋ผ ํ ์ ์๋ค. HttpServletRequest, HttpSession, ์บ์์ ๊ด๋ จ๋ API ๋ฑ์ด ๋ฑ์ฅํด์๋ ์๋๋ค.)
- ๊ฐ์ฒด์งํฅ์ ์๋ฆฌ์ ์ถฉ์คํด์ผํ๋ค.
- ์คํ๋ง์ ์ด์ฉํ๋ฉด POJO ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ ์ ๊ทธ๋๋ก ์ด๋ ค์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ๋ก์ง์ ๊ฐ์ฒด์งํฅ์ ์ธ POJO๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊น๋ํ๊ฒ ๊ตฌํํ๊ณ , ๋์์ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์ ๊ฐ์ข ์๋น์ค์ ๊ธฐ์ ์ ์ธ ํ์๋ฅผ POJO๋ฐฉ์์ผ๋ก ๋ง๋ค์ด์ง ์ฝ๋์ ์ ์ฉํ ์ ์๋ค.
- POJO๋?
- Entity ํด๋์ค ๋ด์์ annotation์ ์ด์ฉํ์ฌ ORM ์ค์ ๊ฐ๋ฅ
- Entity Manager์ ์ํด ์์์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋จ์ ๊ฐ์ฒด
ORM (Object-Relational Mapping) ์ค์
Entity์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํ ์ด๋ธ ์ฌ์ด์ mapping ๋ฐฉ๋ฒ์ ์ ์
Annotation ๋๋ XML ์ด์ฉ
Entity Manager
Entity์ ๋ํ CRUD(Create, Read, Update, Delete) ๊ธฐ๋ฅ์คํ
- Entity์ ์๋ช
์ฃผ๊ธฐ (life-cycle)๋ฅผ ๊ด๋ฆฌ
- Entity๋ค์ ์์ ์ปจํ ์คํธ ์์์ ์์์ ์ธ ๊ฐ์ฒด๋ก ๊ด๋ฆฌํจ
- ์์ ๊ฐ์ฒด์ ๋ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ, ๊ฐฑ์ , ์ญ์ ์คํ
- ํธ๋์ญ์ ์๋ฃ์ ์์ ๊ฐ์ฒด์ ํ ์ด๋ธ ๊ฐ์ ๋๊ธฐํ ์คํ
- Entity ๊ฒ์
- SQL ์ง์ ์์ฑ ๋ฐ ์คํ
- ์ง์ ๊ฒฐ๊ณผ์ ๋ํด ์์ ๊ฐ์ฒด ์์ฑ
- ์ํ ์ ์ด
- new
- ์์์ฑ์ ๊ฐ์ง ์๋ ๋จ์ํ ๊ฐ์ฒด ์ํ
- persisted
- ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ์ ์ฅ๋์ด ์๋ ์ํ
- managed
- ์์ ์ปจํ ์คํธ์ ์ํ์ฌ ์์์ฑ์ ๊ฐ๋๋ก ๊ด๋ฆฌ๋๋ ์ํ
- DBํ ์ด๋ธ์ ํน์ ํ์ ๋์๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง
- detached
- ์์์ปจํ ์คํธ๋ฅผ ๋ฒ์ด๋์ ์์์ฑ์ ๊ฐ์ง ์๋ ์ํ
- ํ ์ด๋ธ๊ณผ ๋์๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋, ๋ ์ด์ DB์ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์
- removed
- ์์ ์ปจํ ์คํธ์์ ์ญ์ ๋ ์ํ
- ๋ฐ์ดํฐ๋ค์ด ํ ์ด๋ธ์์ ์ญ์ ๋จ
- new
Java Persistence Query Language(JPQL)
SQL๊ณผ ์ ์ฌํ ์ง์ ์ธ์ด
๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ๋ entity๋ค์ ๋ํ ๊ฒ์, ์์ , ์ญ์ ์คํ
Criteria API
Java code(method)๋ฅผ ์ด์ฉํ ์ง์ ์์ฑ ๋ฐฉ๋ฒ ์ ๊ณต
728x90
'Server๐งค > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ๋์์ฑ ์ฒ๋ฆฌ - ๋น๊ด์ ๋ฝ VS ๋๊ด์ ๋ฝ (1) | 2023.10.10 |
---|---|
[SpringDataJPA] save(), saveAll() ์ฐจ์ด (0) | 2023.05.14 |
[JPA] ํ๋ก์ (0) | 2023.02.24 |
[JPA] ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ (0) | 2023.02.03 |
[JPA] ์ฐ๊ด๊ด๊ณ ๋งคํ (๋จ๋ฐฉํฅ ๋งคํ) (0) | 2023.02.03 |