캠페인 발송 큐 기반 아키텍처 + 성과 이벤트 수집 설계 경험으로 설명
인턴 때 캠페인 발송 백엔드를 처음 설계해봤습니다. 발송 요청이 들어오면 바로 외부 API를 호출하는 구조로 시작했는데, 대규모 발송 시 동기 호출로 타임아웃이 발생하는 문제가 생겼습니다. 이후 발송 요청을 DB에 먼저 쌓고 별도 워커가 처리하는 큐 기반 아키텍처로 바꾸면서 안정성이 올라갔습니다. 캠페인 조건(대상 세그먼트·발송 시각·채널)은 campaign_rules 테이블에 분리해서 코드 변경 없이 조건을 수정할 수 있게 했습니다. 발송 결과는 클릭·오픈·수신 거부 이벤트를 별도로 수집해서 캠페인 성과를 추적할 수 있도록 설계했습니다. 동일 사용자에게 중복 발송이 되지 않도록 발송 이력 테이블도 함께 설계했습니다.
마케팅 백엔드는 발송 속도보다 정확성과 추적이 더 중요한 자리라는 걸 그때 배웠습니다.