프로젝트 배경
1) 문제점 - 영업·정산·집행이 각각 다른 도구(스프레드시트, 외부 플랫폼 어드민, 수기 대장)에 흩어져 있어, 같은 거래처의 잔액이 어디서 보느냐에 따라 다르게 보였습니다. - 외부 집행 플랫폼과 파트너 시스템에 대한 요청이 실패해도 시스템에 흔적이 남지 않아, 운영자가 눈으로 발견해야 했고 놓치면 그대로 매출 누락이었습니다. - 잔액을 UPDATE 방식으로 관리하면 "이 금액이 왜 이 값
프로젝트 성과
잔액 전 구간 append-only 원장화
충전·사용·예약·환불·이관을 모두 불변 행으로 적재하고 잔액을 그 합으로 정의해, 모든 금액의 근거를 사후 재구성할 수 있게 했습니다.
시스템 간 중복 충전 원천 차단
모든 외부 상태 변경에 결정적 요청 ID와 저장 페이로드를 도입해, 재시도가 같은 ID를 재사용하고 페이로드 불일치는 충돌로 처리됩니다.
외부 발주 실패 자동 복구 체계 구축
일시적 오류만 30초·2분·5분 3회 자동 재시도하고 매 시도를 감사 기록으로 남겨, 수동 재시도 의존을 없앴습니다.
전 컬럼 timestamptz 전환으로 9시간 오차 제거
저장 주체에 따라 시각이 9시간 어긋나던 문제를 타임존 인지 컬럼 전환과 회귀 테스트로 해소했습니다.
핵심 기능
진행 단계
도메인 설계
2026.02.
거래처·계약·상품·정산의 관계를 정의하고, 잔액을 불변 원장의 합으로 두는 데이터 모델을 확정했습니다.
프로젝트 상세
■ 어떤 시스템인가 디지털 광고 대행사의 영업 조직이 쓰는 사내 영업관리 시스템(CRM)을 기획부터 운영까지 단독으로 설계·개발했습니다. 거래처 발굴부터 계약, 상품 등록, 선불 캐시 충전, 집행, 환불, 월 정산, 리포트까지 영업 한 사이클 전체를 하나의 시스템에서 처리합니다. - 백엔드: NestJS 11 + TypeORM + PostgreSQL 16 - 프론트엔드: React 19 + V






