
아키텍처
하루 N억 건의 알림 시스템 구축기 (1): 카카오뱅크는 어떻게 발송 플랫폼의 새로운 뼈대를 세웠나
두줄요약
카카오뱅크가 대규모 알림 발송기의 성능 병목과 복잡한 구조를 해결하기 위해 Service/Core Layer 분리 아키텍처를 도입했습니다. 개발자는 단순한 인터페이스만 구현하고, Lock-Free와 Work-Stealing 같은 최적화는 Core Layer에 숨겼습니다.
문제 상황
- 하루 N억 건의 알림을 처리해야 하는 발송기에서 처리량, P99 지연시간, GC 안정성 요구가 동시에 존재
- 레거시는 요청마다 Thread 생성, 단일 큐 병목, 불명확한 구조로 성능과 확장성 모두 한계
- 새로운 채널 추가와 공통 기능 적용 시 내부 구조를 모두 이해해야 해 멘탈 모델과 유지보수 비용이 과도
원인 분석
- Thread Pool 미사용과 요청별 Thread 생성으로 Context Switching, 메모리 사용량, OOM 위험 증가
- 단일 큐 구조로 느린 작업이 뒤의 빠른 작업을 막아 Tail Latency가 확대
- 계층 경계 부재로 공통 로직의 위치와 채널 간 영향 범위가 불명확
해결 방법
- Service Layer와 Core Layer를 분리해 개발자에게는 단순한 인터페이스만 제공
- RequestHandler와 Sender를 선언적 API로 단순화해 비즈니스 로직만 구현하도록 구성
- Core Layer에서 Work-Stealing, Lock-Free, Barrier, Zero-Copy, GC 최적화를 캡슐화
- 큐 분리와 중앙 스캔 기반 Age-Based Work-Stealing으로 오래 대기한 메시지 우선 분산

