QueryDSL 검색 기능 구현
2026. 3. 30. 21:03

기본 검색 쿼리 작성

List<User> result = queryFactory
    .selectFrom(user)
    .where(
        user.roleEnum.eq(UserRoleEnum.NORMAL),
        user.email.endsWith("gmail.com")
    )
    // 쿼리문을 실행
    .fetch();

user 중에서 NORMAL 등급의 gmail.com 이메일을 가진 사용자를 조회하는 쿼리이다.

 

fetch()는 결과 리스트를 반환하며, fetchOne(), fetchFirst()로 단건 조회도 가능하다.

(단, 결과가 둘 이상이면 예외 발생)

결과 예시

앨리스 (alice@gmail.com)
찰리 (charlie@gmail.com)

 

검색 쿼리 작성 (정렬)

List<User> result = queryFactory
    .selectFrom(user)
    .orderBy(user.username.asc(), user.id.desc())
    .limit(3)
    .fetch();

사용자 이름은 오름차순, ID 내림차순 정렬 후 3명만 조회한다.

 

결과 예시

관리자
밥
앨리스

 

검색 쿼리 작성 (문자열 검색)

List<Post> result = queryFactory
    .selectFrom(post)
    .where(post.content.contains("여행"))
    .fetch();

“여행” 키워드가 포함된 게시글(Post) 조회한다.

결과 예시

후쿠오카 여행 후기  (작성자: 앨리스)

 

검색 쿼리 작성 (논리 조합)

List<User> result = queryFactory
    .selectFrom(user)
    .where(
           user.roleEnum.eq(UserRoleEnum.ADMIN)
             .or(user.username.contains("밥"))
    )
    .fetch();

ADMIN 사용자 또는 이름에 “밥”이 포함된 사용자 조회한다.

결과 예시

관리자 (ADMIN)
밥 (NORMAL)

 

검색 쿼리 작성 (조인 검색)

List<Post> result = queryFactory
    .selectFrom(post)
    .join(post.user, user)
    .where(user.username.eq("앨리스"))
    .fetch();

“앨리스”가 작성한 게시글(Post) 조회한다.

결과 예시

후쿠오카 여행 후기
조호바루 맛집 탐방
싱가포르 출퇴근 일상

 

검색 쿼리 작성 (Fetch Join)

List<Post> result = queryFactory
    .selectFrom(post)
    .join(post.user, user).fetchJoin()
    .fetch();

게시글과 작성자 정보를 한 번에 로딩한다.

결과 예시

List<Comment> comments = queryFactory
    .selectFrom(comment)
    .join(comment.post, post)
    .where(post.content.eq("리제로 3기 감상평"))
    .fetch();

 

 

검색 쿼리 작성 (댓글 검색)

List<Comment> comments = queryFactory
    .selectFrom(comment)
    .join(comment.post, post)
    .where(post.content.eq("리제로 3기 감상평"))
    .fetch();

"리제로 3기 감상평" 게시글의 모든 댓글을 조회한다.

결과 예시

리제로 명작이죠

 

검색 쿼리 작성 (페이징)

List<Post> page2 = queryFactory
    .selectFrom(post)
    .orderBy(post.id.asc())
    .offset(5)
    .limit(5)
    .fetch();

게시글 목록을 5개씩 조회 (2페이지: 6~10번 게시글)한다.

결과 예시

6. QueryDSL 실무 적용기
7. JPA 성능 튜닝 방법
8. Docker로 배포 환경 만들기
9. 리제로 3기 감상평
10. 롤체 시즌10 덱 분석

 

QueryDSL 기본 메서드 정리

 

'💻 Backend > 이론 및 실습' 카테고리의 다른 글

복합 인덱스  (0) 2026.03.31
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