[ 김영한 스프링 DB 2편 - 데이터 접근 활용 기술 #7 ] 데이터 접근 기술 - Querydsl

김수호·2023년 10월 25일
0
post-thumbnail

이번 섹션에서는 [데이터 접근 기술 - Querydsl]에 대해서 알아보자.

👉 목차는 다음과 같다.

1) Querydsl 설정
2) Querydsl 적용
3) 정리

바로 하나씩 확인해보자.


1) Querydsl 설정

  • build.gradle 추가 (1)
  • build.gradle 추가 (2)

 

✔️ 참고

  • Gradle or IntelliJ IDEA 옵션 지정에 따른 Q타입 생성 확인 방법은 강의를 참고하자.

2) Querydsl 적용

  • JpaItemRepositoryV3 생성: src > main > java > hello > itemservice > repository > jpa 패키지 내부에 JpaItemRepositoryV3 클래스를 생성하자.

 

✔️ 코드 분석

  • 공통
    • Querydsl을 사용하려면 JPAQueryFactory 가 필요하다. JPAQueryFactory 는 JPA 쿼리인 JPQL을 만들기 때문에 EntityManager 가 필요하다.
    • 설정 방식은 JdbcTemplate 을 설정하는 것과 유사하다.
    • 참고로 JPAQueryFactory 를 스프링 빈으로 등록해서 사용해도 된다.
  • save(), update(), findById()
    • 기본 기능들은 JPA가 제공하는 기본 기능을 사용한다.
  • findAllOld()
    • Querydsl을 사용해서 동적 쿼리 문제를 해결한다.
    • BooleanBuilder 를 사용해서 원하는 where 조건들을 넣어주면 된다.
    • 이 모든 것을 자바 코드로 작성하기 때문에 동적 쿼리를 매우 편리하게 작성할 수 있다.
  • findAll()
    • findAllOld 에서 작성한 코드를 깔끔하게 리팩토링 했다. 다음 코드는 누가 봐도 쉽게 이해할 수 있을 것이다.
      • Querydsl에서 where(A,B) 에 다양한 조건들을 직접 넣을 수 있는데, 이렇게 넣으면 AND 조건으로 처리된다. 참고로 where()null 을 입력하면 해당 조건은 무시한다.
      • 이 코드의 또 다른 장점은 likeItemName() , maxPrice() 를 다른 쿼리를 작성할 때 재사용 할 수 있다는 점이다. 쉽게 이야기해서 쿼리 조건을 부분적으로 모듈화 할 수 있다. 자바 코드로 개발하기 때문에 얻을 수 있는 큰 장점이다.

 

👉 이제 설정하고 실행해보자.

  • QuerydslConfig 생성: src > main > java > hello > itemservice > config 패키지 내부에 QuerydslConfig 클래스를 생성하자.
  • ItemServiceApplication - 변경: 다음과 같이 수정하자.
    • QuerydslConfig 를 사용하도록 변경했다.
  • 테스트 실행 - 먼저 ItemRepositoryTest 를 통해서 리포지토리가 정상 동작하는지 확인해보자.
    • 정상적으로 실행되는 것을 확인할 수 있다.
  • 애플리케이션 실행 - ItemServiceApplication 를 실행해서 애플리케이션이 정상 동작하는지 확인해보자.
    • 정상적으로 실행되는 것을 확인할 수 있다.
  • (참고) 예외 변환
    • Querydsl 은 별도의 스프링 예외 추상화를 지원하지 않는다. 대신에 JPA에서 학습한 것 처럼 @Repository 에서 스프링 예외 추상화를 처리해준다.

3) 정리

Querydsl 장점

  • Querydsl 덕분에 동적 쿼리를 매우 깔끔하게 사용할 수 있다.
    • 쿼리 문장에 오타가 있어도 컴파일 시점에 오류를 막을 수 있다.
    • 메서드 추출을 통해서 코드를 재사용할 수 있다. 예를 들어서 여기서 만든 likeItemName(itemName) , maxPrice(maxPrice) 메서드를 다른 쿼리에서도 함께 사용할 수 있다.

Querydsl을 사용해서 자바 코드로 쿼리를 작성하는 장점을 경험해보았다. 그리고 동적 쿼리 문제도 깔끔하게 해결해보았다. Querydsl은 이외에도 수많은 편리한 기능을 제공한다. 예를 들어서 최적의 쿼리 결과를 만들기 위해서 DTO로 편리하게 조회하는 기능은 실무에서 자주 사용하는 기능이다. JPA를 사용한다면 스프링 데이터 JPA와 Querydsl은 실무의 다양한 문제를 편리하게 해결하기 위해 선택하는 기본 기술이라 생각한다.


강의를 듣고 정리한 글입니다. 코드와 그림 등의 출처는 김영한 강사님께 있습니다.

profile
현실에서 한 발자국

0개의 댓글