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를 통해 결과를 평점 기준 내림차순으로 정렬할 수 있다는 점을 복습하였습니다.