작업 내용
캐시워크 for Business 채널이란?
"캐시워크 for Business 채널"은 캐시워크와 계약을 맺은 외부 업체가 채널을 개설하여 캐시워크 내 채팅 서비스인 "캐시톡"에서 채널 메시지를 발송할 수 있는 서비스입니다. (카카오 비즈니스의 "채널 메시지" 기능을 떠올리시면 쉽습니다.)
채널 메시지란?
채널 메시지는 외부 계약 업체와 캐시워크 사용자들 간 소통할 수 있는 채팅방으로 전송되는 메시지를 의미합니다.
캐시워크 for Business 채널에서 발송할 수 있는 메시지의 종류는 다음과 같습니다:
-
웰컴 메시지: 채널 구독 시 채널에서 사용자에게 발송하는 메시지
-
일반 메시지: 채널에서 특정 사용자 그룹(OS, 성별, 연령대)에게 발송하는 메시지
일반 메시지 예시
정량적 성과
캐시톡 유저 활성화에 기여 (“일반 메시지” 발송 이후: 2024-09-04)
'돈버는 미션' 일반 메시지
캐시워크 “돈버는 미션” 일반 메시지
설계 설명
(설계 설명 문서는 Notion 으로..)
기술적 과제
대용량 트래픽 처리
- 한국 캐시워크 기준 DAU 300만 명의 사용자에게 안정적으로 웰컴 메시지를 전송해야 하는 과제가 있었습니다.
- 요구 사항: 유저가 캐시워크 홈에 진입하면 웰컴 메시지 발송
- 이를 해결하기 위해 AWS SQS Standard Queue 를 활용하여 웰컴 메시지 및 일반 메시지를 분산 처리하였습니다.
메시지 발송 및 예약 발송 기능
- Elastic Beanstalk Worker 환경을 구축하여 웰컴 메시지 발송 및 일반 메시지 예약 발송 기능을 구현하였습니다.
- Redis를 이용해 메시지 발송 성공/실패 횟수를 측정하고, 발송 현황을 실시간으로 파악할 수 있도록 구현했습니다.
추후 공수를 줄이기 위한 선제적 개발
- 초기에는 “인구 정보(demography) 기반 메시지 전송 기능”이 추후 개발 예정 항목으로 분류되었으나, 이를 미리 구현하여 개발 공수를 절약할 수 있었습니다.
- 이 작업으로 인해 추후 캐시워크 전체 유저를 대상으로 사용자가 구독한 키 값 분리 작업을 대규모로 수행하지 않아도 되도록 했습니다.
상용 배포 시 어려움
- 정해진 릴리즈 일자를 준수하기 위해 유저 의존성이 없는 항목을 우선하여 상용 배포하여 배포 소요 시간을 단축할 수 있었습니다. (60분 → 30분)
- 유저가 사용하지 않는 백오피스 서버를 유저 단 API 서버와 함께 배포함으로서 배포 소요 시간 단축
작업하면서 어려웠던 점
상용 배포 이후 모니터링 과정에서 발견된 문제들
구독 가능한 채널의 토픽 수가 초과되는 문제
[ 문제 배경 ]
캐시워크 공식 채널은 채널 채팅방 그룹당 최대 10,000명의 유저를 수용하도록 설계되었으나, 구독자가 증가하면서 그룹 번호가 부족해 일부 유저의 구독이 실패하는 문제가 발견되었습니다.
- 채널 채팅방 그룹이란: 기본 채팅방 ID(e.g.,
ch:342:android:m:1994
) 뒤에 숫자(그룹 번호)를 붙여 유저를 분산하여 구독 처리하는 방식 - 한 그룹 번호 당 10,000명을 수용하며, 초기에는 그룹 번호를 :0 ~ :9로 설정(총 100,000명까지 수용 가능).
- 예시:
ch:342:android:m:1994:0
- 예시:
[ 발생 상황 ]
- 채널 구독자가 100,000명을 초과하면서 존재하지 않는 그룹 번호
:10
이상에 대한 구독 시도가 발생하였습니다. - 이로 인해 구독 실패 유저 증가 및 일부 유저의 채널 메시지 수신 불가 문제가 발생하였습니다.
[ 해결 방안 ]
- 신규 구독 유저를 임시로 모아둘 Queue 생성
- 신규 채널 구독 요청을 처리할 수 없으므로, 신규 채널 구독 요청을 모아둘 임시 Queue 를 생성합니다.
- 메신저 서버의 채널 채팅방 그룹 확장
- 이어서 메신저 서버 측에서 수용 가능한 그룹을 기존 10개에서 50개로 추가 개설합니다. (최대 500,000 명 구독 가능)
- 구독 실패 유저 데이터 정리:
- 한국 캐시워크 서버에서는 실패한 구독 데이터(구독된 그룹 번호가 11 이상인 유저의 구독 데이터)를 삭제 후, 새 그룹 번호로 재구독할 수 있도록 조치합니다.
- 캐시워크 메인 진입 시 자동으로 신규 구독 처리됨
- 한국 캐시워크 서버에서는 실패한 구독 데이터(구독된 그룹 번호가 11 이상인 유저의 구독 데이터)를 삭제 후, 새 그룹 번호로 재구독할 수 있도록 조치합니다.
- 구독 Worker 재시작: 최종적으로 새로운 유저들이 채널을 구독할 수 있도록 임시 Queue를 Worker 서버와 연결
- 임시 Queue 에 쌓여 있던 구독 요청이 해소되면서 채널 구독이 진행됨
사업적인 방향성을 고려한 설계
- 초기 기획은 “캐시워크 공식 채널” 로, 캐시워크 내부 서비스에 대한 홍보 채널로써의 기능만을 하는 기획이었음
- 하지만, PM 님과 소통하면서 해당 기능은 캐시워크 내부에서만 사용되는 것이 아니라 외부 업체와의 계약을 통한 홍보 매체로 활용될 수 있는 기능이라는 결론을 내렸고
- 이에 따라 신규 채널을 개설하면 캐시워크 for Business 채널 기능을 활성화할 수 있도록 하는 인터페이스를 미리 개발함
아쉬웠던 점 및 향후 방향
로깅을 조금 더 꼼꼼히 남길 걸..
- 메시지 전송 도중에 문제가 발생할 수 있는 지점을 식별하여 로그를 심어두었어야 했음
- 일반 메시지 전송 시 현재 전송중인 채널 채팅방 ID를 로깅하여 개발 단에서 확인하고 문제 발생 시 즉각적으로 대응할 수 있도록 개발했어야 한다고 생각한다.
- 특히 외부 업체와의 계약으로 채널을 개설하고 메시지를 발송하는 경우 이러한 부분이 더욱 중요하다.
- 문제 발생 시 언제든지 메시지 발송을 중단할 수 있는 메커니즘이 필요하다고 생각..