210630-TIL

Jane·2021년 6월 30일
1

TIL

목록 보기
66/103
post-thumbnail

오늘 한 일

✔️ 페이징 기능 구현

  • 페이지의 기본값을 1로 설정
    @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 덕분에 새로고침 시 페이지 로딩이 되지 않는 문제를 금방 해결할 수 있었다. 그 동안 배포를 그렇게 많이 했는데, 기본적인 설정들에 대해 충분히 공부하지 않고 사용했던 것 같아 부끄럽다. 뭐 하나라도 대충대충 넘기는 습관을 고치고, 이해하려고 노력해봐야겠다.
  • 카카오페이 서버 개발자 과제 챌린지가 시작되었다. 일요일까지는 정해진 일정 외 남는 시간에 과제 챌린지를 수행할 것 같다.

2개의 댓글

comment-user-thumbnail
2021년 7월 1일

쿼리DSL 페이져블은 이슈트레커 프로젝트에서 쓰시는건가요?? 아니면 카카오페이 서버개발자 챌린지에서 진행하시는건가요? 저도 요즘 JPA 페이져블 쓰는중인데 새롭더라구요..ㅋㅋ.....

1개의 답글