๊ธฐ์กด JPA๋ก๋ง ์์ ํ๋ ํ๋ก์ ํธ์์ QueryDSL์ ์ถ๊ฐ๋ก ์ ์ฉํ๋ฉด์
'์ด๋ค ๊ฑธ ๋๊ณ , ์ด๋ค ๊ฑธ QueryDSL๋ก ์ฎ๊ฒจ์ผ ํ ๊น?'์ ๋ํด์ ์ฐพ์๋ดค๋ค.
โ QueryDSL๋ก ์ฎ๊ธฐ๋ ๊ธฐ์ค
- ๋์ ์กฐ๊ฑด์ด ์๋ ์กฐํ
โก๏ธ QueryDSL ํ์!! JPQL @Query๋ ์กฐ๊ฑด ์กฐํฉ์ด ๋์ด๋ ์๋ก ๋ฌธ์์ด ์ด์ด ๋ถ์ด๊ธฐ ์ง์ฅ์ด ๋จ. - exists, ์๋ธ์ฟผ๋ฆฌ, ๋ณต์กํ OR ์กฐ๊ฑด
โก๏ธ QueryDSL์ด ์์ !! ๋ฌธ์์ด JPQL์ ์ค์๋ ๋ฆฌํฉํ ๋ง์ ์ทจ์ฝ - ํ์ด์ง + ์ ๋ ฌ + count ๋ถ๋ฆฌ ํ์
โก๏ธ Page / Slice ๊ตฌํ: QueryDSL์ด ๊ตฌ์กฐ์ ์ผ๋ก ์ ๋ฆฌ - ๋ค์ค ํ
์ด๋ธ ์กฐ์ธ DTO ํ๋ก์ ์
โก๏ธ QueryDSL์ด ์ปดํ์ผ ํ์ ํ์ ์ฒดํฌ: JPQL ๋ฌธ์์ด์ ํ๋๋ช ์คํ๊ฐ ๋ฐํ์ ์๋ฌ - ๊ฒ์ ์กฐ๊ฑด์ด ๊ณ์ ๋์ด๋ ๊ฐ๋ฅ์ฑ ์์
โก๏ธ ์ด๊ธฐ์ ๋จ์ํด ๋ณด์ฌ๋ ์์ผ๋ก ํํฐ ์ถ๊ฐ ์์ฒญ ์์๋๋ฉด QueryDSL
โ ๊ตณ์ด ์ ์ฎ๊ฒจ๋ ๋๋ ๊ฒฝ์ฐ
- ๋จ์ CRUD (ex. `findById`, `deleteById`, `existsById`...)
โก๏ธ Spring Data ๊ธฐ๋ณธ ๋ฉ์๋๋ก ์ถฉ๋ถ - ๋จ์ ๋ฒํฌ ์์ /์ญ์ (ex. `@Modifying @Query("delete ... where id = :id")`)
โก๏ธ ๊ทธ๋๋ก ๋ฌ๋ ๋จ (์คํ๋ ค QueryDSL ๋ฒํฌ๋ flush/clear ์ง์ ๊ด๋ฆฌ ํ์) - DB ์ ์ฉ ๊ธฐ๋ฅ (CTE / window function)
โก๏ธ QueryDSL-JPA๋ ํํ ๋ชปํจ. JDBC / native SQL ์ ์ง๊ฐ ๋ ๋ซ๋ค. - ์ ๋ ์ ๋ณํ ์ ์ ์ฟผ๋ฆฌ (ex. “ํ์ฑ Y ๋ฐ์ดํฐ ์ ๋ถ ์กฐํ”)
โก๏ธ `@Query` ํ๋๋ก ๋๋๊ณ ๋๊น์ง ์ ๋ณํ๋ฉด ์ ์ง
์ฐพ์๋ณธ ๊ฒฐ๊ณผ ์ด๋ ๊ฒ ์ ๋ฆฌํ๋ค.
์ด๋๋ก ํ ๊ฐ๋ฐ ๊ฐ์ด๋ ๋ฌธ์๋, ๊ฐ์ธ ํ๋ก์ ํธ ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค!
'Backend > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Gradle] implementation, api ์ ์ธ (0) | 2026.01.22 |
|---|---|
| [Spring Data JPA] Stream Filter ํ Page๋ก ๋ณํํ๊ธฐ (0) | 2025.05.23 |
| [Spring Data JPA] ํ์ด์ง(Pageable)๊ณผ ์ ๋ ฌ(Sort) ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ (0) | 2025.04.30 |