
복잡한 Lock-Free와 Work-Stealing 최적화는 Core에 숨겨두고, 비즈니스 추가는 단 3개의 메서드로 끝내는 완벽한 계층 분리 가이드
본 아키텍처 분석 글은 카카오뱅크가 하루 수억 건의 알림 트래픽을 지연 없이 안정적으로 처리하기 위해 통합 메시징 시스템(UMS) 발송기를 전면 재구축한 실무 혁신 사례를 담고 있습니다. 성능 향상을 극대화하면서도 코드의 가독성과 채널 확장성을 보장하기 위해 'Service/Core 분리'라는 과감한 설계를 도입한 구체적인 과정과 고난도 기법을 공유합니다. 플랫폼의 본질인 '개발자의 멘탈 모델 단순화'가 대규모 백엔드 시스템 설계에 어떻게 적용되는지 실제 Kotlin 코드 및 시나리오와 함께 명확히 설명해 줍니다.
대형 트래픽 환경에서 실시간성 메시징 시스템이나 고성능 이벤트 드리븐 파이프라인을 구축하고자 하는 시니어 서버 엔지니어분들께 적극 권장합니다. 특히, 플랫폼 고도화와 팀 내 협업 생산성 향상(DX) 사이에서 갈등하고 계신 테크 리더분들에게 계층 분리를 통한 멘탈 모델 캡슐화 설계 노하우가 훌륭한 나침반이 될 것입니다.
레거시 알림 발송기는 요청 발생 시마다 새로운 스레드를 무분별하게 생성하여 발생하는 컨텍스트 스위칭 오버헤드와 메모리 부족(OOM) 문제, 단일 큐 구조로 인한 후행 작업 지연(Tail Latency) 현상을 안고 있었습니다. 또한 채널 추가 시 스레드 풀 및 재시도 로직 등 시스템 내부 구현을 모두 파악해야 해 개발자의 인지 과부하를 초래하고 확장성이 떨어지는 문제가 있었습니다.
비즈니스 로직을 처리하는 'Service Layer'와 동시성 및 최적화를 담당하는 'Core Layer'로 계층을 철저히 분리하고, 개발자에게는 3개의 핵심 메서드만 선언하면 되는 단순한 인터페이스를 제공했습니다. 성능 최적화를 위해 CAS(Compare-And-Set)와 Barrier를 기반으로 하는 Lock-Free 및 Zero-Copy 방식의 Age-Based Work-Stealing 큐 아키텍처와 JVM 가비지 컬렉션(GC) 부하 완화를 위한 최적화 기법을 도입했습니다.
새로운 아키텍처 설계를 통해 시스템 복잡성을 내부로 감추어 개발자가 비즈니스 로직 개발에만 몰두할 수 있게 멘탈 모델을 단순화했으며, 10,000 TPS 이상의 고처리량과 극도로 낮은 P99 지연시간 안정성을 달성했습니다.
Trade-off
최적화 기법(CAS, Barrier 기반의 무대기 알고리즘)이 내부 Core Layer로 격리되어 비즈니스 서비스 개발자의 생산성은 극대화되었으나, 반대로 Core Layer 자체의 기술적 추상화 수준과 동시성 제어 복잡성이 매우 높아져 이를 관리하고 검증해야 하는 소수 플랫폼 핵심 엔지니어들의 유지보수 전문성 요구치가 대폭 증가하는 결과가 수반되었을 것으로 판단됩니다.
병렬 처리 아키텍처에서 특정 일꾼(Worker)에게 부하가 몰릴 때, 유휴 일꾼이 바쁜 일꾼의 대기 작업을 가로채서(Steal) 대신 처리해 주는 부하 분산 기법입니다.
멀티스레드 환경에서 데이터 동기화 시 락(Lock)을 걸어 스레드를 대기시키지 않고, CPU 수준의 원자적 비교 연산(CAS)을 통해 동시성 경합 문제를 즉각 해결해 주는 무대기 기법입니다.
메모리 영역에서 원본 배열 데이터를 복사하지 않고 인덱스 위치 값만 변경하여 데이터를 이관하고, 사용을 다한 힙 메모리 객체를 최단 시간 내 회수할 수 있도록 돕는 메모리 제어 최적화 기술입니다.







