피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Keycloak 24+Redis 8.0 조합으로 10k 동시 접속 및 p99 89ms 달성
Deep Dive: How Keycloak 24 Manages 10k Users with PostgreSQL 17 and Redis 8.0
AI 요약
Context
기본 JDBC 기반 세션 저장소 사용 시 2k 동시 사용자 수준에서 write throughput 포화로 인한 성능 저하 발생. 특히 Infinispan 내장 캐시의 예측 불가능한 eviction 동작과 메모리 부족으로 인한 OOM 이슈가 시스템 확장성의 병목 지점으로 작용.
Technical Solution
- SessionStoreProvider SPI를 통한 JdbcSessionStore 대체 및 Redis 8.0 기반의 외장 세션 저장소 설계
- 3회의 JDBC 쿼리를 단일 HSET + HEXPIRE 명령으로 통합하여 세션 생성 레이턴시 80% 절감
- Redis 8.0의 hash field expiration 기능을 활용한 세션 데이터 관리 및 메모리 사용량 최적화
- PostgreSQL 17의 JSONB 인덱싱 적용을 통한 사용자 속성 조회 성능의 획기적 개선
- Infinispan 내장 캐시를 완전히 제거하여 노드당 300ms의 기동 오버헤드 제거 및 메모리 효율성 확보
- NGINX Plus를 통한 TLS Termination 및 proxy_protocol 설정을 활용한 Edge 계층 최적화
Impact
- p99 레이턴시 89ms 달성 및 10k 동시 사용자 수용 가능 확인
- DB roundtrips 72% 감소 및 유저 속성 조회 레이턴시 210ms에서 14ms로 단축
- Redis 6.2 대비 세션 저장 비용 63% 절감 및 전체 인프라 비용 40% 감소
- JDBC 기반 설정 대비 최대 동시 접속 처리량 5배 확장
Key Takeaway
쓰기 집약적인 세션 관리 워크로드를 RDBMS에서 In-memory Store로 분리함으로써 Database I/O 병목을 해결하고, 세밀한 TTL 제어(Hash Field TTL)를 통해 인프라 비용과 성능을 동시에 최적화하는 전략적 아키텍처 설계의 중요성.
실천 포인트
- 동시 접속 1k 이상의 Keycloak 환경인 경우 Redis
8.0 기반 외장 세션 저장소 도입 검토 - Jakarta EE 10 및 Jedis
5.0 호환성을 위해 Keycloak 24 버전 업그레이드 선행 - PostgreSQL 17 도입 시 사용자 속성 조회 쿼리에 JSONB 인덱스 적용 여부 확인 - 내장 Infinispan 사용 시 부하 상황에서의 Eviction 정책과 OOM 발생 가능성 벤치마크 수행