자바 프로그래밍 11주차 학습일지

1. 학습한 내용 정리

QueryDSL의 기본 문법과 동적 쿼리를 생성하는 방법을 복습하였습니다.
BooleanBuilder를 사용하여 조건을 유연하게 조합하는 방식을 학습하였습니다.
eq, goe 등을 사용하여 필드 값을 비교하는 방법을 다시 정리하였습니다.
CRUD 기능을 구현하기 위한 프로젝트 환경을 설정하고 테스트 코드를 작성하는 방법을 학습하였습니다.
@Sql 어노테이션을 사용하여 테스트 데이터 삽입 후 QueryDSL로 조회하는 흐름을 이해하였습니다.

2. 작성한 핵심 코드 설명

@Override public List<Course> findByConditionsWithBuilder(String type, String keyword) { return queryFactory.selectFrom(course).where(buildKey(type,keyword)).orderBy(course.rating.asc()).fetch(); }
Java
복사
findByConditionsWithBuilder 메서드는 BooleanBuilder를 기반으로 동적 조회 조건을 적용하기 위해 작성하였습니다.
이 메서드는 입력된 type(N, C, D)에 따라 강의명, 카테고리, 설명 중 하나를 containsIgnoreCase로 검색하도록 동작하게 구성하였습니다.
buildKey 메서드는 사용자가 넣은 type 값에 따라 적절한 조건을 BooleanBuilder에 추가하며, Keyword가 포함되는지 비교하는 필터 역할을 하였습니다.
테스트 코드에서는 type과 keyword를 기준으로 조회된 모든 Course 객체가 조건을 만족하는지 검증하였습니다.
findByCategoryAndMinRating 메서드는 category가 동일하고 rating이 주어진 값 이상인 강의를 조회하기 위해 사용되었으며, 평점 기준 내림차순으로 정렬하도록 구성하였습니다.
eqCategory와 goeMinRating을 조합하여 where 절을 구성하는 방식을 통해 QueryDSL이 메서드 기반으로 조건을 추가할 수 있다는 점을 확인하였습니다.

3. 오류 해결 과정 및 주의사항

BooleanBuilder 사용 시 반환 값이 없는 경우 null을 넣어야 where 절이 비정상적으로 동작하지 않는다는 점을 알 수 있었습니다.
QueryDSL에서 or 조건을 사용할 때에는 BooleanBuilder에 값을 계속 추가해야 하며, 잘못된 필드명을 작성할 경우 빌드 시점에서 오류가 발생한다는 점을 알 수 있었습니다.
@Sql로 테스트 데이터를 넣는 과정에서 파일 경로가 맞지 않는 경우 테스트가 빈 데이터로 실행된다는 문제를 확인하였고, 파일 위치를 정확하게 맞춰야 한다는 점을 주의할 점으로 기록하였습니다.

4. 연습문제 풀이

QueryDSL을 사용하여 category가 동일(eq)하고 rating이 주어진 값 이상(goe)인 강의를 조회하는 메서드를 작성하였습니다.
@Override public List<Course> findByCategoryAndMinRating(String category, int rating) { return queryFactory.selectFrom(course).where( eqCategory(category), goeMinRating(rating) ).orderBy(course.rating.desc()).fetch(); }
Java
복사
이 코드를 통해 where 절에서 여러 조건을 콤마로 나열하면 기본적으로 and 조건으로 묶여 처리된다는 것을 알 수 있었습니다.
또한 orderBy를 통해 결과를 평점 기준 내림차순으로 정렬할 수 있다는 점을 복습하였습니다.