해당 게시글은 Querydsl에 관하여 공부하다가 정리하는 글들 중 하나이며,
다음 글 - Querydsl 초급 문법. Q-Type에 관하여
에 관심 있으시다면 링크를 연결시켜두었으니 클릭하시면 이동됩니다.
👉 Querydsl 이란?
Querydsl은 하이버네이트 쿼리 언어(HQL: Hibernate Query Language)의 쿼리를 typesafe 하게 생성 및 관리해주는 프레임워크이다.
Querydsl은 정적 타입을 이용하여 SQL과 같은 쿼리를 생성할 수 있게 해 준다.
자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결할 수 있는 것이 QueryDSL이다.
Querydsl이 등장하기 이전에는 Mybatis, JPQL, Criteria 등 문자열 형태로 쿼리문을 작성하여 컴파일 시에 오류를 발견하는 것이 불가능했다.
하지만, Querydsl은 자바코드로 SQL문을 작성할 수 있어 컴파일 시에 오류가 발생하여 잘못된 쿼리가 실행되는 것을 방지할 수 있다.
- 출처: https://ittrue.tistory.com/292 [IT is True:티스토리]
자세한 설명을 위해 쿼리문으로 주로 사용되어 온 JPQL과 Querydsl 과의 차이를 보자.
👉 JPQL vs Querydsl
JPQL
String username = "java";
String jpql = "select m from Member m where m.username = :username";
List<Member> result = em.createQuery(query, Member.class).getResultList();
JPQL은 JPA에서 지원하는 다양한 쿼리 방법 중 가장 단순한 조회 방법으로, SQL의 경우에는 DB 테이블을 대상으로 쿼리를 질의하지만, JPQL은 엔티티 객체를 대상으로 쿼리를 질의한다.
JPQL의 단점
- JPQL은 위 코드에서 볼 수 있듯, 쿼리를 여전히 문자열로 입력하므로 오타가 발생하면 관리하기가 어렵고, type-check가 불가능하다.
- 이러한 이유로 컴파일 단계에서는 오류가 발생하지 않아서 런타임에서 해당 쿼리가 실행되어야 오류를 발견할 수 있다.
Querydsl
String username = "java";
List<Member> result = queryFactory
.select(member)
.from(member)
.where(usernameEq(username))
.fetch();
Querydsl의 장점
- QueryDSL은 쿼리를 코드를 통해 작성하기 때문에 오타가 발생할 확률이 줄고, 객체 지향적으로 개발할 수 있다.
- 컴파일 단계에서도 오류를 빠르게 발견할 수 있다.
위와 같은 이유로 Querydsl을 사용한다. 구글링하던 중, Querydsl의 필요성을 딱히 못 느껴 JPQL을 주로 사용하다가 Querydsl을 사용할 수 밖에 없던 상황을 마주한 분의 좋은 블로그 글이 있어 첨부해둔다.
실무에서 JPQL 대신 Querydsl을 많이 사용하는 이유
다음 게시글부터는 Querydsl의 기본 문법에 대해서 정리해보겠다.
참고
https://ittrue.tistory.com/292
'Spring > Querydsl' 카테고리의 다른 글
Querydsl - QClass란? (0) | 2024.03.03 |
---|---|
Query(쿼리)란 무엇인가? (0) | 2024.03.03 |
[실전! Querydsl 강의] 를 들으며 (인프런 - 김영한 강사님) (0) | 2024.02.28 |