본문 바로가기
JAVA/JPA

[Java / Spring / JPA] - Querydsl이란

by nam_ji 2024. 3. 31.

QueryDSL이란

  • QueryDSL이란 SQL, JPQL 등을 코드로 작성할 수 있도록 해주는 빌더 오픈소스 프레임워크입니다.

QueryDSL JPA

  • QueryDSL JPA은
    1. SQL, JPQL을 코드로 작성할 수 있도록 해주는 빌더 API입니다.
    2. Entity 클래스와 매핑되는 QClass라는 객체를 사용해서 쿼리를 실행합니다.
  • QClass란
    • QueryDSL은 컴파일 단계에서 엔티티를 기반으로 QClass를 생성하는데 JPAAnnotationProcessor가 컴파일 시점에 작동해서 @Entity 등등의 어노테이션을 찾아 해당 파일들을 분석해서 QClass를 만듭니다.
    • QClass는 Entity와 형태가 똑같은 static Class입니다.
    • QueryDSL은 쿼리를 작성할 때 QClass를 기반으로 쿼리를 실행합니다.
  • JPQL이란
    • JPA에서 지원하는 다양한 쿼리 방법 중 가장 단순한 조회 방법으로, SQL의 경우 DB 테이블을 대상으로 쿼리를 질의하지만, JPQL은 엔티티 객체를 대상으로 쿼리를 질의합니다.
  • JPQL의 문제점
    1. 쿼리를 문자열로 입력합니다.
      • 오타가 발생하거나 관리하는데 있어 어려움이 따르고 type check가 불가능합니다.
    2. 컴파일 단계에서 오류를 확인할 수 없고, 런타임에서 해당 쿼리가 실행되어야 오류를 발경할 수 있습니다.
      • 테스트 코드를 짜면 불안을 덜 수 있긴 하지만, 실제 프로그램을 운영하면서 오류가 발생할 수 있다는 부담이 커집니다.

QueryDSL JPA 사용하는 이유

  • QueryDSL은 쿼리를 문자열로서가 아닌 코드를 통해서 작성하기 때문에 오타가 날 확률이 적어지고, 객체 지향적으로 개발할 수 있습니다.
  • QueryDSL은 코드로서 작성하기 때문에 컴파일 단계에서 오류를 빠르게 발견할 수 있습니다.