Canva는 어떻게 수억 건의 사용자 세션을 빠르고 안전하게 유지할까?
(news.hada.io)
Canva가 대규모 사용자 세션 검증 시 발생하는 MySQL 병목 현상을 해결하기 위해, 세션 취소 기록을 16바이트 단위의 압축된 바이너리 형태로 S3에 저장하고 게이트웨이가 이를 직접 이진 탐색하도록 설계하여 메모리 사용량을 87.5% 절감한 사례를 다룹니다.
이 글의 핵심 포인트
- 1배포 시 수백 개의 게이트웨이가 MySQL에서 100만 건 이상의 취소 기록을 읽는 병목 현상 발생
- 2최근 12시간의 데이터를 30분 단위 S3 객체로 나누고, 각 기록을 16바이트로 압축·정렬하여 저장
- 3게이트웨이가 별도의 변환 없이 내려받은 바이트 배열에서 직접 이진 탐색(Binary Search) 수행
- 4S3 조건부 PUT과 ZooKeeper 리더 선출을 통해 비동기 워커 간의 데이터 갱신 유실 방지
- 5시스템 전환 후 메모리 사용량 87.5% 감소 및 단일 워커 초당 2,000건 이상의 쓰기 처리량 달성
이 글에 대한 공공지능 분석
왜 중요한가?
어떤 배경과 맥락이 있나?
업계에 어떤 영향을 주나?
한국 시장에 어떤 시사점이 있나?
이 글에 대한 큐레이터 의견
이 사례는 '인프라의 단순화'가 어떻게 성능 향상으로 이어질 수 있는지를 보여주는 교과서적인 예시입니다. 많은 개발자가 트래픽 증가 시 Redis 클러스터 확장이나 DB 샤딩 같은 복잡한 해결책을 먼저 떠올리지만, Canva는 데이터의 특성(슬라이딩 윈도우)을 분석하여 S3라는 저비용 저장소를 고효율 검색 엔진처럼 활용했습니다. 특히 16바이트 바이너리 포맷과 이진 탐색을 결합해 메모리 사용량을 87.5%나 줄인 점은 데이터 구조 설계의 힘을 증명합니다.
다만, 이러한 접근 방식에는 명확한 트레이드오프가 존재합니다. S3를 활용한 청크 업데이트 방식은 쓰기 작업 시 전체 배열을 다시 쓰는 $O(N^2)$의 복잡도를 가질 수 있으며, 이는 데이터 양이 폭발적으로 증가할 경우 워커의 병목으로 이어질 위험이 있습니다. 따라서 이 설계는 '세션 취소'라는 특정 도메인의 데이터 패턴이 예측 가능하고 제어 가능하다는 전제하에 작동하는 최적화입니다.
스타트업 창업자 관점에서는, 무분별한 기술 스택 확장이 오히려 운영 복잡도와 비용을 높일 수 있음을 인지해야 합니다. 서비스의 핵심 데이터 패턴을 깊이 이해하고, 이를 기존 인프라에 맞춰 재설계할 수 있는 엔지니어링 역량을 확보하는 것이 진정한 확장성을 만드는 길입니다.
관련 뉴스
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.