QueryDSL

· Spring
⚡ 내용속도적인 이슈로 인해서 일부 queryFactory를 사용하는 부분을 SQLQueryFactory로 변경을 했다.이때 조회 방식은 동일하지만 내부 구현체가 좀 달라서 그런지 LocalDate 타입으로 반환하는 결과값이 이상하게 나오는 부분이 있어서 정리를 하려고 한다.⚡ 이슈 정리나는 오늘 날짜를 기준으로 데이터를 조회 했지만 하루전 데이터가 나와서 데이터가 꼬이는 부분이 발생을 했다.실제 결과 값에 대한 디버그를 해보니 하루전 데이터가 나오고 있었다. 최근에 변경한 부분이 queryFactory 를 sqlQueryFactory로 변경한 부분이 있어서 실제 결과 값을 만드는 부분에 대해서 클래스 내용을 확인 해보니 반환하는 부분에서 좀 이상한 부분이 있어서 공유를 하려고 한다. 아래의 이미지는 실..
· Spring
⚡ 개요 Spring boot 2.6.x 버전이 2024년 2월달 부로 지원이 종료가 된다. :( 아직 까지는 크게 문제가 없지만 결국은 버전을 올려야 하며, 내부 버전을 마이그레이션을 하기로 생각했다. 아마 추가적으로 다른 내용들도 정리를 하고 있지만 가장 먼저 QueryDsl 의 Dialect의 사용 방식이 변경돼서 이 부분에 대해서 정리를 하려고 한다. 공식 문서 및 관련 자료를 찾아도 방법에 대해서 공유를 해놓은 사람이 없어서 내부 클래스를 분석해서 사용 방법을 재정의 했다. 이에 대한 내용을 정리해보려고 한다. 📚 버전 정보 현재 테스트를 할떄 필요한 버전 정보만 공유하도록 하겠다. Spring boot 2.6.x ==> Spring boot 2.7.18 ==> Spring boot 3.0.18..
· Spring
⚡ 개요 queryDsl을 사용하면서 데이터를 조회하거나, 조건을 추가할 때 case when 구문을 사용해야 하는 경우가 발생한다. 내부적으로는 이력을 조회하거나, 카운트를 조회 한다거나 조건을 추가하려고 stream의 중간 연산자를 쓰는 것보다 쿼리를 한 번에 날려서 조회하는 게 속도적으로 좀 더 좋다고 판단해서 사용하고 있다. 물론 일반적인 비지니스 로직에서 처리를 할 때는 최대한 사용하지 않는 게 좋다고 생각하기는 하지만 분명 어쩔 수 없는 경우도 있을 것이다. 좋지 않다고 해서 사용을 안 하는 것이 아니라 상황에 맞게 판단해서 사용하는 게 좋다고 생각을 한다. ⚡ case when 사용 방식 정리 일단 가장 기본적으로 queryDsl 에서 caseBuilder를 사용해서 case when 구문을..
· Spring
⚡ 개요 spring boot 2.x 버전에 대한 지원이 이번년도를 기점으로 종료가 된다. 이에 따라 새로 나온 3.x 버전으로 내부 프로젝트를 변경을 진행을 해야될거 같아서 라이브러리의 충돌을 방지하기 위해서 신규 프로젝트로 종속성 및 설정등을 진행하고 기존 프로젝트에 적용을 하려고 했으나 시작 부터 에러가 발생한다... ⚡ 이슈 및 설정 관련 내용 정리 spring boot 3.x 버전에 대해서 공식 페이지에 나와있는 설명 및 추가적으로 바뀐 부분에 대해서 확인을 했었지만... 까먹고 설정을 하다가 이슈를 확인 하고 수정을 했다. 검색을 해보니 해당 문제를 접하는 개발자 분들이 많은거 같아서 정리를 해보려고 한다. 📚 개발 스텍 Kotlin JAVA 17 Spring boot 3.1.4 Gradle ..
· Spring
⚡ 개요 Spring Boot에서 QueryDsl을 사용하는 방법에는 여러 가지 방법이 존재한다. 내가 가장 많이 사용하는 방식은 queryFactory를 이용하는 방식을 사용한다. 회사에서 개발을 하면서 단일 테이블 기준으로 데이터를 뽑아낼 수 있는 부분이 적고 데이터량이 많다. 이외, 다른 방식들이 있는데 이부분에 대해서 정리를 하면서 잘못 쓰고 있는 부분이 있는지 체크를 해보려고 한다. ⚡ 사용 방법 querydsl을 사용하는 이유부터 생각을 해보자. 만약 spring boot JPA 및 JPQL을 사용해서 쿼리를 구현 한다고 생각해봤을때 단건 조회 또는 적당한 조건에 따른 조회는 크게 문제가 되지 않는다. 하지만 쿼리가 복잡해지고 조건이 많아지는 순간 실수가 발생할 가능성이 존재하고 유지보수에 어..
· Spring
⚡ 개요 기본적으로 QueryDsl을 사용할때 QClass가 생성이 된다. 초기에 QueryDSL을 사용하면서 궁금했던 내용은 그냥 Entity를 사용해도 될거같은데 굳이 QClass를 만들어서 사용을 할까? 어떻게 만드는거지? 라는 기본적인 궁금증에서 래퍼런스 문서 부터 많은 블로그의 내용을 찾아봤으며 해당 내용을 정리 해보려고 한다. JPA_APT(JPAAnnotationProcessorTool)가 @Enttiy 와 같은 특정 어노테이션을 찾고 해당 클래스를 분석해서 QClass를 만들어 준다. 빌드 도구를 통해서 만드는 방법은 다른곳을 찾아봐도 나오니 생략한다. (Gradle의 경우, 버전별로 설정을 하는 방식이 다르기 때문에 버전에 맞게 잘 찾아서 사용 해야 한다.) ✋ APT 란 ? Annota..
· Java
⚡ 개요 이번에는 QueryDsl에서 DateType을 사용하는 방법에 대해서 정리를 해보려고 한다. QueryDsl을 사용하면서 Projections을 통해 쿼리 결과를 DTO 클래스로 변환해서 반환을 받고 리턴을 하는 경우가 종종 있다. 이때 조회 Entity 의 타입이 Date Type인 경우 변환을 할때 타입 에러가 발생하게 된다. 우리의 경우 데이터를 조회할때 예를 들어 1000개의 데이터중 필요한 Entity를 조회 해서 DTO로 변환을 하는 작업을 한다. 데이터의 양이 적다면 속도적인 측면에서 크게 문제가 되지 않지만 이력쪽 데이터를 조회하는 경우에는 속도적인 측면에서 많은 저하가 발생을 하게 되었다. 또한 데이터가 적더라도 컬럼의 타입 그대로가 아닌 변환을 해서 사용 해야하는 경우에도 En..
· Spring
QueryDsl서브쿼리를 사용하는 방법에 대해서 내용을 한번 정리해보려고 한다. 회사 내부 신규 프로젝트의 경우 Spring Boot + JPA를 기반으로 프로젝트를 진행하고 있다. 내부적으로 쿼리 작업을 하면서 Spring Data JPA에서 기본적으로 제공해 주는 CRUD 메서드를 사용하더라도 데이터를 얻는 데에 많은 어려움이 존재했고, QueryDsl 라이브러리를 통해서 원하는 데이터를 얻어내고 있다. 그중 많이 사용하지만 매번 까먹는 내용인 서브 쿼리 사용 방법에 대해서 정리를 하려고 한다.😀 ⚡QClass 생성 가장 기본적으로 QueryDsl을 사용하려면 먼저 QClass를 생성해야 한다. QClass는 Querydsl에서 사용하는 엔티티의 필드와 연산자에 대한 메타 정보를 제공하는 클래스이다...
HaeTae
'QueryDSL' 태그의 글 목록