개발 slecs

레거시 타입 제외로 정산 집계 불일치 수정

목차

COUPON_CHARGE 판정 강화 + [REDACTED] 레거시 호출 제거

COUPON_CHARGE 판정 강화 + [REDACTED] 레거시 호출 제거 버그를 수정했음.

원인 분석

구 데이터 타입(COMMISSION_DISTRIBUTION 등)이 집계 쿼리에 포함되면서 현재 기준과 다른 결과가 나왔음.

재현 조건

대시보드 집계 숫자가 실제 처리 건 합산과 달랐음.

수정 내용

-- 수정 전: 모든 타입 포함
SELECT SUM(amount) FROM 내부테이블;

-- 수정 후: 레거시 타입 제외
SELECT SUM(amount)
FROM 내부테이블
WHERE type NOT IN ('COMMISSION_DISTRIBUTION', 'SETTLEMENT')
  AND reference_type != 'LEGACY';

검증

조회 6곳에 동일 조건 적용 후 각 화면 결과값을 수동으로 대조했음.

재발 방지

레거시 타입 제외 조건을 상수로 정의해서 여러 쿼리에서 일관되게 사용하기로 했음.

개발 원칙 적용

이번 작업에서 몇 가지 원칙을 확인했음.

단일 책임 원칙: 각 클래스/함수가 하나의 역할만 담당하도록 구분했음. 역할이 섞이면 수정할 때 예상치 못한 곳에 영향이 가기 쉬움.

방어적 프로그래밍: 외부 입력이나 외부 시스템 응답은 항상 의심하고 검증하는 코드를 넣었음. 특히 null 처리와 상태 검증은 빠뜨리기 쉬운 부분임.

로깅: 주요 처리 지점마다 로그를 남겼음. 운영 중 이슈가 생겼을 때 로그만 봐도 원인을 찾을 수 있어야 함.

log.info("처리 시작: id={}, type={}", id, type);
// ... 처리 ...
log.info("처리 완료: id={}, result={}", id, result);

다음

댓글 0

첫 댓글 달아줘.