하루에 90만 실시간 이벤트를 추적하는 시스템을 구축한 방법
Source: Dev.to
Introduction
몇 달 전, 실시간 이벤트 데이터를 수집하고 분석하는 시스템을 만들기 시작했습니다. 작은 실험으로 시작했지만 금방 훨씬 큰 규모로 성장했습니다. 현재 이 시스템은 하루에 약 90만 건의 새로운 레코드를 처리하고 있으며, 지금까지 7백만 건 이상의 전체 이벤트를 축적했습니다.
Architecture Decisions
Scaling Challenges
가장 큰 도전은 데이터를 수집하는 것이 아니라, 시스템이 속도 저하 없이 계속 확장될 수 있도록 보장하는 것이었습니다.
Incremental Metric Updates
전체 데이터셋을 반복적으로 조회하는 대신, 새로운 이벤트가 들어올 때마다 점진적으로 메트릭을 업데이트합니다. 이렇게 하면 데이터셋이 계속 커져도 성능이 일정하게 유지됩니다.
Rolling Time Windows
가능한 경우, 쿼리를 롤링 타임 윈도우로 제한합니다. 이는 데이터베이스 부하를 줄이고 응답 시간을 빠르게 유지하는 데 도움이 됩니다.
Database Choice
저는 PostgreSQL을 주요 데이터베이스로 선택했습니다. 이는 확장성 있는 신뢰성과 성능 때문입니다. 초기 단계에서 적절한 인덱싱이 가장 큰 차이를 만들었습니다—수천 행에서는 즉시 반환되던 쿼리가 수백만 행이 되면 올바른 컬럼에 인덱스가 없을 경우 눈에 띄게 느려집니다.
Live Demo
시스템은 현재 여기서 실시간으로 실행 중입니다:
https://spindex.net/
새로운 데이터를 지속적으로 수집하고 실시간으로 처리합니다.
Lessons Learned
- 확장성 문제는 보통 트래픽 자체보다 초기 아키텍처 결정에서 비롯됩니다.
- 처음부터 올바르게 설계된 시스템은 수백만 레코드를 큰 문제 없이 처리할 수 있습니다.
- 설계가 부실한 시스템은 훨씬 빨리 한계에 부딪힙니다.
데이터셋이 계속 성장함에 따라, 추가되는 백만 건마다 효율성이 더욱 중요해집니다.