항해99/TIL | WIL

2023.03.20 (71일)

태감새 2023. 3. 21. 00:14

Day 70


- 실전 프로젝트 

오늘은 검색 결과 페이지 수정과 QueryDSL을 이용해서 검색 로직을 변경했다. 

1. 검색 페이지 수정 

 검색 후 추가적인 필터 검색을 할 때 입력값들이 유지되지 않고 다 날라가버리는 문제를 수정했다. 새로운 페이지가 렌더링될 때 입력받은 값을 각각 input으로 입력되도록 변경해서 불편함을 줄였다. 

2. QueryDSL을 활용한 동적인 쿼리 작성 

 다양한 필터 적용 시 필터의 입력이 없을 시에는 조건이 들어가면 안되고 입력이 있는 경우에만 조건이 들어가야 한다. 그리고 몇 개의 필터는 입력 상황에 따라 필요한 조건도 달라지는 경우도 있었다. 예를 들면 최저 가격과 최대 가격을 입력하는 경우,

 

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

2) 최소 가격만 입력하는 경우 → 최소 가격 이상 조건

3) 최대 가격만 입력하는 경우 → 최대 가격 이하 조건

4) 둘 다 입력하는 경우 → 최소 가격 이상 최대 가격 이하 조건  

 

와 같이 네 가지 경우가 존재한다.

 이를 JPQL을 사용해서 쿼리를 작성한다면 엄청 복잡하고 더러운 조건문이 덕지덕지 붙을 것이다. 그리고실수가 안나올 수가 없다. 이런 동적인 쿼리를 가능하게 해주는 것이 QueryDSL이다. QueryDSL은 자바의 문법을 따르며 문제가 있을 시 컴파일 에러로 실수를 바로 알려준다. 코드도 직관적이고 여러 장점이 많지만 가장 큰 장점은 동적인 쿼리를 간편하고 직관적으로 작성할 수 있게 해준다는 점이다. 조건절인 WHERE문에 조건으로 null값이 입력되면 알아서 무시하고 조건절이 입력되면 그 조건을 반영해준다. QueryDSL덕분에 나름 쉽게(?) 코드를 작성할 수 있었다. 

 오늘 QueryDSL에 대해 알아낸 사실이 하나 있는데 orderBy() 절에 null값이 들어가면 런타임 예외가 발생한다. 그래서 orderBy()에서 조건 없음을 반환하고 싶으면 null 대신 

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

를 반환하면 된다.

'항해99 > TIL | WIL' 카테고리의 다른 글

2023.03.22 (73일)  (0) 2023.03.23
2023.03.21 (72일)  (0) 2023.03.22
2023.03.19 (70일)  (0) 2023.03.19
WIL (9주)  (0) 2023.03.19
2023.03.18 (69일)  (0) 2023.03.19