적용 영역 : 검색 캐싱, pub/sub 기반 알림, 분산락 기반 예약 시스템 등
우리 서비스는 사용자 수 증가 및 비동기 알림, 빠른 검색, 트래픽 폭증에 따른 동시성 문제 해결이 필요하다고 생각하여 Redis를 사용
서비스 확장에 따라 사용자 증가 및 데이터 요청량이 늘어날 것을 생각해서 성능 아래에 성능이슈 문제가 발생 할 수 도 있다는 점을 고려
동일 키워드에 대한 반복 검색으로 인한 DB 부하
사용자에게 보내야 할 실시간 알림이 지연
예약 기능에서 동시 요청에 따른 중복 처리 발생 위험
이러한 점들을 고려 하여 해결 하기 위해 데이터 접근 속도 향상, 실시간 처리 가능성, 분산 환경에서의 동기화가 가능한 캐시 시스템이 필요 하다고 생각하여 Redis를 적용
그렇다면 왜 ? 다른 캐시 기술들이 아닌 Redis를 사용 했는 가 라는 점에서는
캐시 기능에는 Oracle Coherence, Nginx + Fast CGI 캐시, CDN 캐시 (cloudflare) 등 여러가지 기술들이 있다 그럼에도 Redis를 사용한 이유는 아래에 비교 정리를 확인
Oracle Coherence
장점 : 고신뢰, 대규모 분산 캐시 가능
단점 : 복잡한 설정, 높은 비용
Redis 와의 비교
Reids 보다 안정성이 높지만 초기 진입 장벽이 크고 높은 비용이 발생
여기서 초기 진입 장벽에 대한 점은 Redis 는 단일 실행 파일로 작동 가능 , 로컬에서 바로 docker run rdis만 해도 실행 가능
반면, Oracle Coherence는
캐시 설정 XML
클러스터 토폴로지
Discovery 방식 (Multicast vs Well-known Address)
Coherence Extend 설정 (클라이언트-서버 모드)
시작 과정에서만 봐도 차이점이 많이나고
이후 운영/배포 복잡도에서도 Oracle Coherence이 Redis보다 번거로움이 발생
Redis는 단일 인스턴스로 시작해서, 추후에 Sentinel 또는 Cluster로 확장 가능
Oracle Coherence는 기본적으로 클러스터를 염두에 둔 구조라, 단일 개발/테스트 환경 구성 조차 무거움
이러한 문제와 라이선스/비용/접근성 문제, 커뮤니티와 자료 부족, Spring 생태계 통합 등의 이유로 Oracle Coherence는 적합 하지 않다고 판단
Nginx + FastCGI 캐시
장점 : 웹 정적 자원 캐싱에 최적
단점 : 동적 요청 캐싱 불가
Redis 와의 비교
우리 서비스에서는 동적 자원들이 존해하여 Nginx + FastCGI 캐시도 사용이 적합 하지 않다고 판단
CDN 캐시 (Cloudflare 등)
장점 : 전 세계 엣지 캐싱, 속도 향상
단점 : 컨텐즈 제어 어려움, 실시간성 부족
Redis 와의 비교
Redis는 서버 내부에서 즉시 캐싱 가능 이러한 이유로 CDN 캐시 또한 적합 하지 않다고 판단
단순한 정적 캐싱만 필요한 경우라면 Nginx나 CDN 캐시도 가능 했겠지만, 검색 캐싱, 예약 분산락, 실시간 알림 등 다양한 점들을 해결이 필요했고, 현재는 배워가는 단계에서 비용적인 문제가 발생 하는 점도 고려 해봤을때, Redis가 속도, 유연성, 확장성 측면에서 가장 적합한 선택이라고 판단 하여 적용