QueryDSL을 사용하는 이유
JPA만으로도 기본적인 DB 작업은 가능하다.
하지만 복잡한 조회나 성능 최적화, 동적 쿼리 작성에는 한계가 있어서, 그걸 보완하고자 JPQL이나 QueryDSL을 사용한다.
그중에서 QueryDSL을 사용하는 이유는
JPQL처럼 복잡한 조회 가능한데 문자열이 아니라 자바 코드로 작성한다.
그래서 IDE 자동완성가 가능하며 오타를 컴파일 단계에서 잡기 쉽다.
또한, 동적 쿼리를 간결하게 작성 가능하며 코드 가독성 및 유지보수성이 좋다.
더보기
JPA는 자바 객체와 데이터베이스를 연결해 주는 기술(정확히는 명세)이다.
QueryDSL 기본 구조
queryFactory
.select(조회대상)
.from(대상엔티티)
.where(조건)
.orderBy(정렬)
.fetch();
QueryDSL 설정
build.gradle 설정
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
:jakarta suffix가 반드시 필요하다.
Spring Boot 3.x는 javax.persistence 대신 jakarta.persistence 기반이다
QuerydslConfig 설정
@Configuration
public class QuerydslConfig {
@PersistenceContext
private EntityManager em;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(em);
}
}
Q-Type에 대하여
Q-Type은 QueryDSL이 엔티티 정보를 바탕으로 자동 생성해 주는 클래스이며,
엔티티를 문자열이 아닌 코드로 안전하게 조회할 수 있도록 도와주는 전용 검색용 클래스이다.
(build.gradle와 QuerydslConfig 설정이 잘 되었다면 한번 실행해주면 Q 클래스가 자동 생성이 된다!)
User 엔티티
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String username;
private int age;
}
생성된 QUser
@Generated("com.querydsl.codegen.EntitySerializer")
public class QUser extends EntityPathBase<User> {
public static final QUser user = new QUser("user");
public final StringPath username = createString("username");
public final NumberPath<Integer> age = createNumber("age", Integer.class);
}
Q클래스 생성 위치
build → classes → Entity를 생성한 패키지 위치 → QClass

'💻 Backend > 이론 및 실습' 카테고리의 다른 글
| Index (0) | 2026.03.31 |
|---|---|
| QueryDSL 검색 기능 구현 (0) | 2026.03.30 |
| VPC EC2 생성 (0) | 2026.03.10 |
| 클라우드 컴퓨팅 개념 정리 (On-Premise, IaaS, PaaS, SaaS) (0) | 2026.03.09 |
| 인증 & 인가 (0) | 2026.03.07 |