피드로 돌아가기
Dev.toDatabase
원문 읽기
10MB RAM으로 1천만 건 중복 체크, DB I/O 제로 달성
How bloom filters work, irl
AI 요약
Context
사용자 중복 확인을 위해 매번 데이터베이스 SELECT 쿼리를 실행하는 구조의 한계 분석. 대규모 봇 공격이나 트래픽 급증 시 RDS IOPS 비용 상승 및 DB 성능 저하를 유발하는 병목 지점 식별.
Technical Solution
- Bloom Filter 도입을 통한 DB 접근 전 단계의 고속 필터링 계층 설계
- Hash Function을 활용하여 사용자 이름을 비트 배열(Bit Array)의 특정 위치에 매핑하는 로직 구현
- 모든 비트가 OFF일 경우 100% 존재하지 않음을 확정하여 DB 쿼리를 즉시 차단하는 메커니즘 적용
- 일부 비트가 ON인 경우에만 실제 DB 조회를 수행하는 확률적 데이터 구조 채택
- Redis 등 인메모리 저장소 활용을 통한 디스크 I/O 제거 및 처리 속도 극대화
- 원본 데이터를 저장하지 않고 해시 값으로만 관리하여 데이터 유출 시 보안성 강화
Impact
- 10MB RAM으로 1,000만 개의 사용자 이름 추적 가능
- 불필요한 DB Hit 횟수를 0으로 수렴시켜 RDS IOPS 비용 절감 및 성능 최적화
Key Takeaway
정확성보다 응답 속도와 리소스 효율이 중요한 '존재 여부 확인' 단계에서는 확률적 데이터 구조를 통해 쓰기/읽기 비용을 획기적으로 낮추는 설계 전략 필요
실천 포인트
- Read Heavy한 중복 체크 로직에 Bloom Filter 적용 검토 - False Positive 확률과 메모리 사용량 간의 Trade-off 분석 - 데이터 삭제가 빈번한 경우 Counting Bloom Filter 등 대안 구조 고려