JPA๋?
ORM์ด๋?
๐ Obect-Relational Mapping
๋ฐ๋ณต์ ์ด๊ณ ๋ฒ๊ฑฐ๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ๋จ์์์ SQL ์์ ์ ์ค์ฌ์ฃผ๊ธฐ ์ํด์ ORM(๊ฐ์ฒด ๊ด๊ณ ๋งคํ)๊ธฐ์ ๋ค์ด ๋ฑ์ฅ
- ORM์ ๊ฐ์ฒด์ DB์ ๊ด๊ณ๋ฅผ ๋งคํํด์ฃผ๋ ๋๊ตฌ
JPA๋?
๐ Java-Persistence API (์๋ฐ ORM ๊ธฐ์ ์ ๋ํ ํ์ค ๋ช ์ธ)
JPA๋ Java ORM ๊ธฐ์ ์ ๋ํ์ ์ธ ํ์ค ๋ช ์ธ์
JPA๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ JDBC ์ฌ์ด์์ ๋์
JPA๋ฅผ ์ฌ์ฉํ๋ฉด DB ์ฐ๊ฒฐ ๊ณผ์ ์ ์ง์ ๊ฐ๋ฐํ์ง ์์๋ ์๋์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
๋ํ ๊ฐ์ฒด๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก DB ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ฝ๊ฒ DB ์์ ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
ํ์ด๋ฒ๋ค์ดํธ(Hibernate)๋?
- JPA๋ ํ์ค ๋ช
์ธ์ด๊ณ , ์ด๋ฅผ ์ค์ ๊ตฌํํ ํ๋ ์์ํฌ ์ค ์ฌ์ค์ ํ์ค์ด
ํ์ด๋ฒ๋ค์ดํธ
- ์คํ๋ง ๋ถํธ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก
ํ์ด๋ฒ๋ค์ดํธ
๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉ์ฌ์ค์ ํ์ค (de facto, ๋ํฉํ )
๋ณดํต ๊ธฐ์ ๊ฐ ์น์ดํ ๊ฒฝ์์ ํต์ ์์ฅ์์ ๊ฒฐ์ ๋๋ ๋น ๊ณต์์ ํ์ค
์ถ์ฒ: ์ํค๋ฐฑ๊ณผ
Entity
Entity๋?
- JPA์์ ๊ด๋ฆฌ๋๋ ํด๋์ค ์ฆ, ๊ฐ์ฒด๋ฅผ ์๋ฏธ
- Entity ํด๋์ค๋ DB์ ํ ์ด๋ธ๊ณผ ๋งคํ๋์ด JPA์ ์ํด ๊ด๋ฆฌ๋จ
์ ๋ ธํ ์ด์
@Entity
: JPA๊ฐ ๊ด๋ฆฌํ ์ ์๋ Entity ํด๋์ค๋ก ์ง์ name = "name"
: ํด๋์ค์ ์ด๋ฆ ์ง์ (default: ํด๋์ค๋ช )- JPA๊ฐ Entity ํด๋์ค๋ฅผ ์ธ์คํด์คํ ํ ๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ํ์ฌ Entity ํด๋์ค์์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ฑ๋๊ณ ์๋์ง ํ์ธ
@Table
: ๋งคํํ ํ ์ด๋ธ์ ์ง์ name = "name"
: ๋งคํํ ํ ์ด๋ธ์ ์ด๋ฆ ์ง์ (default: Entity ๋ช )
@Column
name = "name"
: ํ๋์ ๋งคํํ ํ ์ด๋ธ์ ์ปฌ๋ผ ์ง์ (default: ๊ฐ์ฒด์ ํ๋๋ช )nullable = false
: ๋ฐ์ดํฐ์ null ๊ฐ ํ์ฉ ์ฌ๋ถ ์ง์ (default: true)unique = true
: ๋ฐ์ดํฐ์ ์ค๋ณต ๊ฐ ํ์ฉ ์ฌ๋ถ ์ง์ (default : false)length = 100
: ๋ฐ์ดํฐ์ ๊ฐ(๋ฌธ์)์ ๊ธธ์ด์ ์ ์ฝ์กฐ๊ฑด์ ๊ฒ(default: 255)
@Id
: ํ ์ด๋ธ์ด ๊ธฐ๋ณธ ํค๋ฅผ ์ง์ - ์ด ๊ธฐ๋ณธ ํค๋ ์์์ฑ ์ปจํ
์คํธ์์ Entity๋ฅผ ๊ตฌ๋ถํ๊ณ ๊ด๋ฆฌํ ๋ ์ฌ์ฉ๋๋ ์๋ณ์ ์ญํ ์ํ
- ๋ฐ๋ผ์ ๊ธฐ๋ณธ ํค ์ฆ, ์๋ณ์ ๊ฐ์ ๋ฃ์ด์ฃผ์ง ์๊ณ ์ ์ฅํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
- @Id ์ต์ ๋ง ์ค์ ํ๋ฉด ๊ธฐ๋ณธ ํค ๊ฐ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ์ธํ๊ณ ๋ฃ์ด์ค์ผํ๋ ๋ถํธํจ ๋ฐ์
- ์ด ๊ธฐ๋ณธ ํค๋ ์์์ฑ ์ปจํ
์คํธ์์ Entity๋ฅผ ๊ตฌ๋ถํ๊ณ ๊ด๋ฆฌํ ๋ ์ฌ์ฉ๋๋ ์๋ณ์ ์ญํ ์ํ
@GeneratedValue
์ต์ ์ ์ถ๊ฐํ๋ฉด ๊ธฐ๋ณธ ํค ์์ฑ์ DB์ ์์- ์ฌ๋ฌ ์ ๋ต ์กด์ฌ
- ๊ทธ ์ค GenerationType.IDENTITY
id bigint not null auto_increment
: auto_increment ์กฐ๊ฑด์ด ์ถ๊ฐ๋จ- ํด๋น ์ต์ ์ ์ถ๊ฐํด์ฃผ๋ฉด ์๋์ผ๋ก ์์์ ๋ง๊ฒ ๊ธฐ๋ณธ ํค๊ฐ ์ถ๊ฐ๋จ
์์์ฑ ์ปจํ ์คํธ
์์์ฑ ์ปจํ ์คํธ๋?
- Persistence == ์์์ฑ(์ง์์ฑ)
๊ฐ์ฒด์ ๊ด์ ์์ Persistence๋ ๊ฐ์ฒด๊ฐ ์๋ช (์ ์ง๋๋ ์๊ฐ)์ด๋ ๊ณต๊ฐ(์์น)์ ์์ ๋กญ๊ฒ ์ ์งํ๊ณ ์ด๋ํ ์ ์๋ ๊ฐ์ฒด์ ์ฑ์ง์ ์๋ฏธ
- ๐ Entity ๊ฐ์ฒด๋ฅผ ํจ์จ์ ์ผ๋ก ์ฝ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ณต๊ฐ
- ๊ฐ๋ฐ์๋ค์ด ์ง์ SQL์ ์์ฑํ์ง ์์๋ JPA๋ฅผ ์ฌ์ฉํ์ฌ DB์ ์ ์ฅ, ์กฐํ, ์์ , ์ญ์ ๊ฐ๋ฅ
- ์ด๋ฌํ ์ผ๋ จ์ ๊ณผ์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด JPA๋ ์์์ฑ ์ปจํ ์คํธ์ Entity ๊ฐ์ฒด๋ค์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ฉด์ DB์ ์ํต
EntityManager
- ์์์ฑ ์ปจํ ์คํธ์ ์ ๊ทผํ์ฌ Entity ๊ฐ์ฒด๋ค์ ์กฐ์ํ๊ธฐ ์ํด์๋ EntityManager๊ฐ ํ์
- ์ด๋ฆ ๊ทธ๋๋ก Entity๋ฅผ ๊ด๋ฆฌํ๋ ๊ด๋ฆฌ์
- ๊ฐ๋ฐ์๋ค์ EntityManager๋ฅผ ์ฌ์ฉํด์ Entity๋ฅผ ์ ์ฅํ๊ณ ์กฐํ, ์์ , ์ญ์ ๊ฐ๋ฅ
- EntityManager๋
EntityManagerFactory
๋ฅผ ํตํด ์์ฑํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
EntityManagerFactory
- EntityManagerFactory๋ ์ผ๋ฐ์ ์ผ๋ก DB ํ๋์ ํ๋๋ง ์์ฑ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ ๋์ ์ฌ์ฉ๋จ
- EntityManagerFactory๋ฅผ ๋งใท๋ฅด๊ธฐ ์ํด์๋ DB์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ผํจ
- /resources/META-INF/persistence.xml์ ์ ๋ณด ์์ฑ
EntityManagerFactory emf = Persistence.createEntityManagerFactory("memo");
- ํด๋น ์ฝ๋๋ฅผ ํธ์ถํ๋ฉด JPA๋ persistence.xml์ ์ ๋ณด๋ฅผ ํ ๋๋ก EntityManagerFactory๋ฅผ ์์ฑํจ
EntityManager em = emf.createEntityManager();
-> EntityManager๋ฅผ ์์ฑ
'๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring ์ ๋ฌธ 2์ฃผ์ฐจ : JPA - 3 (0) | 2023.11.07 |
---|---|
Spring ์ ๋ฌธ 2์ฃผ์ฐจ : JPA - 2 (0) | 2023.11.07 |
Spring ์ ๋ฌธ 2์ฃผ์ฐจ : IoC์ DI (1) | 2023.11.03 |
Spring ์ ๋ฌธ 2์ฃผ์ฐจ: Layer Architecture (0) | 2023.11.03 |
Spring ์ ๋ฌธ 1์ฃผ์ฐจ: JDBC (0) | 2023.11.02 |