DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 여기어때
  • Related reads#Kafka
#Backend

여기어때 이벤트 기반 통합 알림 플랫폼 구축기 Part 2. How?

여기어때 이벤트 기반 통합 알림 플랫폼 구축기 Part 2. How?
01

Summary

개인 웹훅의 저주에서 벗어나기: 여기어때의 초당 수천 건 알림 처리 플랫폼 NotiHub 구축기

Kafka와 슬랙봇 샤딩으로 해결한 분산 알림 시스템의 확장성 및 안정성 확보 전략

이 아티클은 여기어때가 파편화된 알림 시스템을 통합하며 겪은 기술적 도전과 해결책을 상세히 다룹니다. 단순한 알림 전달을 넘어, 대규모 트래픽에서의 슬랙 API 한계를 극복하는 방법과 시스템 가용성을 극대화하는 3중 캐시 전략 등 실무에서 바로 참고할 수 있는 아키텍처 인사이트를 제공합니다.

  • 01개인 계정 종속성을 제거하고 전사 알림을 통합 관리하는 중앙 집중형 NotiHub 설계
  • 02슬랙 API의 속도 제한을 회피하는 봇 풀 기반의 '슬랙봇 샤딩' 기술 적용
  • 03Kafka Consumer Group과 HPA를 결합하여 급격한 트래픽 증가에 유연하게 대응
  • 04Redis 장애 시에도 서비스 중단을 막는 Local-Redis-API 3중 캐시 및 Fallback 로직
  • 05Handlebars 템플릿 엔진과 조건 엔진을 활용한 고도로 유연한 메시지 렌더링

+RECOMMENDATION

사내 알림 시스템의 가시성을 확보하고 싶은 데브옵스 엔지니어나, 슬랙 API의 Rate Limit 문제로 골머리를 앓고 있는 백엔드 개발자에게 강력히 추천합니다.

The Problem

개별 직원이 생성한 슬랙 웹훅에 의존하는 구조로 인해 담당자 퇴사 시 알림이 중단되는 종속성 문제와 전사적인 알림 정책 수립 및 모니터링이 불가능한 한계가 있었습니다. 또한, SaaS가 제공하는 고정된 알림 포맷과 경직된 라우팅 설정으로 인해 팀별 요구사항에 맞는 유연한 대응이 어려웠습니다.

The Solution

Kafka를 이벤트 브로커로 활용하여 Receiver와 Processor를 분리한 중앙 집중형 알림 플랫폼 NotiHub를 구축하고, 슬랙 API의 Rate Limit을 극복하기 위해 봇 풀을 활용한 샤딩 및 채널별 큐 격리 전략을 도입했습니다. 성능과 가용성을 위해 Local Cache, Redis, API/DB로 이어지는 3중 레이어 캐시 구조와 HPA 기반의 물리적 확장 설계를 적용했습니다.

The Result

초당 수천 건의 메시지 전송 시 발생하던 429 Too Many Requests 오류를 해결하여 안정적인 전송 환경을 확보했으며, 해시 기반 샤딩을 통해 메시지 업데이트 및 스레드 무결성을 보장했습니다. 중앙화를 통해 전사 알림 관리 효율을 높이면서도 각 팀이 원하는 조건별 라우팅과 커스텀 템플릿 사용이 가능해졌습니다.

Trade-off

중앙 집중형 구조를 채택함으로써 단일 장애점(SPOF) 리스크가 발생했으나, 이를 완화하기 위해 무중단 배포, HPA, 다중 레이어 캐싱 및 Fallback 기제 등 복잡한 방어 기제를 설계해야 했습니다. 본문에 구체적인 비용 수치는 없으나, 고가용성 확보를 위한 인프라 자원 및 관리 로직의 복잡도가 증가하는 트레이드오프가 수반되었습니다.

03

Key Concepts

Concept · 01

Slack Bot Sharding

동일한 봇이 짧은 시간 내에 과도한 요청을 보낼 때 발생하는 Rate Limit을 방지하기 위해 여러 개의 봇을 풀로 구성하고 작업을 분산하는 기법입니다.

  • 채널 ID를 해싱하여 특정 채널은 항상 동일한 봇이 담당하도록 설계하여 메시지 업데이트 권한 보장
  • 인터랙션이 필요한 경우를 위해 Main Bot과 Shard Bot으로 역할을 이원화하여 관리 편의성 증대
Concept · 02

Multi-layer Caching

데이터 조회 성능 향상과 시스템 안정성을 위해 로컬 메모리, 분산 캐시(Redis), 원본 저장소(DB/API) 순으로 캐시 계층을 구성하는 전략입니다.

  • 로컬 캐시의 TTL을 짧게 유지하여 별도 무효화 로직 없이 데이터 정합성 확보
  • Redis 장애 시 로컬 캐시와 API 서버 직접 호출로 전환되는 Fallback 메커니즘 구축
Concept · 03

Event-driven Architecture

시스템 간의 상호작용을 이벤트의 생성, 감지, 소비를 통해 처리하는 아키텍처로, 구성 요소 간의 결합도를 낮추고 확장성을 높입니다.

  • Kafka를 도입하여 수신부(Receiver)와 처리부(Processor)를 완전히 분리
  • 트래픽 폭증 시 Kafka가 버퍼 역할을 수행하여 프로세서의 부하를 조절하고 데이터 유실 방지
Continue reading · same source

여기어때More from 여기어때

View all posts from 여기어때
  • AI 수석회의

    LLMAI AgentMCP
    18시간 전
  • JVM heap은 멀쩡한데 왜 메모리가 터질까? — Docker 환경 네이티브 메모리 삽질기 (Part 2)

    JVMDockerMemory Leak
    1주 전
  • JVM heap은 멀쩡한데 왜 메모리가 터질까? — Docker 환경 네이티브 메모리 삽질기 (Part 1)

    JVMDockerMemory Leak
    1주 전
  • Spring Data Redis: Repository vs RedisTemplate — 실전 성능 비교

    Spring Data RedisRedisTemplatePerformance Optimization
    1주 전
  • AI 시대의 브랜드 그래픽 시스템 구축기

    Generative AIVisual IdentityPrompt Engineering
    3주 전

Related reads#Kafka

Explore #Kafka
라인

초당 100만 건, LINE 앱에 Apache Kafka 종단 간 암호화 적용기

#Kafka3일 전
올리브영

옴니채널 재고 정합성 한계에 대응하는 인벤토리 데이터 파이프라인 구축기

#Kafka1주 전
Pinterest·CDC

핀터레스트의 차세대 DB 인제스션 프레임워크 내 자동화된 스키마 진화

#Kafka2주 전
채널 톡

카프카 파티션 개수 산정식 설계 여정

#Kafka1개월 전
올리브영

45분 배치에서 준실시간으로! 다수 도메인 데이터를 Kafka로 통합한 전환기

#Kafka2개월 전

Source

여기어때
여기어때
Engineering Blog

Published · April 3, 2026

Topics

KafkaRedisSlack APIHPA이벤트 기반캐싱 전략샤딩