EN
프로젝트로 돌아가기
뉴스레터 서비스

뉴스레터 서비스

발송 동시성·운영 중 hot 테이블의 온라인 스키마 변경·외부에 떠 있는 식별자의 호환성을 동시에 만족시키도록 설계한 사내 뉴스레터 서비스

2024년 9월 - 현재 1년 8개월 진행중

기술 스택

PythonDjangoCeleryRedisPostgreSQLNGINXDockerNCP

개요

마케팅·고객 커뮤니케이션 채널을 외부 솔루션에 의존하지 않고 자체 운영하기 위해 만든 사내 뉴스레터 발송 서비스입니다. NCP 위에 Django + Celery + PostgreSQL + Redis + NGINX가 Docker Compose로 떠 있고, 한 번 발송할 때마다 EmailLog가 수만 건 단위로 쌓이는 고-카디널리티 테이블이 시스템의 성능과 정합성을 사실상 결정합니다.

운영 중에도 인덱스를 추가하거나 트래킹 스키마를 갈아엎어야 하는 환경이라 — 발송 파이프라인의 동시성과 정합성, hot 테이블 위에서의 온라인 스키마 변경, 외부에 이미 발송된 메일 안에 떠 있는 식별자의 호환성 세 가지를 동시에 만족시키는 것을 핵심 과제로 잡고 그에 맞춘 설계 결정을 쌓아 올렸습니다.

기술 스택

역할

PM 1·FE 2·BE 1 팀에서 백엔드 1인 담당. Django WAS 설계, 데이터 모델링, 발송 파이프라인, 추적·통계, 마이그레이션 설계까지 서버 측 전 영역을 책임지며, 2024년 9월부터 신규 기능 개발과 운영 안정화를 함께 진행하고 있습니다.

주요 기여

트러블슈팅

의의

수십만 건 단위의 메일을 흘리면서도 같은 워커가 같은 row를 두 번 잡지 않고, 인덱스를 추가해야 할 때 발송이 멈추지 않으며, 외부에 이미 떠 있는 트래킹 URL을 깨지 않으면서 내부 스키마를 갈아엎을 수 있게 한 사례입니다. “발송 동시성”과 “운영 변경 동시성”이라는 두 종류의 동시성을 같은 시스템 안에서 만족시키기 위해 outbox·온라인 DDL·legacy 매핑 레이어라는 같은 도구상자를 일관되게 가져다 쓴 점이 가장 만족스러웠습니다.

모든 프로젝트 보기
Close