파트너 포탈 충전·쿠폰 집계 이중카운트 버그 수정
목차
파트너 포탈 4개 페이지 데이터 일치 + 충전/쿠폰 이중카운트 해결
파트너 포탈 4개 페이지 데이터 일치 + 충전/쿠폰 이중카운트 해결 버그를 수정했음.
원인 분석
JOIN 조건이 1:N 관계에서 row를 증가시켜 동일 건이 두 번 합산됐음.
재현 조건
집계 결과가 실제보다 2배 이상 크게 나왔음.
수정 내용
-- 수정 전: 1:N JOIN으로 중복 발생
SELECT SUM(a.amount)
FROM table_a a
JOIN table_b b ON b.ref_id = a.id;
-- 수정 후: EXISTS로 중복 방지
SELECT SUM(a.amount)
FROM table_a a
WHERE EXISTS (
SELECT 1 FROM table_b b WHERE b.ref_id = a.id
);
검증
수정 전후 합산 결과를 비교해서 일치하는지 확인했음.
재발 방지
SUM을 포함한 쿼리에 JOIN이 있으면 중복 여부를 반드시 확인하는 습관을 만들었음.
DB 설계 고려사항
이번 작업에서 DB 쿼리를 작성하면서 몇 가지를 점검했음.
인덱스 활용: WHERE 조건에 사용하는 컬럼에 인덱스가 있는지 확인했음. 특히 status, created_at 같은 자주 필터링하는 컬럼은 복합 인덱스를 고려했음.
-- 인덱스 설계 예시
CREATE INDEX idx_status_created ON 내부테이블 (status, created_at DESC);
-- status 필터링 후 최신순 정렬이 많을 때 유효
소프트 삭제: 데이터를 물리적으로 삭제하지 않고 deleted_at 컬럼으로 논리 삭제하는 패턴을 유지했음. 이력 추적이 필요한 데이터는 지우면 안 됨.
페이징: 대량 데이터 조회 시 LIMIT/OFFSET 방식이 현재 규모에서는 충분했음. 데이터가 많아지면 커서 기반 페이징으로 전환을 고려해야 함.
다음
댓글 0
첫 댓글 달아줘.