[portfolio](https://geonwoo.kim/ko/portfolio) › 비즈톡

# 카카오톡 발송·템플릿 통계 수집 서버

https://geonwoo.kim/ko/portfolio/kakao-stats

기간: 2025.05 — 2025.06

알림톡·친구톡·브랜드메시지 세 종류를 다룹니다. 통계 테이블은 사용자 ID 기준으로 역정규화해 조회 쿼리 성능을 높였습니다.

월 800만 건 이상의 발송 통계 수집

팀: 1인

역할: DB·플로우 설계 · 배치 스케줄러 · 집계 API · 재수집 API · 데이터 재가공 스케줄러

Java 17 · Spring Boot 3.5 · Spring Batch · MyBatis · MySQL

## 경과일마다 다른 통계

문제: 카카오 API의 읽음·클릭 통계는 경과일(0·1·2일)별로 따로 집계되어 들어왔습니다. 한 번에 합치면 값이 맞지 않아 데이터 정합성이 깨졌습니다.

해결: 매일 카카오 API에서 집계된 통계 전체를 받아오게 했습니다. 읽음·클릭 값은 경과일별 3단계로 나눠 누적했습니다. 배치는 500건씩 DB에 써서 쓰기 성능을 높였습니다.

## 재수집 시 중복 적재

문제: 배치 집계가 빠지는 경우에 대비해 수동 재수집 API를 만들자, 같은 데이터를 여러 번 누적할 수 있는 구조가 되었습니다.

해결: 역정규화한 최종 테이블에서 변동 컬럼을 뺀 주요 컬럼으로 복합키를 구성했습니다. elapsed\_mask 컬럼을 추가해 경과일 0·1·2를 비트 1·2·4로 표시했습니다. 누적할 때 이 비트를 확인해 같은 경과일 값을 두 번 더하지 않게 했습니다. 같은 데이터를 다시 수집해도 행이 중복되지 않아 통계의 정합성이 유지되었습니다.


[서버 설정 관리와 배포 자동화 스크립트](https://geonwoo.kim/ko/portfolio/biztalk-ops-automation) · [에이전트가 사업을 운영하는 AI 네이티브 커머스](https://geonwoo.kim/ko/portfolio/deepeet)
