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 캐싱 적용 예정.

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions