Skip to content

[Feature]: 게시판 페이지네이션 #10

Description

@devikae

Package Scope

  • Add to an existing package
  • New package

Package name: com.ikae.snowthing.domain.post

Overview

모바일 앱 및 PC 웹 환경을 모두 만족시키기 위한 웹 Offset / 모바일 Keyset Cursor 하이브리드 페이지네이션 및 Querydsl 동적 검색 API를 구축합니다.

PC 웹 유저를 위한 페이지 번호([1][2][3]) UX와 모바일 유저를 위한 무한 스크롤 $O(1)$ 성능을 동시에 제공하며, 추후 Redis 캐싱 및 Elasticsearch(ES) 확장에 대비 가능한 구조로 설계합니다.

Describe the solution you'd like

  1. 모바일 Cursor 기반 API 구현:

    • GET /api/v1/posts?cursor=xxx&size=20 (Keyset 커서 방식 적용, $O(1)$ 탐색)
    • Slice<PostListResponse> 반환 구조.
  2. 웹 Offset 기반 API 구현:

    • GET /api/v1/posts?page=1&size=20 (전통적 페이지 번호 지원)
    • Page<PostListResponse> 반환 구조.
    • DB 과부하 방지를 위한 최대 100페이지 한정(Hard Cap Validation)커버링 인덱스(Deferred Join) 적용.
  3. Querydsl 동적 검색 및 정렬:

    • 카테고리 필터링(categoryCode), 검색 조건(TITLE, WRITER, CONTENT), 정렬 방식(LATEST, POPULAR) 동적 쿼리 지원.
  4. 익명 및 통합 인기 게시판 (개념글):

    • is_anonymous = true 글의 개인정보 유출 방지 DTO 매퍼 치환.
    • 일반글+익명글 통합 인기 게시판 탭 및 [익명] 뱃지(Badge) 노출.

Additional context

  • 추후 확장 대비성:
    • cursor 파라미터는 Base64 암호화 토큰으로 표준화하여 추후 Elasticsearch 도입 시 search_after 커서로 백엔드 스위칭할 때 프론트엔드 API 규격 파괴 방지.
    • 추후 JWT/Redis 도입 시 웹 상위 목록(1~5페이지)에 Redis RAM 캐싱 적용 예정.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions