개발 slecs

정산 집계 쿼리에서 레거시 분배 타입 제외해 대시보드 수치 오류 수정

목차

COMMISSION_DISTRIBUTION 레거시 분배 필터에 reference_type 조건 추가

COMMISSION_DISTRIBUTION 레거시 분배 필터에 reference_type 조건 추가 버그를 수정했음.

원인 분석

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

재현 조건

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

수정 내용

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

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

검증

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

재발 방지

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

DB 설계 고려사항

이번 작업에서 DB 쿼리를 작성하면서 몇 가지를 점검했음.

인덱스 활용: WHERE 조건에 사용하는 컬럼에 인덱스가 있는지 확인했음. 특히 status, created_at 같은 자주 필터링하는 컬럼은 복합 인덱스를 고려했음.

-- 인덱스 설계 예시
CREATE INDEX idx_status_created ON 내부테이블 (status, created_at DESC);
-- status 필터링 후 최신순 정렬이 많을 때 유효

소프트 삭제: 데이터를 물리적으로 삭제하지 않고 deleted_at 컬럼으로 논리 삭제하는 패턴을 유지했음. 이력 추적이 필요한 데이터는 지우면 안 됨.

페이징: 대량 데이터 조회 시 LIMIT/OFFSET 방식이 현재 규모에서는 충분했음. 데이터가 많아지면 커서 기반 페이징으로 전환을 고려해야 함.

다음

댓글 0

첫 댓글 달아줘.