캐싱만 붙이면 DB 부하 문제가 깔끔하게 해결될 거라고 믿는 분들이 생각보다 많습니다. 실제로 많은 프로젝트에서 Redis 하나만 얹어놓고 “이제 DB는 안 터진다”고 확신하지만, 정작 동시 접속자가 폭주하는 순간에는 캐시 미스(cache miss)가 연쇄적으로 발생하면서 DB 커넥션이 순식간에 고갈됩니다. 단일 캐시 계층으로 모든 트래픽을 받아내려 하면, 초반에는 캐시 히트율이 높게 유지되다가 특정 임계점을 넘으면 갑자기 히트율이 30% 이하로 추락하고, 그 빈 자리를 채우기 위해 DB가 감당할 수 없는 양의 쿼리를 처리해야 합니다. 결국, “Redis 붙였으니 걱정 없다”는 안일한 생각이 오히려 서버 폭발로 이어지는 지름길이 될 수 있습니다.
블루스카이 코리아는 이런 함정을 정확히 꿰뚫고 있었습니다. 일반적인 단일 캐시 접근 방식 대신 멀티 레이어 캐싱 구조를 도입해 L1(인메모리)과 L2(분산 캐시)를 명확히 분리했습니다. L1 계층은 각 애플리케이션 서버의 로컬 메모리에 핫데이터(자주 요청되는 베팅 정보, 현재 게임 상태 등)를 저장해 네트워크 통신 없이 즉시 응답할 수 있게 했고, L2 계층인 Redis 클러스터에는 웜데이터(약간 덜 자주 접근하지만 여전히 중요한 데이터)를 맡겼습니다. 이렇게 계층을 나누면, L1에서 찾지 못한 데이터라도 L2에서 다시 캐싱된 결과를 반환할 확률이 높아집니다. 실제로 블루스카이 코리아의 서버 인프라는 동시 접속자가 급증하는 상황에서도 캐시 히트율을 95% 이상 안정적으로 유지했습니다. 즉, 단순히 “캐싱 하나 달았다”는 생각으로는 절대 따라잡을 수 없는 수준의 효율성을 확보한 셈입니다.
핵심은 iGaming 도메인이 가진 트래픽 구조의 특수성에 있습니다. 한국 이용자들이 블루스카이 코리아에서 라이브 게임이나 베팅을 진행할 때, 결제와 상태 조회는 극히 짧은 시간에 밀집됩니다. 예를 들어 인기 스포츠 경기 시작 5분 전에는 수만 명이 동시에 베팅을 시도하고, 실시간 결과가 업데이트될 때마다 조회 요청이 폭발적으로 증가합니다. 이처럼 짧은 시간 안에 몰리는 요청을 단순한 캐시 한 개로는 분산 처리하기 어렵고, 캐시 TTL 만료 직후를 노린 수많은 요청이 동시에 DB로 넘어가면서 순간적으로 시스템 정체가 발생합니다. 블루스카이 코리아는 멀티 레이어 캐싱 전략 덕분에 이런 급격한 요청 급증에도 AWS 기반 인프라가 흔들리지 않고, DB 부하를 70% 이상 줄이는 성과를 보여줬습니다.
그렇다면 이 글에서 우리가 진짜 이야기할 것은, 단지 “캐싱을 쓰자”가 아니라 어떻게 멀티 레이어를 구성하고, 어떤 데이터를 L1과 L2에 나눠 담으며, 이를 비용 효율적으로 운영할 수 있는지입니다. 기본적인 Redis 한 대 붙이는 수준을 넘어서, 앱 서버 안에 L1 캐시를 내장하는 방법, 읽기 전용 복제본으로 L2 비용을 반으로 줄이는 전략, 그리고 동접 폭주 시에도 캐시가 적절히 워밍업되도록 자동화하는 세부 기술 등이 필요합니다. 블루스카이 코리아의 서울 AWS 리전 인프라 사례는 그런 고민의 결과물이며, 이 글을 통해 실제 운영 환경에서 적용 가능한 캐싱 전략을 하나씩 파헤쳐보도록 하겠습니다.
L1 캐시를 앱 서버 안에 심어라 — 네트워크 왕복 없이 0.1ms 응답의 비밀
캐싱 하면 대부분 Redis나 Memcached 같은 외부 저장소를 떠올리기 마련입니다. 하지만 진짜 병목은 생각보다 훨씬 가까운 곳, 아니 정확히는 네트워크 선을 타고 오가는 그 짧은 순간에 숨어 있습니다. 블루스카이 코리아의 인프라 팀이 가장 먼저 손댄 부분은 앱 서버 자체의 메모리였습니다. 외부 캐시로 요청을 보내기도 전에, 서버 안에서 바로 데이터를 반환할 수 있다면 그 자체로 이미 엄청난 속도 이점을 가져오기 때문입니다.
L1 캐시의 개념: 가장 가까운 곳에 가장 빠른 창고를
L1 캐시는 단순합니다. 애플리케이션 서버 인스턴스의 로컬 메모리(heap)에 자주 조회되는 데이터를 저장해두는 구조입니다. 예를 들어 Java 기반 서버라면 Caffeine이나 Guava 같은 캐시 라이브러리를 활용해 앱 내부에 HashMap 형태의 캐시 맵을 생성합니다. 어떤 게임 설정이 자주 바뀌는 게 아니라면, 유저가 로그인할 때마다 Redis 같은 원격 캐시를 거칠 필요가 전혀 없어집니다. 블루스카이 코리아는 게임 테이블의 베팅 한도, 룰렛 회전 간격, 유저별 보너스 비율 같은 변경 빈도가 낮은 설정값들을 전부 이 L1에 올려버렸습니다.
이 방식의 결정적인 장점은 네트워크 왕복 시간 자체를 0으로 만든다는 점입니다. 서울 AWS 리전 내부에서 가용 영역(AZ) 간 통신이 아무리 빠르다고 해도 실측 1~2ms의 지연은 발생합니다. 이 2ms가 평소에는 별것 아닌 숫자처럼 보일지 모르지만, 동시 접속자가 10만 명에 달하고, 각 유저가 자신의 게임 페이지를 매초 3회씩 폴링(polling)한다면 상황은 완전히 달라집니다. 단순 계산으로 매초 30만 건의 요청이 외부 캐시나 DB로 쏟아지기 시작합니다. 2ms 지연 하나가 누적되면서 DB 커넥션 풀이 바닥나고, 결국 서비스 전체가 멈추는 단계까지 이어지는 겁니다. L1을 사용하면 이 30만 건의 요청이 전부 서버 메모리에서 즉시 0.1ms 단위로 처리되면서, Redis와 DB에는 단 한 번의 네트워크 요청도 보내지 않습니다.
짧은 TTL이 만든 정합성과 성능의 절묘한 균형
물론 L1 캐시를 무턱대고 도입했다간 데이터 정합성 문제가 발생할 수 있다는 우려도 있습니다. 여러 대의 앱 서버가 각자 로컬 메모리를 가지고 있기 때문에, A 서버의 데이터는 갱신됐는데 B 서버는 여전히 오래된 값을 반환하는 상황이 생기기 쉽습니다. 블루스카이 코리아의 엔지니어들은 이 문제를 극도로 짧은 TTL 방식을 도입해 해결했습니다. L1 캐시의 생존 시간을 불과 5초로 설정한 겁니다. 일반적으로 캐시 정합성을 유지하려면 TTL을 길게 잡고 명시적으로 무효화(invalidation) 로직을 추가하는 편이 보통인데, 여기서는 그렇지 않았습니다.
5초라는 시간은 게임 운영 사이클 안에서 허용 가능한 데이터 부정합 범위를 정확히 계산한 결과입니다. 블랙잭의 딜러 스탠드 기준이나 바카라의 커미션 비율 같은 설정값이 실시간 0.1초 단위로 바뀔 일은 극히 드뭅니다. 따라서 5초 미만의 지연으로 최신 데이터가 전파되어도 유저 경험에는 아무런 영향이 없습니다. 오히려 모든 서버가 각자 5초간 데이터를 책임지고 응답하는 덕분에, 주기적으로 뒷단의 Redis나 Aurora RDS로 쏟아질 쿼리 자체를 대폭 줄이는 효과를 얻었습니다.
DB 쿼리 60% 감소, 그 이면의 수치
블루스카이 코리아의 iGaming 인프라를 살펴보면, L1 적용 전후의 DB 부하 차이가 확연히 드러납니다. 각 앱 서버가 5초 TTL로 L1 캐시를 유지하면서 게임의 모든 활성 유저 세션 관련 쿼리 절대량이 눈에 띄게 떨어졌습니다. 특히 유저가 게임 대기실(waiting room)에 머물 때 초당 전송하는 세션 상태 확인 요청이 병목의 주범이었는데, L1이 이 요청을 실질적으로 100% 차단했습니다. DB 투입 쿼리의 빈도 자체를 획기적으로 조정한 덕에 MySQL의 시스템 변수인 max_connections를 따로 올릴 필요가 사라지면서 운영 안정성까지 확보했습니다.
서버의 CPU와 메모리 사용률 데이터를 함께 분석한 결과는 더 흥미롭습니다. L1에 5초짜리 데이터를 저장하는 용도로 늘어난 JVM heap 사용량은 단 50~80MB에 불과했습니다. 즉, 로컬 메모리에 아주 작은 공간만 할당해도 DB로 가는 네트워크 I/O 부하를 거의 60% 줄일 수 있었다는 얘기입니다. 적은 자원으로 더 큰 효과를 보는 일명 ‘레이어드 캐싱’의 진수가 이 한 수치에 압축되어 있습니다.
여기서 한 가지 간과해서는 안 될 사실은, 블루스카이 코리아의 접근 방식은 단순히 Caffeine 라이브러리를 붙이는 기술적 작업에 그치지 않았다 점입니다. 어떤 데이터를 얼마나 오래 앱 서버가 직접 들고 있어야 ‘네트워크 왕복 없는 0.1ms 응답’의 효과가 극대화되는지 철저하게 분류했고, iGaming 특성에 맞춰 가변적 혹은 고정적으로 적용할 아이템을 선별했습니다. 그 선별 작업이 성공을 가른 핵심 비결입니다.
L2 Redis 클러스터를 ‘읽기 전용 복제본’으로 구성해야 비용이 반으로 준다
대부분의 PM이 AWS에서 Redis를 구성할 때 떠올리는 건 ‘마스터-슬레이브’ 구조입니다. 쓰기도 되고 읽기도 되는 레디스 클러스터 한 벌을 두고, 혹시 모를 장애에 대비해 복제본을 붙이는 식이죠. 아이게이밍 업계 PM 10명 중 8명이 이렇게 시작하는데, 이 선택이 매달 청구서에 수백만 원의 불필요한 비용을 추가하고 있습니다. 블루스카이의 인프라팀은 여기서 완전히 다른 접근을 했습니다. 아이게이밍 트래픽의 읽기:쓰기 비율이 9:1이라는 사실에 주목한 겁니다. 전체 데이터 요청 중 90%가 그냥 ‘가져다 보기’일 뿐인데, 왜 모든 노드가 쓰기 권한을 들고 있어야 할까요?
블루스카이 코리아는 이 단순한 질문에서 출발해 L2 Redis 캐시를 완전히 ‘읽기 전용 복제본’으로 구성했습니다. 핵심은 이렇습니다. 쓰기 가능한 마스터 Redis는 소규모 클러스터 하나만 두고, 읽기 전용 복제본은 아예 별도의 ElastiCache Serverless 클러스터로 분리한 것입니다. 읽기 전용 노드가 데이터 변경을 할 일이 없으니 복잡한 복제 지연 관리도 필요 없고, 데이터 일관성 문제를 신경 쓸 필요도 없어집니다. 예를 들어 경기 점수판 조회 요청 100건이 오면, 90건은 읽기 전용 L2에서 즉시 반환됩니다.
ElastiCache Serverless와 인스턴스 타입 선택의 묘
블루스카이 코리아가 선택한 구체적인 방법을 들여다보면, 서울 리전에서 Redis 엔터프라이즈 같은 고비용 서비스를 쓰지 않고 ElastiCache Serverless를 채택한 점이 눈에 띕니다. 여기서 더 놀라운 건 읽기 전용 노드에 할당한 인스턴스 타입입니다. 일반적으로 읽기 전용이라도 사양을 비슷하게 맞추는 경우가 많은데, 블루스카이는 여기에 ‘최소 사양 인스턴스’를 박아 넣었습니다. 실제 운영 데이터를 보면, 쓰기 가능 마스터에는 m6g.large 급을 할당하면서 읽기 전용 L2에는 t4g.small 같은 비교적 낮은 사양을 사용했습니다.
이 전략 덕분에 이 노드들에서 CPU 사용률이 95%를 넘는 상황이 생겨도 문제가 전혀 없습니다. 캐시 히트와 응답 속도만 떨어지지 않으면 되고, 읽기 요청은 대부분 단순한 key-value 조회라서 저사양 인스턴스도 충분히 소화해냅니다. 결과적으로 블루스카이 코리아는 매월 Redis 관련 비용을 약 35% 절감했습니다. 단순한 인스턴스 타입 다운사이징 하나로, 성능을 떨어뜨리지 않고 이 정도 비용을 아낀 겁니다.
만약 당신이 ElastiCache Serverless가 아닌 다른 매니지드 Redis 서비스를 쓰고 있다면, 여기서 얻어갈 교훈은 분명합니다. 똑같은 사양의 노드를 읽기/쓰기 구분 없이 n중화하지 말고, 쓰기 가능 노드와 읽기 전용 노드를 완전히 다른 인스턴스 타입으로 분리해야 한다는 점입니다. 읽기 전용이라는 목적에 맞춰 인스턴스 크기를 확 낮춰도 성능 차이가 거의 나지 않습니다.
쓰기 트래픽을 SQS로 빼내서 L2 오염을 원천차단하라
L2를 읽기 전용으로 만들었으니 쓰기 요청은 어떻게 처리할까요? 블루스카이 코리아는 여기서 다시 한 번 기발한 선택을 합니다. 쓰기 트래픽을 별도의 SQS(Simple Queue Service)로 우회 처리하는 겁니다. 예를 들어 유저가 베팅 내역을 저장하거나 게임 결과를 업데이트하는 요청은 바로 Redis L2로 보내지 않고, 일단 SQS 큐에 던져집니다. 그러면 백그라운드 워커가 이 큐를 꺼내서 차분히 DB에 반영합니다.
이 흐름이 가져오는 간접 효과는 예상보다 큽니다. L2 캐시가 ‘더티 데이터’를 쓰는 일을 원천 차단하기 때문에, DB에 가는 불필요한 쓰기 부하가 함께 사라집니다. 다시 말해 DB 쓰기 리소스에서 캐시 갱신이라는 값비싼 연산을 덜어낸 셈입니다. 대부분의 PM이 쓰기 트래픽이 발생할 때 캐시를 즉시 갱신해야 한다고 생각하지만, 아이게이밍 환경에서는 SQS를 거친 비동기 갱신으로도 충분한 경우가 훨씬 많습니다. 1초 이내에 바뀌어야 하는 데이터가 아니라면, L2까지 모두 버스티하게 업데이트할 이유가 없는 거죠.
블루스카이 코리아의 이 먹스인(Mux-in) 디자인은 동시 접속자가 폭주할 때 진가를 발휘합니다. 쓰기 요청이 잠시 밀려 있어도 읽기 전용 L2는 변함없이 최신 데이터를 서빙할 수 있고, 큐가 백로그를 안전하게 흡수합니다. DB 쓰기 부하도 사실상 캐시 관련 쓰기가 없어져서 7:3 수준을 유지했습니다. 이 모든 게 단순히 Redis 마스터-슬레이브 배치 방식을 고쳐서 생긴 결과입니다.
동접 폭주 시 ‘캐시 워밍업 자동화’가 없으면 70% 경감도 소용없다
아무리 정교한 멀티 레이어 캐싱 전략을 세워도, 그게 ‘동적’으로 준비되지 않으면 무용지물이 됩니다. 블루스카이 코리아의 사례를 보면 정말 중요한 건 캐시 자체의 성능보다 ‘언제, 어떻게 캐시를 채울 것인가’라는 타이밍과 절차였습니다. 갑작스러운 BLUE SKY 동시 접속자 급증, 이를 테면 월드컵 같은 대형 스포츠 이벤트가 열리는 순간을 상상해보죠. 평소에는 1만 명이 접속하다가 갑자기 5만 명, 많게는 10만 명 이상이 몰려듭니다. 이때 캐시 계층이 완전히 비어 있다면 어떤 일이 벌어질까요? 모든 요청은 곧바로 데이터베이스를 향해 돌진합니다. 이 현상을 ‘캐시 스탬피드’라고 부르는데, 결과적으로 DB는 순간적으로 처리 가능한 용량을 몇 배 넘는 요청을 받아 CPU 사용률이 치솟고 결국 서비스 전체가 멈춰버리는 최악의 시나리오로 이어집니다. 아무리 캐싱 아키텍처가 훌륭해도, 파도가 덮치기 전에 방파제를 미리 쌓지 않았다면 그저 속수무책일 수밖에 없는 이유입니다.
예측 가능한 폭주는 막을 수 있다 — CloudWatch와 Lambda의 조합
블루스카이 코리아는 이 문제를 해결하기 위해 예상 피크 시간대를 미리 정의하고, 이를 AWS CloudWatch 이벤트로 감지하는 시스템을 구축했습니다. 여기서 중요한 건 ‘예상’한다는 점입니다. 아이게이밍 플랫폼의 특성상 주요 경기 일정, 프로모션 시작 시간, 신규 게임 출시 시점 등은 사전에 파악 가능합니다. 이 데이터를 기반으로 CloudWatch에서는 특정 시간대가 되면 이벤트를 발생시키도록 규칙을 설정했습니다. 그 이벤트가 트리거되면 자동으로 AWS Lambda 함수가 실행됩니다. 그리고 이 Lambda 함수는 단순히 로그를 찍거나 알림을 보내는 수준을 넘어서, L1(in-memory) 캐시와 L2(Redis) 캐시를 강제로 워밍업하기 시작합니다. 즉, 수많은 사용자가 몰려오기 전에 이미 캐시 계층이 필요한 데이터로 채워져 있는 상태를 만드는 겁니다. 이렇게 하면 트래픽이 실제로 도착했을 때, 대부분의 요청은 캐시에서 바로 응답을 찾아낼 수 있고, 한 줄로 서야 하는 버스 정류장 같은 DB로는 쿼리가 거의 전달되지 않습니다.
워밍업 과정에서 블루스카이코리아는 ‘배치 처리’라는 원칙을 철저히 지켰습니다. 자칫하면 워밍업 자체가 DB에 또 다른 부하를 줄 수 있기 때문입니다. Lambda 함수가 캐시를 채우기 위해 각 키마다 개별 쿼리를 날리면, 오히려 평소보다 더 많은 DB 부하가 발생하는 아이러니한 상황이 연출될 수 있습니다. 그래서 블루스카이 코리아는 인기 게임 목록, 베팅 가능 마켓, 사용자 세션 정보와 같은 캐싱 타겟 데이터를 묶어서 DB에 단 한 번의 배치 쿼리로 조회하도록 구현했습니다. 조회된 결과는 한 번에 Redis에 bulk insert되고, 각 애플리케이션 서버의 로컬 메모리(L1)에도 분산 저장됩니다. 이 절차는 사람이 수동으로 하기에는 시간이 너무 오래 걸리고 실수도 잦지만, 자동화를 통해 10초 내외로 완료할 수 있었습니다.
실제 수치로 증명된 효과 — 동접 5만 증가, DB CPU 70%에서 21%로
블루스카이 코리아의 이 접근 방식이 이론에 그치지 않고 실제 성과로 이어졌다는 점이 인상적입니다. 특정 월드컵 이벤트 기간 동안 동시 접속자가 5만 명 수준으로 급증했을 때, 데이터베이스 서버의 CPU 사용률 추이를 살펴보면 명확한 차이가 드러납니다. 캐시 워밍업 자동화가 적용되기 전에는 트래픽이 증가하는 시점과 거의 동시에 인스턴스의 CPU가 빠르게 포화 상태로 치달았고, 사용률이 70% 이상까지 치솟았습니다. 이후 타임아웃 오류가 속출하면서 사용자 경험은 급격히 나빠졌고, 결국 블루스카이는 긴급히 DB 인스턴스 스펙을 업그레이드하거나 일부 기능을 셧다운 해야 했습니다.
하지만 캐시 워밍업 자동화가 활성화된 이후에는 상황이 완전히 달라졌습니다. 동일한 5만 명의 동접이 몰렸음에도 불구하고, DB의 CPU 사용률은 안정적으로 21% 수준을 유지했습니다. 쓰리쿼터 가까이 되는 부하가 경감된 것입니다. 약 70%에 육박하던 부하가 21%로 70% 정도 줄어들었다니, 단순 계산으로도 70% 정도의 부하를 경감한 셈입니다. 이 차이는 데이터베이스 인스턴스 비용과 직접적으로 연결되며, 더 높은 스펙의 인스턴스로 업그레이드하지 않아도 충분히 대응할 수 있는 용량이라는 점이 중요한 의미를 갖습니다. 결국 블루스카이 코리아는 인프라 확장에 들어갈 비용을 아끼면서도 안정적인 서비스를 제공할 수 있었고, 이는 동시 접속자 증가가 두려워 더 이상 마케팅이나 이벤트를 주저할 이유가 사라졌다는 뜻이기도 합니다.
동접 폭주는 누구에게나 찾아올 수 있는 위기지만, 단순히 시스템을 ‘강하게’ 만드는 대신 ‘똑똑하게’ 준비하는 방식으로 충분히 극복 가능하다는 점을 이 사례는 증명했습니다. 캐시 워밍업 자동화는 아이 게이밍 플랫폼의 인프라에 있어서 선택이 아니라 필수 전략으로 자리 잡아야 할 이유입니다.
결론 — 블루스카이 코리아의 캐싱 구조를 따라 하면 AWS 비용은 40% 줄고, 서버는 절대 안 터진다
단순한 캐싱이 아니라 ‘3단계 조합’이 승부를 갈랐다
지금까지 우리가 살펴본 전략들을 되짚어보면 분명한 공통점이 드러난다. 블루스카이 코리아가 서울 AWS 리전에서 단 2주 만에 동시 접속자 폭주 상황을 안정적으로 버텨낸 이유는 어디까지나 단순한 ‘캐싱 도입’이 아니었다. 업계에서는 흔히들 Redis 하나 달면 다 해결된다고 착각하지만, 블루스카이 코리아의 사례는 L1-L2 계층 분리와 읽기 전용 복제 클러스터 구성, 여기에 자동 워밍업 메커니즘까지 세 가지 축이 유기적으로 맞물렸을 때야 비로소 서버 터짐 없는 운영이 가능하다는 사실을 입증했다.
흔히들 한다는 단순한 전역 캐시 한 방으로는 DB 부하가 순간적으로 몰릴 때 그 충격을 흡수하지 못한다. 블루스카이 코리아 팀은 앱 서버 인스턴스에 L1 로컬 캐시를 심어 네트워크 왕복 자체를 원천 차단했고, 그 덕분에 TPS가 3만을 넘는 피크 타임에도 DB 커넥션 수는 한계치를 넘지 않았다. 두 번째로, L2 Redis를 읽기 전용 슬레이브로 분리함으로써 단일 노드가 감당하던 부하를 복제본들이 분담하게 만들었다. 이 설계 하나만으로 메인 Redis 장애 상황에서조차 읽기 요청이 끊기지 않았고, 인스턴스 타입을 과도하게 올릴 필요도 사라졌다.
결국 인프라 최적화는 ‘비용 통제’에서 완성된다
동접 폭주 시에 DB 튜닝이나 스케일 업이 아니라 캐싱 구조 자체를 재설계함으로써 블루스카이 코리아가 얻은 성과는 매우 뚜렷하다. 먼저 DB 부하를 70% 넘게 줄여서 오라클 RDS의 프로비저닝 IOPS를 대폭 낮출 수 있었고, 더 저렴한 범용 SSD 인스턴스로 마이그레이션했다. 응답 시간은 기존 평균 8ms 대비 80배 가까이 빨라진 0.1ms를 기록했는데, 이는 사용자 인터랙션이 반복적으로 일어나는 실시간 배팅 환경에서 체감 성능 차이를 확 벌려놓는 요소다.
그리고 이 모든 구조가 비용 단에서 드러내는 효과가 압도적이다. 단순 계산으로 월 AWS 서버 및 데이터베이스 사용 내역을 분석해 보면, 블루스카이 코리아의 멀티 레이어 캐싱 전략을 그대로 한국 iGaming PM들이 자기 환경에 맞게 도입할 경우 인프라 월 청구액을 기존보다 최대 40%까지 절감 가능하다. 예를 들어 기존에 Redis 노드를 12대 굴리면서도 캐시 미스율이 30%를 넘겼다면, L1을 추가하고 L2를 읽기 전용 3대로 압축하기만 해도 캐시 히트율을 95% 이상 유지하는 동시에 EC2 비용을 반으로 떨어뜨린 사례가 블루스카이 코리아 환경에서 실제로 증명됐다.
이제 선택은 PM의 몫, 실험은 지금 시작해야 한다
실속 있는 PM이라면 이 지점에서 행동으로 옮겨야 한다. 당장 오늘 AWS 콘솔에 로그인해서 현재 운용 중인 Redis 노드의 개수와 비용을 확인하고, 주말 동안 L1 로컬 캐시 도입의 타당성을 테스트해보길 권한다. 블루스카이 코리아가 했던 방식처럼 Ahocobra 패키지이나 JetCache 등을 앱 레이어에 심어보고, 스테이징 환경에서 트래픽을 밀어 넣으면 어떤 이슈가 생기는지 LP(가동 중단) 없이 검증하는 게 가능하다.
핵심 원칙은 절대 바뀌지 않는다. 원격 캐시 하나에 모든 의존도를 걸지 말고, 애플리케이션과 데이터베이스 사이에 스마트한 계층을 두 개 쌓아라. 그리고 실제 고객 트래픽이 한꺼번에 몰릴 때를 대비해서 항상 워밍업 테스트를 자동화 파이프라인에 끼워넣어야 한다. 자동화된 캐시 워밍업 없이 70% 부하 경감이라는 메시지는 결국 실전에서 속 빈 강정이 된다는 걸 블루스카이 코리아가 애초에 시행착오를 겪으면서 확인했기 때문이다.
블루스카이 코리아의 이 사례 하나면 기존에 수많은 국내 iGaming 업체들이 반복해온 ‘터지는 서버’와 ‘펑크 나는 AWS 청구서’의 악순환에서 탈출할 수 있는 충분한 레퍼런스가 될 것이다. 막연히 운영 효율을 높이겠다고 예산만 늘리는 시대는 끝났다. 계층화된 정밀 타격 같은 캐싱 아키텍처가 오히려 클라우드 비용을 줄이고 사용자 경험까지 잡는 진짜 지름길임을 잊지 말아야 한다.