2023-03-20 (71일)

70일


– 실습 프로젝트

오늘 우리는 검색 결과 페이지를 변경하고 QueryDSL을 사용하여 검색 논리를 변경했습니다.

1. 검색 페이지 변경

검색 후 추가 필터 검색을 수행할 때 입력 값이 보존되지 않고 손실되는 문제를 수정했습니다. 새 페이지 렌더링 시 입력값을 입력으로 변경하여 불편함을 줄였습니다.

2. QueryDSL로 동적 쿼리 작성

다른 필터를 적용할 때 필터 입력이 없으면 조건을 입력하지 말고 입력이 있는 경우에만 조건을 입력해야 합니다. 또한 입력 상황에 따라 일부 필터의 요구 조건이 달라지는 경우가 있었습니다. 예를 들어 최저 가격과 최고 가격을 입력하면

1) 둘 다 입력되지 않은 경우 → 조건 제거

2) 최저가만 입력한 경우 → 최저가 이상 조건

3) 상한가만 입력하는 경우 → 상한가 이하 조건

4) 둘 다 입력한 경우 → 최저가 이상 및 최고가 이하 조건

다음과 같이 4가지 경우가 있습니다.

JPQL을 사용하여 쿼리를 작성할 때 매우 복잡하고 지저분한 조건문으로 끝납니다. 그리고 실수는 나올 수 없습니다. QueryDSL은 이러한 동적 쿼리를 가능하게 합니다. QueryDSL은 Java의 구문을 따르며 컴파일 오류와 관련된 문제를 즉시 알려줍니다. 코드가 직관적이고 많은 장점이 있지만 가장 큰 장점은 동적 쿼리를 쉽고 직관적으로 작성할 수 있다는 것입니다. 조건절인 WHERE 문에 조건으로 null 값이 입력되면 무시되고, 조건절이 입력되면 조건이 렌더링됩니다. QueryDSL 덕분에 코드를 쉽게(?) 작성할 수 있었습니다.

오늘 QueryDSL에 대해 알게 된 사실 중 하나는 orderBy() 절에 null 값이 입력되면 런타임 예외가 발생한다는 것입니다. 따라서 null 대신 orderBy()에서 조건을 반환하지 않으려면

new OrderSpecifier(Order.ASC, NullExpression.DEFAULT, OrderSpecifier.NullHandling.Default)

반환해야