채널서버유닛 · 2025
중요한 할 일
데이터 특성에 따라 적재와 조회 방식을 나누고, 불필요한 연동 API 호출을 줄였습니다.
Background
- ‘중요한 할 일’과 카카오톡 더보기탭의 카카오페이 알림 등 사용자에게 필요한 과업을 보여주는 서버 개발
- 기존 실시간 조회 방식은 노출 대상이 아닌 사용자에게도 연동 API 호출이 발생
- 카카오톡 더보기탭으로 지면이 확대되면서 더 큰 트래픽에 대응하고, 협업 팀의 연동 비용을 줄일 필요
Challenges
데이터 특성에 따라 수집·조회 방식 나누기
Kafka와 MongoDB로 이벤트 기반 수집 구조를 구성하고, 콘텐츠와 대상이 언제 바뀌는지에 따라 세 가지 방식으로 구분했습니다.
- 정해진 기간 그대로 보여줄 수 있는 데이터는 전체 적재
- 일일 배치로 마이데이터 갱신이 필요한 사용자를 선정하고, 해당 사용자에게 노출할 갱신 안내를 미리 적재
- 조회 시 적재된 안내를 바로 보여주어 별도 연동 API 호출 제거
- 금액이 바뀔 수 있는 데이터는 대상만 적재
- 정산 이벤트 발생 시점부터 만료되는 3일 후까지 대상 후보를 적재
- 후보인 사용자에 대해서만 API로 실제 정산 정보를 조회해, 불필요한 호출을 줄이면서 금액은 조회 시점에 확인
- 콘텐츠는 고정하고 대상 여부만 실시간 확인
- 정적 콘텐츠를 어드민에 설정하고 타겟팅 플랫폼에 노출 대상 여부 질의
- 다른 요인에 따라 대상이 바뀌는 항목에 적용하고, 동적 데이터가 없는 항목은 별도 개발 없이 설정으로 추가
중복 이벤트와 적재 실패에 대응하기
- 중복 발행된 이벤트는
user_id + task_meta_code기준으로 동일한 할 일에 upsert하도록 설계 - 적재 실패 시 retry topic으로 보내 최대 3회 재처리
- 재처리 후에도 실패한 이벤트는 DLQ로 분리하고 Slack 알림으로 확인할 수 있도록 처리
Impact
- 타겟 후보 적재 아이템의 연동 API 호출 80% 감소
- 전체 적재 항목은 연동 API 호출 없이 DB 조회로 제공
- 협업 팀이 이벤트 발행으로 항목을 노출할 수 있도록 해 개발 공수와 소통 비용 절감
- 콘텐츠와 대상의 변동성, 조회 시점의 정확성을 기준으로 연동 방식을 선택할 수 있는 구조 마련