배경


서비스 상에서 데이터를 페이지별로 가져오는 플로우가 종종 존재한다. 대표적인 예는 차트 데이터를 가져오는 과정에서 1개월, 3개월, 6개월, 1년 으로 나누는 경우가 있다. 데이터를 전달하는데 있어서 효율적으로 클라이언트에게 알맞게 보낼 수 있는 방법에 대한 고민이 필요해졌다.

고려할 사항들


1. 데이터를 어떻게 전달할 것인가?

1개월에서 3개월로 갈 때는 2개월 치 데이터만 전달하고 3개월에서 1개월로 갈 때는 요청하지 않도록 함

데이터를 1개월과 3개월을 비교하면 3개월 데이터 내부에는 1개월 데이터가 존재하게 된다. 그래서 3개월 데이터를 요청했을 때 전부를 요청하는 것은 비효율적이다. 그렇기에 일부는 클라이언트 상에서 캐싱하여 데이터를 전달하고 일부는 데이터베이스에서 가져오는 그러한 전략이 필요할 것 같다. 따라서 만약에 클라이언트가 기본이 1개월이라고 가정했을 때 3개월을 요청하면 2개월 치만 전달해 주는 것이 효율적이다. 만약 반대로 3개월에서 1개월로 줄었다고 가정하면 그 때는 데이터 요청 없이 그냥 1개월 치만 보내주면 된다.

2. 어떤 것을 기준으로 전달해야 하는가?

생성된 날짜를 기준으로 전달

일단은 생성된 날짜를 기준으로 데이터 내역을 전달하는 것이 좋을 것 같다. 그러나 보여지는 데이터가 있고 안보이는 데이터가 존재하는데 차트 데이터를 Lazy Loading 하는 것이 가능할지는 의문이다.

목표


  1. QueryDSL 로 최적화를 통하여 다양한 데이터 기준으로 정렬할 수 있도록 로직을 설정할 수 있다.
  2. Pagination을 활용하여 데이터를 필요한 것만 전달할 수 있다.

계획


실제 개발을 하기 전에 기본 QueryDSL로 데이터 정렬을 어떻게 하는지 살펴볼 수 있다.

기본 컴포넌트 살펴보기