대머리개발자

JPA + queryDSL 적용기(?) 본문

개발이야기/자봐

JPA + queryDSL 적용기(?)

대머리개발자 2022. 4. 8. 17:34
728x90

익숙해지고 나면 개발적인 면에서 보일러플레이트 코드들이 상당 부분은 제거 된다. 집중 할 수 있는 비지니스 로직에 전념 할 수 있다.

 

즉, 쿼리 관련 같은 패턴들의 "복사 & 붙여넣기" 하는 부분이 제거 된다. 

 

나름의 러닝 커브가 존재하지만 조금(?) 익숙해 지고 나면 Wow 감탄사를 나도 모르게 연발 하고 있을 듯 싶다. 그 만큼 작은 노력으로 빠르게 개발을 할 수 있게 지원해주는 친구라고 보면 될것 같다.

 

내부적으로 어떻게 동작하는지 까지는 이해 할 필요가 없지만 어떻게 사용 해야 잘 사용하는 건지는 계속적인 고민을 해야 할것이다. 공부의 시작은 삽질에서 부터 Start -> 똥코드를 통해서 많은 것들을 이해 할 수 있었다.

 

선배개발자들의 노고를 통해서 우린 그저 가져다 쓰기만 하면 된다. 늘 고맙습니다.

 

기초적인 부분들은 Skip하고 내가 직면 했던 문제 부분만 기록으로 남겨둔다. 주석처럼 !!

(JPA 사용 하기 위한 블러그들이 넘쳐 난다. 대부분은 동일한 샘플과 내용이다. ㅎㅎ)

 

일단 정확한 내용을 학습하지 않은채 대략적으로 블로그를 보고 진행했고 콘솔 로그를 통해서 하나씩 해결해 나갔다.

 

환경은 늘 최신으로 설정!

plugins {
    id 'org.springframework.boot' version '2.6.4'
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
     ...
}
dependencies {
    ...
   implementation "com.querydsl:querydsl-jpa:5.0.0"
   implementation "com.querydsl:querydsl-apt:5.0.0"
   ...
}

 

## queryDSL Insert 문제 이슈.

 : 해당 라이브러리를 통해 CRUD를 전부 진행하고자 했으나 insert 이슈가 있어 해당 문제가 처리 될때까지 Save
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token:

해당 이슈는 queryDSL 라이브러리 자체의 문제이다.

 

따라서 queryDSL이 아닌 순수하게 JpaRePository save를 이용한다!!!  

 

JpaRePository 사용한 대부분의 예제코드들은 단순 상속을 이용한다. 물론 단순 샘플 코드기 때문에 그렇겠지만 덩치가 커지는 서비스의 경우는 생각을 좀 해봐야 한다.

 

단순 JpaRePository 상속을 한다면 각 서비스별 기능마다 같은 패턴의 코드들이 존재 할 것고. 동일한 기능들을 리팩 할 수가 없다. JpaRePository를 상속한 BaseRePository만들고 BaseRePository 위임한다.

즉!!해서 상속보단 위임으로 레파지토리 이용한다.
 

## 모르면 똥 코드가 나오는 이슈 

 

jpaQueryFactory.selectForm(Q_클래스).where( ~ ).fechOne(); 단순 조회 하면 엔티티에 붙은 @ManyToOne 과 @OneToMay가 자동(?)으로 쿼리가 날라가서 데이터를 가지고 온다. 

 

But 데이터를 가져오는 로직에서 

jpaQueryFactory.selectForm(Q_클래스).where( ~ ).innerJoin( ~ ).innerJoin( ~ ).fechOne(); 

 

굳이 필요도 없는 innerJoin을 쓰고 있던 부분이다...똥코드 뿌지직!!

 

즉 selectForm으로 Q클래스 자체를 넣으면 자동이구.

필요한 데이터만 조합하겠다 해서 DTO를 하면 innerJoin을 박아야 되는거구??

 

@ 더욱 자세한 내용은 http://querydsl.com/static/querydsl/3.0.7/reference/ko-KR/html/index.html

 

728x90

'개발이야기 > 자봐' 카테고리의 다른 글

r2dbc Mysql and Maria  (0) 2023.02.19
R2DBC Redis...  (0) 2023.02.14
스프링 Boot Jar 배포 시 리소스 못 찾는 이슈  (0) 2021.10.29
스프링 Boot - MessageSource 적용  (0) 2021.08.28
스프링 Boot - ehcache 적용  (0) 2021.08.24