AI Briefing

카카오메이커스, Next.js ISR과 Redis 외부 캐싱으로 SSR 부하 해결

·2025.09.09 00:00

핵심 내용

TPS 4.6배 향상과 응답 시간 4배 단축을 달성했으며, Nginx 정적 리소스 서빙으로 추가 최적화를 진행했다.

1 / 10

자세히 보기

카카오메이커스는 이벤트 서비스의 Next.js SSR 전환 후 카카오톡 채널 메시지 발송 시 발생하는 순간 트래픽 폭주로 서버 장애를 겪었다. 이를 해결하기 위해 **ISR(Incremental Static Regeneration)**과 Redis 외부 캐싱을 도입해 서버 부하를 줄이고 성능을 개선했다.

ISR 적용과 캐싱 전략

ISR은 정적 페이지를 필요할 때 부분적으로 재생성하는 방식으로, SSG의 성능과 SSR의 유연성을 동시에 제공한다. 카카오메이커스는 generateStaticParams를 활용해 정적 경로를 확정하고, revalidate 시간을 설정해 캐시를 관리했다. 특히 쿠키나 헤더 등 동적 API가 포함되면 ISR이 해제되므로, 개인화 데이터는 클라이언트에서 처리하도록 분리했다.

캐시 재검증은 시간 기반과 온디맨드 방식을 하이브리드로 사용했다. CMS 수정 시 revalidatePath를 호출해 캐시를 즉시 무효화하고, curl 기반 Prefetch 로직으로 실제 사용자 요청 전 캐시를 미리 채워 Thunder Herd 문제를 완화했다. 보안상 온디맨드 재검증 API는 사내망 IP로 제한했다.

Redis 도입과 운영 환경 최적화

PM2 클러스터 모드 운영 시 인스턴스 간 인메모리 캐시 불일치 문제를 해결하기 위해 Redis를 외부 공유 캐시로 도입했다. @neshca/cache-handler를 활용해 Redis를 Next.js 캐시 핸들러로 연결했으며, 이를 통해 여러 인스턴스가 동일한 캐시 데이터를 공유할 수 있게 됐다. 또한 정적 리소스는 CDN 대신 Nginx에서 직접 서빙하도록 설정해 네트워크 오버헤드를 줄이고 응답 속도를 개선했다.

성능 개선 결과 및 향후 과제

이러한 최적화를 통해 TPS는 4.6배 향상되고 응답 시간(MTT)은 4배 단축되었다. Nginx 정적 리소스 서빙만으로도 TPS 28% 향상과 응답 시간 36% 단축 효과를 거뒀다. 향후에는 Redis Pub/Sub을 활용해 인메모리 캐시 성능을 유지하면서 캐시 동기화 문제를 해결하고, 배포 시점의 Thunder Herd 문제를 보완하기 위해 빌드 시점 SSG 생성을 확대할 계획이다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.