현재 개발하고 있는 서비스의 소설 리스트 조회 기능은 아래와 같다.
- 전체 리스트 조회
- 카테고리별 리스트 조회
- 소설의 카테고리로 필터링 해 특정 카테고리의 소설들만 조회한다.
- 신작 소설 리스트 조회
3개 조회 종류 모두 아래 4개의 정렬 기준으로 정렬할 수 있다.
- 인기순
- 최근 3일간 집계된 조회수를 기준으로 내림차순으로 정렬한다.
- 업데이트순
- 가장 최신 회차의 등록일을 기준으로 내림차순으로 정렬한다.
- 좋아요순
- 소설의 좋아요 수를 기준으로 내림차순으로 정렬한다.
- 조회순
- 소설의 총 조회수를 기준으로 내림차순으로 정렬한다.
또한 페이징 처리는 무한 스크롤을 지원하기 위해 커서 기반으로 구현하였다. 각각의 정렬 기준별 커서 적용 방식은 아래와 같다.
- 우선 동점처리는 모두 동일하게 소설의 id < 마지막으로 조회한 소설의 id 로 구현했다.
- 인기순
- 최근 3일간 집계된 조회수 < 마지막으로 조회한 소설의 3일간 집계된 조회수
- 업데이트순
- 가장 최신 회차의 등록일 < 마지막으로 조회한 소설의 가장 최신 회차의 등록일
- 좋아요순
- 소설의 좋아요 수 < 마지막으로 조회한 소설의 좋아요 수
- 조회순
- 소설의 총 조회수 < 마지막으로 조회한 소설의 총 조회수
이런식으로 소설의 조회 종류는 3가지가 있고, 정렬 기준도 4가지나 된다. 여기서 초반에 어떤식으로 구현해야 할지 정말 많은 고민을 했다.
일단 가장 간단하게 생각해보면 조회 종류 + 정렬 기준 조합으로 메서드들을 만들수 있겠다.
예를 들어, 아래와 같다.