오늘 한 일
@Bean
public PageableHandlerMethodArgumentResolverCustomizer customize() {
return p -> p.setOneIndexedParameters(true);
}
- ElasticsearchRepository도 pageable만 받으면 쉽게 페이징을 구현할 수 있다.
@Query("{\"bool\": {\"must\": [{\"match\": {\"title\": \"?0\"}}, {\"match\": {\"isOpen\": \"?1\"}}]}}")
List<IssueDocument> findAllByTitleAndIsOpen(String title, boolean isOpen, Pageable pageable);
- querydsl에서 pageable을 매개변수로 받으면
@PageableDefault(size = 25, sort = "createdDateTime", direction = Sort.Direction.DESC) Pageable pageable)
에 설정한 값들을 가져올 수 있다.
findAllIssuesFilteredByStatusAndSearchRequest(String status, FilterRequestDTO searchRequest, Pageable pageable) {
JPAQuery<Issue> query = findIssuesByStatusAndSearchRequest(status, searchRequest, pageable);
for (Sort.Order o : pageable.getSort()) {
PathBuilder<Issue> pathBuilder = new PathBuilder<>(issue.getType(), issue.getMetadata());
query.orderBy(new OrderSpecifier(o.isAscending() ? Order.ASC : Order.DESC,
pathBuilder.get(o.getProperty())));
}
return query.fetch();
}
✔️ nginx 설정 변경
server {
listen 80;
listen [::]:80;
server_name localhost;
location /api {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location / {
root /home/ubuntu/build;
index index.html;
try_files $uri /index.html;
}
}
✔️ 알고리즘 스터디
✔️ querydsl 필터링 기능 삽질
- 문제 상황
- querydsl를 이용하여 조건에 따른 필터링 기능을 구현하였는데, 라벨이 여러개 들어올 때 한 가지 라벨만 포함되어도 이슈가 검색된다.
- 시도해본 것
- issue.labels와 label을 leftJoin에서 innerJoin으로 변경
- in 쿼리 대신 모든 label을 순회하며 eq로 비교하도록 변경
BooleanBuilder booleanBuilder = new BooleanBuilder();
for(Label each : labelsList) {
booleanBuilder.and(label.eq(each));
}
return booleanBuilder;
✔️ 카카오페이 서버 개발자 과제 챌린지
느낀 점
- 코드스쿼드 끝나면 알고리즘 문제 풀이에 올인하려고 했는데 주말에 해커톤 팀빌딩도 있고, 카카오페이 서버 개발자 과제 챌린지도 그렇고, 프로젝트도 그렇고... 생각보다 일정이 너무 많다. 이번 건만 끝나면 뭐 따로 신청하지 말고 알고리즘 공부에 집중해야겠다.
- 필터링 기능 관련하여 문제가 발생했는데 해결하지 못했다. 단에게 서브쿼리나 필터를 써보라는 피드백을 받았는데 조건을 잘 확인해보고, querydsl로 짜기 전에 sql문으로 먼저 작성해봐야겠다.
- k 덕분에 새로고침 시 페이지 로딩이 되지 않는 문제를 금방 해결할 수 있었다. 그 동안 배포를 그렇게 많이 했는데, 기본적인 설정들에 대해 충분히 공부하지 않고 사용했던 것 같아 부끄럽다. 뭐 하나라도 대충대충 넘기는 습관을 고치고, 이해하려고 노력해봐야겠다.
- 카카오페이 서버 개발자 과제 챌린지가 시작되었다. 일요일까지는 정해진 일정 외 남는 시간에 과제 챌린지를 수행할 것 같다.
쿼리DSL 페이져블은 이슈트레커 프로젝트에서 쓰시는건가요?? 아니면 카카오페이 서버개발자 챌린지에서 진행하시는건가요? 저도 요즘 JPA 페이져블 쓰는중인데 새롭더라구요..ㅋㅋ.....