본 프로젝트는 통신사의 대용량 요금 청구 데이터를 기반으로
요금 명세서를 생성하고, 고객에게 이메일/SMS 알림을 안정적으로 발송하는 시스템을 구현하는 것을 목표로 합니다.
월 수백만 건 이상의 요금 데이터와 대량 메시지 발송 환경을 가정하여
비동기 메시지 처리 아키텍처(Kafka) 를 중심으로 설계하였습니다.
통신 서비스에서는 매월 대규모 요금 데이터가 생성되며,
요금 고지·연체 알림·청구 안내 등 다양한 고객 알림이 필수적으로 발생합니다.
본 프로젝트는 다음과 같은 문제를 해결하는 데 목적이 있습니다.
- 대량 요금 데이터의 안정적인 정산 처리
- 대규모 메시지 발송 시 장애 격리 및 재처리
- 발송 성공/실패 이력 관리 및 중복 발송 방지
- 실무에서 사용되는 메시지 기반 아키텍처 경험
- Batch 정산 시스템을 통해 요금 데이터를 생성
- 메시지 발송 요청을 Kafka 이벤트로 발행
- 이메일/SMS 발송 서비스는 이벤트를 구독하여 비동기 처리
- 발송 결과는 DB에 저장하여 이력 관리 및 재시도 가능
- 가상 고객 100만 명, 청구 이력 500만 건 데이터 생성
- 월별 Batch 작업으로 요금 정산 수행
- 요금 명세 데이터를 데이터베이스에 저장
- 요금 정산 완료 시 Kafka 이벤트 발행
- 메시지 발송은 비동기 방식으로 처리
- 이메일, SMS 발송 채널 분리 설계
- 이메일, SMS 발송 기능 구현 (Mock 기반)
- 발송 실패 시 자동 재시도 로직 적용
- 이메일 발송 실패 시 최대 1초 지연 후 재시도
- SMS는 실패하더라도 재시도 없이 종료 가능
- 메시지 단위 발송 상태 관리
- ATTEMPTING / SUCCESS / FAIL
- 발송 시도 횟수 기록
- 외부 발송 시스템 메시지 ID 저장
- 중복 발송 방지 로직 구현
- 이메일, SMS 외 Push 메시지 확장 가능 구조
- 특정 시간대 예약 발송 기능
- 발송 실패 메시지 재처리(Replay) 기능
● FrontEnd - React ● BackEnd - Java 17 - Springboot 3.X - Spring Batch - Kafka - Spring JPA / JDBC - Spring REST Docs - JUnit5 / Mockito / Jacoco ● Database / Infra - MySQL 8.0 - AWS - Redis
https://www.notion.so/1-2d9d55c21c58802ea317fac5a07c480c
- 대용량 트래픽 환경에서의 비동기 메시지 처리 경험
- Kafka 기반 이벤트 드리븐 아키텍처 이해
- 메시지 발송 실패 대응 및 재처리 전략 구현
- 실무형 요금 청구 및 알림 시스템 설계 경험