์ค๋ ํ ๊ณต๋ถ ๐ง
QueryDSL ์ฑ๋ฆฐ์ง๋ฐ ์ธ์ ๋ฃ๊ธฐ
- ๊ณผ์ ์ ์ ์ฉํ๊ธฐ ์ํด QueryDSL ๊ณต๋ถ
- SQL, JPQL ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ Java ์ฝ๋๋ก ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ORM ๊ธฐ๋ฐ ์ฟผ๋ฆฌ ๋น๋
- SQL์ Java ์ฝ๋๋ก ์์ฑํ๋ฉด์, ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋ํญ ๊ฐ์ ๋๋ค.
- ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ๋งค์ฐ ์ ์ฐํ๋ค.
- ์ด๊ธฐ ์ธํ ์ด ๋งค์ฐ ๋ณต์กํ๋ค.
- Q ํด๋์ค ์์ฑ์ด ํ์ํ๋ค.
๊ณผ์ ํด๊ฒฐ
- JPQL๋ก ์์ฑ๋ ๋ฉ์๋๋ฅผ QueryDSL๋ก ๋ณ๊ฒฝ
- ์ธ์ ์์ ๋ฐฐ์ด๋๋ก ์ด๊ธฐ ์ธํ
- todoId๋ฅผ ํตํด ์ผ์ ์ ์กฐํํ๋ ๊ฐ๋จํ ๋ฉ์๋๋ผ์ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ๋ ์์ฑ
@Repository
@RequiredArgsConstructor
public class TodoQueryRepository {
private final JPAQueryFactory queryFactory;
public Optional<Todo> findByIdWithUser(Long todoId) {
return Optional.ofNullable(queryFactory.select(todo)
.from(todo)
.leftJoin(todo.user, user)
.fetchJoin()
.where(
eqId(todoId)
)
.fetchFirst());
}
private BooleanExpression eqId(Long id) {
if (id == null) {
return null;
}
return todo.id.eq(id);
}
}
- fetch( ), fetchOne( ), fetchFirst( )์ ์ฐจ์ด์ ๊นจ๋ฌ์.
- fetch( ) : ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ.
- fetchOne( ) : ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ. null์ ์ํ์ฑ ์กด์ฌ.
- fetchFirst( ) : ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ. null์ ์ํ์ฑ์ด ๋ฎ์ fetchOne๋ณด๋ค ์์ .
์คํ ๋ค๋๋ฐ ์ธ์ ๋ฃ๊ธฐ
- Docker.... ๋๋ฌด๋๋ ์ด๋ ต๋ค..
- Redis์ ๋ํด์ ์์ฃผ ์ชผ๊ธ..? ์ดํดํ ๊ฒ ๊ฐ๋ค.
- ์ด์ฉํ๋ฉด ํ์คํ ํธ๋ฆฌํ ์น๊ตฌ๋ค์ด๋ผ๋ ๊ฒ์ ๋๊ผ๋ค.
ํํฐ๋๊ป ๊ฟํ ๋ฃ๊ธฐ
- ๋ธ๋ก๊ทธ ๊ด๋ จ ๊ฟํ
- ๋ฐํํ ๋ถ๋ถ์ ๋ฐ๋ก ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋๋ ์ ๋ฃ์ด๋๋ฉด ๋ ๋์ ์ ๋ณด์ผ ๊ฒ ๊ฐ๋ค.
- ์ ํ๋ธ์ ์ฌ๋ฆฌ๋ ๊ฒ๋ ์ข์๋ฐ, '์ค์๊ฐ์ผ๋ก ๋ฐํํ๊ณ ์๊ตฌ๋'๋ผ๋ ๋๋์ด ๋๊ปด์ง๋ฉด ๋ ์ข์ ์๋ฃ๊ฐ ๋ ๊ฒ ๊ฐ๋ค.
- Test๋ฅผ ์ฌ๋ฌ ๋ฐฉํฅ์์ ๋๋ ค๋ณด๋ฉด์ ์ํฉ์ ์ ๋ฆฌํ๋ ๊ธ๊ณผ ๊ฑฐ๊ธฐ์ ๋ฐ์ํ๋ ํธ๋ฌ๋ธ ์ํ ์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค.
- ์ํฉ์ ์บก์ฒํ๊ณ , ์ค๋ฅ ์ฝ๋๋ค๋ ๊ฐ์ด ์์ฑํด๋์ผ๋ฉด ๋์์ด ๋๋ค!
- ์ฑ์ฅ์ ํ๋์ง ์ ์ ์๋ ๊ฟํ
- ํ๋ฌ ์ ์ ์์ฑํ๋ ์ฝ๋๋ฅผ ๋ค์ ์ดํด๋ณธ๋ค. → ์ฑ์ฅํ ๋ถ๋ถ ํน์ ๋ค์ ๊ณต๋ถํด์ผ ํ ๋ถ๋ถ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
- '์ด... ์ด๊ฑฐ ๋ค์ ์ง๋ผ๊ณ ํ๋ฉด ํ ์ ์์๊น?' ๋ผ๋ ์๊ฐ์ด ๋ ๋ค๋ฉด ์์ง ๊ฐ๋ ์ด ์๋ฒฝํ๊ฒ ์๋ฆฌ์ก์ง ์์๋ค๋ ์๋ฏธ์ด๋ค. ๊ทธ๋์ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ์ง๊ณ ๋์ด๊ฐ ์ ์๋ค.
- '์... ์์งฐ๊ตฐ..' ์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค๋ฉด ๋ค์์ ์ฝ๋ ์์ฑํ ๋ ์ฐธ๊ณ ํ ์ ์๋ค.
- '๋ด๊ฐ ์ฝ๋๋ฅผ ์ ์ด๋ ๊ฒ ์งฐ์ง? ์ด๋ ๊ฒ ์ง๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ์๋ฐ?' ๋ผ๋ ์๊ฐ์ด ๋ ๋ค๋ฉด ๋ด๊ฐ ์ฑ์ฅํ๋ค๋ ์ฆ๊ฑฐ์ด๋ค! ์์ ๋ณด๋ค ๋ ์ฑ์ฅํด์ ์๊ฐํ๋ ๋ฐฉํฅ์ด ๋ฐ์ ๋์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์๊ฐ์ ํ ์ ์๋ค.
- ๋ง์๊ฐ์ง ๊ฟํ
- ๊ณ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ๋ด์ฉ๋ค์ด ์ด์ด์ ธ์ ์ง์์ด ๋๋ค.
- ์ด๋ฐ ์ง์์ด ๋ ๋ ค๋ฉด ์ ๋ณด๊ฐ ์์ด์ผ ํ๊ณ , ์ ๋ณด๋ฅผ ์ด์ฌํ ์๋๋ค๋ ์๊ฐ์ ๊ฐ์ง๊ณ ์กฐ๊ธํด์ง์ง ๋ง๊ณ , ๋ถ์ ์ ์ธ ์๊ฐ์ ํ์ง ๋ง๊ณ ๋ถ์ง๋ฐํ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ์ ๋ณด๋ค์ด ๋ชจ์ฌ ์ง์์ด ๋ ๊ฒ์ด๋ค.
- ์ง๊ธ ์์ ์์๋ ์ด์ ๋ด์ฉ์ ๋ค์ง๋ ๋ ธ๋ ฅ 6 (์ธ์ฆ/์ธ๊ฐ, AOP, ํธ๋์ญ์ ) : ์๋ก์ด ๊ธฐ์ ๊ณต๋ถ 4 (Docker, AWS, QueryDSL) ๋น์จ๋ก ์งํํ๋ ๊ฒ์ด ์ข๋ค!
- ๊ณ์ํด์ ๋์ค๋ ๊ธฐ์ ๋ค๋ ๊ธฐ์กด์ ์๋ ๊ฒ๋ค์ ๋ถํธํ ์ ๋ค์ด ๊ฐ์ ๋๊ณ ๋ฐ์ ๋์ด์ ๋์ค๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํํํ๊ฒ ์๋ ๊ฒ์ด ์ข๋ค.
- ํ๋จ๊ณ์ฉ ์ฑ์ฅํด ๋๊ฐ๋ค ๋ผ๊ณ ์๊ฐํ์! ๋๋ฌด ๊ธํ๊ฒ ๊ฐ ํ์๋ ์๋ค.
์ด๋ฏธ 3๊ฐ์๋์ ๋ง์ ์ฑ์ฅ์ ํด๋๊ณ ์ฑ์ฅํ ์ ์๋ ๋ ์ด ๋ง์ด ๋จ์์๊ธฐ ๋๋ฌธ์ ๋ด๋ฐฐ์บ ๋ฃ๋ ๋์ ์ต๋ํ ์ด ํ๊ฒฝ์ ์ด์ฉํ๋ ๊ฒ์ด ์ข๋ค!
- ๋ถํธ์บ ํ or Spring์ ๋ํด ์ด๋ ์ ๋ ์์ ์ด ์๋ค๋ฉด ๊ทธ ํ์๋?!
- CS ์ง์ ๊ณต๋ถ → ์ ๋ณด, ์ง์๋ค์ด ๋ค ์ฐ๊ฒฐ๋์ด ์๋ค. ๊ณต๋ถํ๋ค ๋ณด๋ฉด ์๊ฐํ๋ ๊น์ด๊ฐ ๋ฌ๋ผ์ง๊ณ ๋ ํํํด์ง ์ ์๋ค!
- ํ๋ฃจ์ 30๋ถ ์ ๋๋ ์ด๋์ ํ๋ ๊ฒ์ด ์ข๋ค! ๊ธฐ๋ถ๋ ์์พํด์ง๊ณ ์ฐ๋ฟ๋ฅํ ๋ชธ์ ํ ์ ์์ด์ ์ข๋ค!
์ค๋ ํ๋ฃจ ์ ๋ฆฌ โ๏ธ
์ค๋์ ์ป์ด๊ฐ๋ ๊ฒ์ด ๋ง์ ํ๋ฃจ์๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด QueryDSL์ ํ์ฉํด์ ๊ณผ์ ๋ ํด๊ฒฐํ ์ ์์๊ณ , ์ธ์
์์ Docker๋ฅผ ์ด์ฉํด์ Redis๊น์ง ์ฌ์ฉํด๋ดค๋ค!
๋ฌผ๋ก ์ฒ์์ ๊ฐ๋
์ ์ตํ๊ธฐ๊น์ง ๊ณ ํต์ค๋ฌ์ ๋ค....... ์ดํด๋ ๋์ง ์์๊ณ , ์ด๊ฑธ ๋๋์ฒด ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋๊ฑด์ง ์๋ฌธ๋ง ๊ฐ๋ํ๋๋ฐ ์ง์ ํ์ฉํด๋ณด๊ณ ๊ฒฝํํด๋ณด๋๊น ์ ์ฌ์ฉํ๋์ง ์กฐ๊ธ์ ์ ๊ฒ ๊ฐ์๋ค.
์ค๋ ์ฌ์ฉํด๋ณธ ๊ฒ์ผ๋ก ๋ง์กฑํ์ง ์๊ณ ๊ณ์ ์ฌ์ฉํด๋ณด๋ฉด์ ์ต์ํด์ ธ์ผ ํ๋ค!! ํ์
์ ๋ค์ด๊ฐ๋ฉด ๊ณ์ ์ฌ์ฉํ๊ฒ ๋๋ ์น๊ตฌ๋ค์ด๋๊น ๋ด ๊ฒ์ผ๋ก ๋ง๋ค์ด์ ํ์คํ๊ฒ ์ง๊ณ ๋์ด๊ฐ์ผ ํ๋ ๊ฐ๋
๋ค์ด๋ค.. ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋ฐ๋ก๋ฐ๋ก ๊ณต๋ถํด์ ๋์ด๊ฐ๋๋ก ๋
ธ๋ ฅํด์ผ๊ฒ ๋ค :)
๊ทธ๋ฆฌ๊ณ ์ค๋ ์ฒ์์ผ๋ก ํํฐ๋๊ณผ ์์ฒญ ์ค๋ ๋ํํ๋ค!
์ฒ์์๋ ๋ชจ๋ฅด๋ ๊ฐ๋
์ ๋ํด ๋ฌผ์ด๋ณด๋ฌ ๊ฐ์ง๋ง ์ด์ ์งํํ๋ ๋ฏธ๋ ์ธ์
์ ์์์ผ๋ก, ๋ธ๋ก๊ทธ ๊ด๋ฆฌ ๋ฐฉ๋ฒ, ๊ณต๋ถ ๋ฐฉ๋ฒ ๋ฑ๋ฑ ์ด๊ฒ์ ๊ฒ ๊ฟํ์ ์์ฒญ ๋ง์ด ์๋ ค์ฃผ์
จ๋ค ๐ณ
๋๋ถ์ ์ง๊ธ๊น์ง ํผ๋์ค๋ฌ์ ๋ ๋จธ๋ฆฌ๊ฐ ์กฐ๊ธ์ ์ ๋ฆฌ๋๊ณ ๊ธํด์ก๋ ๋ง์ ๋ํ ์ง์ ํ ์ ์์๋ค.
์ฒ์ ์์ํ์ ๋๋ณด๋ค ํ์คํ ์์ฒญ๋๊ฒ ์ฑ์ฅํ๊ณ , ์์ผ๋ก๋ ๊ณ์ ์ฑ์ฅํ ์ ์๋ค! ์ค๊ฐ์ค๊ฐ ๊ธฐ๋กํ๋ ์ต๊ด์ ๋ ๋
ธ๋ ฅํ๊ณ ํธ๋ฌ๋ธ ์ํ
, ๊ธฐ์ ๋ธ๋ก๊ทธ, ์ธ์
๊ณผ ๊ฐ์ ๊ฒ์ ์ข ๋ ์ ๊ฒฝ์ ์จ์ ์ค๋นํ๋ค๋ฉด ๋ ์ข์ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค!
๋ด์ผ์ ๊ธ์์ผ.. ๊ทธ๋ฆฌ๊ณ ์ฃผ๋ง์๋ ๋ถ์ฐ ์ฌํ..
๋ด์ผ๊น์ง ๋ฌด์กฐ๊ฑด ํ์ ๊ณผ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ณ ์ฃผ๋ง ์ ๋๊ฒ ๋ณด๋ด๊ณ ์์์ผ๊น์ง ๊ณผ์ ์ ๋ง๋ฌด๋ฆฌํด์ ์ ์ถํด์ผ๊ฒ ๋ค!
๋ด์ผ๋ ํ๋ด๋ณด์!!!!
๋ด์ผ ๊ณํ โฐ
- ๊ณผ์ ์งํ
- ํ์ํ ์ธ์ ๋ค์ ๋ฃ๊ธฐ
- ํ์ํ ๋ถ๋ถ ์ถ๊ฐ ๊ณต๋ถ
+ ์ถ๊ฐ ๊ณํ์ด ์๊ธธ ์๋ ์์ด๋ค~_~
'โ๏ธ Today I Learned(TIL) > ์คํ๋ฅดํ ๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ TIL ] ํ๋ฌ์ค ํ๋ก์ ํธ_Day 5 (0) | 2025.02.05 |
---|---|
[ TIL ] Kotlin ๋ฌธ๋ฒ ๊ธฐ์ด/์ฌํ_Day 4 (1) | 2025.01.24 |
[ TIL ] Kotlin ๋ฌธ๋ฒ ๊ธฐ์ด/์ฌํ_Day 1 (2) | 2025.01.21 |
[ TIL ] JPA ์ฌํ_Day 7 (0) | 2025.01.20 |
[ TIL ] JPA ์ฌํ_Day 6 (0) | 2025.01.19 |