๐ก ์์์ฑ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋๋ผ๋ ๋ฐ์ดํฐ๋ ์ฌ๋ผ์ง์ง ์๋ ๊ฒ์ ์๋ฏธ
- ์์์ฑ ์๋ ๋ฐ์ดํฐ๋ค์ ์ฌ์ฉํ๊ธฐ ํธํ๊ฒ ํด์ฃผ๋ ๊ฒ → Persistene Framework
- ์ข ๋ฅ๋ก๋ SQL Mapper, ORM์ด ์์
Persistene Framework
- DB์์ ์ฐ๋๋๋ ์์คํ ์ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ณ , ์์ ์ ์ธ ๊ตฌ๋์ ๋ณด์ฅํด์ฃผ๋ ํ๋ ์์ํฌ
- SpringBoot์ DB๋ฅผ ์ด์ด์ฃผ๋ ์ญํ (์์์ฑ ๋ถ์ฌ)
์ฅ์
1. ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์์ ์ฉ์ดํจ
- ๋ฐ์ดํฐ๋ฒ ์ด์คMySQL, MariaDB ๋ฑ) ์ข ๋ฅ๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋๋ฐ, ๋ง์ฝ DB๋ฅผ ๊ต์ฒดํ๋๋ผ๋ Persistene Framework๋ ๊ทธ๋๋ก ๋๊ณ DB๋ง ๊ต์ฒดํ๋ฉด ๋๋ฏ๋ก ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์์ ์ฉ์ดํ๋ค.
2. ์ฝ๋๊ฐ ์ง๊ด์ ์
- Persistene Framework๊ฐ ์๋ค๋ฉด SpringBoot์ DB๋ฅผ ์ฐ๊ฒฐํ๋ ๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ ๋ถ ๊ด๋ฆฌํด์ผ ํจ
1. if(db์ ์ฐ๊ฒฐ๋์๋ค๋ฉด),else
2. if(query๊ฐ ์ด์ํ๋ค๋ฉด),else
3. db๊ฐ ์ฐ๊ฒฐ ๋์ด์๋์ง ๊ณ์ ํ์ธ โก๏ธ 1. Persistence Framework
4. if(db๊ฐ ๊ฐ์๊ธฐ ๋๊ฒผ๋ค๋ฉด),else
5. db์ฌ์ฉ ๋๋๋ฉด ์ฐ๊ฒฐ ๋๊ธฐ
Persistene Framework ์ข ๋ฅ
SQL Mapper
- SQL์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑ (ex. ”SELECT name FROM students”)
- ๋งคํ : ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ ↔ ๊ฐ์ฒด
- ๋จ์
- DB ์ข ๋ฅ ๋ณ๊ฒฝ ์ ์ฟผ๋ฆฌ ์์ ํ์
- ๋น์ทํ ์ฟผ๋ฆฌ ๋ฐ๋ณต ์์ฑ
ORM(Object Relation Mapping)
- ์ฟผ๋ฆฌ ์์ด Obeject์ DB ํ ์ด๋ธ ๋งคํ (ex. student ๊ฐ์ฒด์ student ํ ์ด๋ธ์ ๋งคํ)
- Java ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก SQL์ด ๋ง๋ค์ด์ง
- ๋งคํ : DB ํ ์ด๋ธ ↔ ๊ฐ์ฒด
- ๋จ์
- ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์๋ฐ ๋ฉ์๋ ๋ง์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ ๋ถํธํจ
→ 'The Object-Relational Impedance Mismatch’
๊ฐ์ฒด ๋ชจ๋ธ์ ๊ด๊ณํ ๋ชจ๋ธ์ ์ ์ฅํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ก ์ฆ, ํจ๋ฌ๋ค์์ ๋ถ์ผ์น์์ ์ค๋ ๋ฌธ์ (ํ์ , ์ฐ๊ด์ฑ, ์์ ๋ถ์ผ์น)
→ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง ์ ์์
→ ์ด๋ฅผ ํด๊ฒฐํ๋ ๊ฒ ORM
JDBC → SQL Mapper ์ค ํ๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ ๋ฐ ์์ ์ ํ๊ธฐ ์ํ ์๋ฐ ํ์ค **์ธํฐํ์ด์ค**
- ์๋ฐ๋ DB์ ์ข ๋ฅ์ ์๊ด์์ด ํ๋์ JDBC API๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ฒ๋ฆฌํจ
- DB์ ์ ๊ทผํด์ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก CRUD๋ฅผ ์ํํ๊ณ , ๊ณ ์ฑ๋ฅ์์์ ์ธ๋ จ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ฉฐ ์ฝ๊ฒ ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๊ฒ ํด์ค
- SpringBoot์ DB๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ต์ํ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ (์ฟผ๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ์์ฑ)
MyBatis → SQL Mapper ์ค ํ๋
- ์๋ฐ์์ SQL Mapper๋ฅผ ์ง์ํด์ฃผ๋ ํ๋ ์์ํฌ
- SQL ๋ฌธ์ ์ด์ฉํด์ RDB์ ์ ๊ทผ, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒดํ ์์ผ์ค
- SQL๋ฅผ ์ง์ ์์ฑํ์ฌ ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์ ํจ๋ฐ
- ์ฟผ๋ฆฌ๋ฌธ์ XML๋ก ๋ถ๋ฆฌ ๊ฐ๋ฅ
JPA → JAVA ORM ํ์ค
- JAVA ์์ญ์์์ ORM์ ํ์ค์ ์ ์ํ๋ **์ธํฐํ์ด์ค**
- ๋ด๋ถ์ ์ผ๋ก ์์์ฑ ์ปจํ ์คํธ๋ฅผ ์์ฑํ์ฌ Entity๋ฅผ ๊ด๋ฆฌํจ
- ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ํตํด ๊ฐ๋ฐ์๊ฐ Entity๋ฅผ ์์ ํ๋ฉด ๊ทธ์ ๋ง๋ ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋๊ณ , ์ฐ๊ธฐ ์ง์ฐ ๋ฐฉ์์ ํตํด Query ์ ์ฅ์์ ์๋ Query๋ค์ ํ ๋ฒ์ flush ์ํด์ผ๋ก์จ Connection์ ์ต์ํํด ์๋น์ค ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์์
- ์ธํฐํ์ด์ค๋ผ์ ์ด๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด ํ์ → Hibernate
Hibernate → JPA๋ฅผ ๊ตฌํํ ORM ํ๋ ์์ํฌ ์ค ํ๋
- Java ORM ๊ตฌ์กฐ์์ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก Query๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ ์ด์ ๋ ์ด Hibernate๊ฐ ๋ด๋ถ์ ์ผ๋ก Query๋ฅผ ์์ฑํ๊ณ JDBC API๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ
- ๋ค๋ง ์์ฑ๋๋ Query๊ฐ ๋ชจ๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ํฉํ๋ค๊ณ ๋ณผ ์ ์์ด, ๊ฐ๋ฐ์ ๋ณธ์ธ์ด ๋ฅ๋์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ ํ ํ์๊ฐ ์์ → Spring Data JPA
Spring Data JPA
- JPA๋ฅผ ํ๋จ๊ณ ๋ ์ถ์ํ ์ํจ Repository ๋ผ๋ ๊ฐ๋ ์ ์ ์ํ์ฌ ๊ฐ๋ฐ์๊ฐ Repository Interface์ JpaRepository๋ฅผ ์์ํ๊ธฐ๋ง ํ๋ฉด ์ฌ์ฉ ์์ ์ Spring์ด ์์์ ๊ตฌํํ ๋ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํด์ค
- Repository Interface ๋ด๋ถ์์ ์์ฑ๋ ๋ฉ์๋ ๋ํ Spring์ด ์ ํฉํ Query๋ฅผ ์์ฑํ์ฌ ์ ์กํ๋๋ก ํด์ค
JPA์ MyBatis์ ์ฐจ์ด์
- DB์์ ์ํธ์์ฉ ๋ฐฉ์
- MyBatis
- ๊ฐ๋ฐ์๊ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํด์ ์ฌ์ฉ
- ๋ฐ์ดํฐ ๋งคํ์ ์ํด XML ๋๋ ์ด๋ ธํ ์ด์ ์ฌ์ฉ
- JPA
- ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ ์ ๊ณต
- JPQL์ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํจ
⇒ JPA๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์ ๊ฐ์ํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์
์ฐธ๊ณ
'Web & Android > Spring Data JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Data JPA] Querydsl (0) | 2023.10.15 |
---|---|
[Spring Data JPA] @Query (0) | 2023.10.14 |
[Spring Data JPA] JPA (0) | 2023.10.14 |
[Spring Data JPA] QueryMethod (0) | 2023.10.14 |
[Spring Data JPA] ์์์ฑ ์ปจํ ์คํธ (1) | 2023.10.14 |