[221101] QueryDSL(1)

Younseo·2022년 11월 1일
1

TIL Study

목록 보기
12/27

🐸 QueryDsl이란?

Spring Data JPA가 제공하는 기본적인 CRUD method 및 query method 기능을 사용할 수 있다. 이번 miniproject할 때, 다양한 조건별로 조회하기 위해서 아래와 같은 JPA로직을 구현했었다.

public interface PostRepository extends JpaRepository<Post, Long> {

    // 시간순 정렬
    List<Post> findAllByOrderByCreatedAtDesc();
    List<Post> findPostsByTagOrderByCreatedAtDesc(String tag);
    List<Post> findPostsByAccount_AccountTeamOrderByCreatedAtDesc(String accountTeam);
    List<Post> findPostsByAccount_AccountTeamAndTagOrderByCreatedAtDesc(String accountTeam, String tag);

    // 좋아요 정렬
    List<Post> findAllByOrderByPostLikeCountDescCreatedAtDesc();
    List<Post> findPostsByTagOrderByPostLikeCountDescCreatedAtDesc(String tag);
    List<Post> findPostsByAccount_AccountTeamOrderByPostLikeCountDescCreatedAtDesc(String accountTeam);
    List<Post> findPostsByAccount_AccountTeamAndTagOrderByPostLikeCountDescCreatedAtDesc(String accountTeam, String tag);

    List<Post> findPostsByAccount(Account account);
}

단순 조건 별 조회임에도 불구하고 매서드 명이 너무 길고, 파라미터가 너무 많다.
다른 추가적인 조건절이 있다면 더 복잡해질 것이다! 간단한 로직이라면 크게 상관없지만, 복잡한 로직의 경우 쿼리 문자열이 상당히 길어진다. 원하는 조건의 데이터를 수집하기 위해서는 JPQL작성이 필수적이다. 문자열에 오타나 문법적인 오류가 존재하는 경우에 정적쿼리는 application loading시점에 이를 알 수 있으나, 그 외에는 매소드가 실행될 때 알 수 있다.
JPQL을 직접 작성하는 문제를 어느정도 해소해 주는 spring framework가 바로 QueryDsl이다. QueryDsl은 정적 타입을 사용해서 SQL 등의 쿼리를 생성해 주는 프레임워크이다.

QueryDsl의 장점

  1. 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다.
  2. 자동 완성 등 IDE의 도움을 받을 수 있다.
  3. 동적인 쿼리 작성이 편리하다.
  4. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.

Resource

Spring Boot에 QueryDSL을 사용해보자
[Spring] QueryDSL 완벽 이해하기

0개의 댓글