2022. 10. 17. 17:04ใ์ธํ๋ฐ/์ค์ ! QueryDSL
https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84/dashboard
ํด๋น ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๐โญ
1๏ธโฃ ์คํ๋ง ๋ฐ์ดํฐ JPA ๋ฆฌํฌ์งํ ๋ฆฌ ๋ณ๊ฒฝ
https://hyejin.tistory.com/m/828
์ ๋ฒ ์๊ฐ์๋ ์์ JPA๋ก ํ๋ค๋ฉด ์ด์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ํ์ฉํด์ Querydls๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
์ฐ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ฌ์ฉํ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํด์ผํ๋ค.
์คํ๋ง ๋ฐ์ดํฐ JPA - MemberRepository ์์ฑ
์คํ๋ง ๋ฐ์ดํฐ JPA์์๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ธํฐํ์ด์ค๋ก ์์ฑํ ๋ค์ JpaRepository๋ฅผ ์์๋ฐ์ผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ํฐํฐ์ key ๊ฐ์ ํ์ ์ ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
(MemberRepositoryCustom์ ๋ํด์๋ ์ข ์๋ค ๋์ฌ ์์ )
์คํ๋ง ๋ฐ์ดํฐ JPA ํ ์คํธ
MemberRepositoryTest
์ ๋ฒ์ ํ๋ ํ ์คํธ์ ์์ ๋๊ฐ์๋ฐ ๊ทธ๋ฅ MemberJpaRepository์์ MemberRepository๋ก ๋ณ๊ฒฝ๋ง ํด์ฃผ๊ณ , ํ ์คํธ ์คํํด๋ณด๋ฉด ๋ฌธ์ ์์ด ์ ๋์๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ฎโ ์คํ๋ง ๋ฐ์ดํฐ JPA์์๋ Querydsl ์ ์ฉ ๊ธฐ๋ฅ์ธ ํ์ search๋ฅผ ์์ฑํ ์ ์๋ค..!
๊ฒฐ๊ตญ ์ฌ์ฉ์ ์ ์ ๋ฆฌํฌ์งํ ๋ฆฌ ํ์ํ๋ค.
2๏ธโฃ ์ฌ์ฉ์ ์ ์ ๋ฆฌํฌ์งํ ๋ฆฌ
- ์ฌ์ฉ์ ์ ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์ฌ์ฉ๋ฒ
1. ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ์์ฑ
2. ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ๊ตฌํ
3. ์คํ๋ง ๋ฐ์ดํฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ์์
์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ๊ตฌํ ํ ๋ ํด๋์ค๋ช ์ ์คํ๋ง ๋ฐ์ดํฐ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ช + Impl๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
1. ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ์์ฑ
MemberRepositoryCustom
2. ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ๊ตฌํ
MemberRepositoryImpl
search()์๋ ๊ฒ์ ์กฐ๊ฑด์ผ๋ก ํ์๋ช , ํ๋ช , ๋์ด๋ฅผ ํฌํจํ ์ ์๋ค.
3. ์คํ๋ง ๋ฐ์ดํฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ์์
์ธํฐํ์ด์ค๋ ๋ค์ค ์์์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ MemberRepositoryCustom์ ์ถ๊ฐ๋ก ์์๋ฐ์์ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
์ปค์คํ ๋ฆฌํฌ์งํ ๋ฆฌ ๋์ ํ ์คํธ ์ถ๊ฐ
MemberRepositoryTest
์ด๊ฒ๋ ์ ์ ํ๋ ํ ์คํธ์ ๋์ผํ ๊ฒ์ผ๋ก ๋๋ ค๋ณด๋ฉด ํ ์คํธ ์ฑ๊ณตํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
3๏ธโฃ ์คํ๋ง ๋ฐ์ดํฐ ํ์ด์ง ํ์ฉ1 - Querydsl ํ์ด์ง ์ฐ๋
- ์คํ๋ง ๋ฐ์ดํฐ์ Page, Pageable์ ํ์ฉ
- ์ ์ฒด ์นด์ดํธ๋ฅผ ํ๋ฒ์ ์กฐํํ๋ ๋จ์ํ ๋ฐฉ๋ฒ
- ๋ฐ์ดํฐ ๋ด์ฉ๊ณผ ์ ์ฒด ์นด์ดํธ๋ฅผ ๋ณ๋๋ก ์กฐํํ๋ ๋ฐฉ๋ฒ
- ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค์ ํ์ด์ง 2๊ฐ์ง ์ถ๊ฐ
MemberRepositoryCustom
- ์ ์ฒด ์นด์ดํธ๋ฅผ ํ๋ฒ์ ์กฐํํ๋ ๋จ์ํ ๋ฐฉ๋ฒ
: searchPageSimple(), fetchResults() ์ฌ์ฉ
MemberRepositoryImpl
-> Querydsl์ด ์ ๊ณตํ๋ fetchResults()๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด์ฉ๊ณผ ์ ์ฒด ์นด์ดํธ๋ฅผ ํ๋ฒ์ ์กฐํํ ์์๋ค. (์ค์ ๋ก๋ ์ฟผ๋ฆฌ 2๋ฒ ํธ์ถ!)
๊ทธ๋ฆฌ๊ณ fetchResulst()๋ ์นด์ดํธ ์ฟผ๋ฆฌ ์คํ ์ ํ์์๋ order by ๋ ์ ๊ฑฐํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ํธ์ถํ๋ค.
- ์ ์ฒด ์นด์ดํธ๋ฅผ ํ๋ฒ์ ์กฐํํ๋ ๋จ์ํ ๋ฐฉ๋ฒ ํ ์คํธ
MemberRepositoryTest
-> ์ด๋ ๊ฒ ์ด ๋๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ํธ์ถ๋๊ณ , ํ ์คํธ๊ฐ ์ ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ๋ฐ์ดํฐ ๋ด์ฉ๊ณผ ์ ์ฒด ์นด์ดํธ๋ฅผ ๋ณ๋๋ก ์กฐํํ๋ ๋ฐฉ๋ฒ
: searchPageComplex()
MemberRepositoryImpl
-> ์ ์ฒด ์นด์ดํธ๋ฅผ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ์ต์ ํํ ์ ์์ผ๋ฉด ์ด๋ ๊ฒ ๋ฐ๋ก ๋ถ๋ฆฌํ๋ฉด ๋๋ค.
(์๋ฅผ ๋ค์ด์ ์ ์ฒด ์นด์ดํธ๋ฅผ ์กฐํํ ๋ ์กฐ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ค์ผ ์ ์๋ค๋ฉด ์๋นํ ํจ๊ณผ๊ฐ ์๋ค!!)
์ฝ๋๋ฅผ ๋ฆฌํํ ๋งํด์ ๋ด์ฉ ์ฟผ๋ฆฌ์ ์ ์ฒด ์นด์ดํธ ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ธฐ ์ข๊ฒ ๋ถ๋ฆฌํ๋ฉด ์ข๋ค~~
4๏ธโฃ ์คํ๋ง ๋ฐ์ดํฐ ํ์ด์ง ํ์ฉ2 - CountQuery ์ต์ ํ
: PageableExecutionUtils.getPage()๋ก ์ต์ ํ ๊ฐ๋ฅ
MemberRepositoryImpl
์คํ๋ง ๋ฐ์ดํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก count ์ฟผ๋ฆฌ๊ฐ ์๋ต ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ ์์์ ์๋ตํด์ ์ฒ๋ฆฌํด์ค๋ค.
- ํ์ด์ง ์์์ด๋ฉด์ ์ปจํ ์ธ ์ฌ์ด์ฆ๊ฐ ํ์ด์ง ์ฌ์ด์ฆ๋ณด๋ค ์์ ๋
- ๋ง์ง๋ง ํ์ด์ง์ผ ๋ (offset + ์ปจํ ์ธ ์ฌ์ด์ฆ๋ฅผ ๋ํด์ ์ ์ฒด ์ฌ์ด์ฆ ๊ตฌํจ)
5๏ธโฃ ์คํ๋ง ๋ฐ์ดํฐ ํ์ด์ง ํ์ฉ 3 - ์ปจํธ๋กค๋ฌ ๊ฐ๋ฐ
MemberController
ํฌ์คํธ ๋งจ์ ํตํด์ ์ค์ตํด๋ณธ๋ค~~
http://localhost:8080/v2/members?page=0&size=20
http://localhost:8080/v3/members?page=0&size=110
-> ์ฒซ๋ฒ์งธ ํ์ด์ง์ด๋ฉด์ limit์ด ์ ์ฒด ์ปจํ ์ธ ์ฌ์ด์ฆ๋ณด๋ค ํฌ๋ฉด count ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค~~
'์ธํ๋ฐ > ์ค์ ! QueryDSL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[QueryDSL] fetchResults(), fetchCount() Deprecated (0) | 2022.10.18 |
---|---|
[QueryDSL] 7. ์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ์ ๊ณตํ๋ Querydsl ๊ธฐ๋ฅ (0) | 2022.10.18 |
[QueryDSL] 5. ์ค๋ฌด ํ์ฉ - ์์ JPA์ QueryDSL (0) | 2022.10.12 |
[QueryDSL] 4. ์ค๊ธ ๋ฌธ๋ฒ (0) | 2022.10.11 |
[QueryDSL] 3. ๊ธฐ๋ณธ ๋ฌธ๋ฒ(2) (์๋ธ์ฟผ๋ฆฌ, ์์, ๋ฌธ์ ๋ํ๊ธฐ) (0) | 2022.10.11 |