피드로 돌아가기
What Happens When Your API Has 10,000 Rows? I Added Pagination and Caching to Find Out
Dev.toDev.to
Backend

10,000건 데이터 대응을 위한 Pagination 및 RWMutex 기반 Caching 설계

What Happens When Your API Has 10,000 Rows? I Added Pagination and Caching to Find Out

Abhishek Sharma2026년 4월 21일4beginner

Context

단일 엔드포인트에서 모든 데이터를 반환하는 구조로 인해 데이터 증가 시 응답 속도 저하 및 메모리 부하 발생 가능성 확인. 특히 전체 데이터 수를 계산하는 COUNT 쿼리의 반복 실행으로 인한 Database 부하 가중 문제를 해결해야 하는 상황.

Technical Solution

  • LIMIT 및 OFFSET 기반 Pagination 도입을 통한 데이터 전송량 최적화
  • 잘못된 쿼리 파라미터 입력 시 400 에러 대신 Default 값으로 처리하는 Fail Gracefully 전략 채택으로 API 가용성 확보
  • 반복적인 COUNT 쿼리 비용 절감을 위한 In-Memory Cache 계층 구현
  • Read-heavy 워크로드 최적화를 위해 전용 락인 sync.RWMutex를 사용하여 다중 Goroutine의 동시 읽기 성능 향상
  • User ID를 포함한 Scoped Cache Key 설계를 통해 사용자 간 데이터 격리 보장
  • 데이터 생성 및 삭제 이벤트 발생 시 해당 사용자의 캐시를 즉시 삭제하는 Cache Invalidation 로직 적용

- 선택적 힌트 성격의 API 파라미터는 엄격한 검증보다 기본값 폴백을 통한 서비스 연속성 확보 검토 - 읽기 비중이 높은 공유 자원 접근 시 Mutex 대신 RWMutex를 사용하여 Read Lock 경쟁 완화 - 캐시 키 설계 시 전역 키가 아닌 사용자/세션 단위의 Scope를 부여하여 데이터 오염 방지 - 데이터 변경 시점에 정밀한 캐시 무효화 전략을 세워 데이터 정합성 유지

원문 읽기