개발 slecs

판매대금 집계 쿼리 조건 오류 수정

목차

판매대금 쿼리를 orders 페이지와 동일 기준으로 통일

판매대금 쿼리를 orders 페이지와 동일 기준으로 통일 버그를 수정했음.

원인 분석

SQL 쿼리 조건이 불완전해서 대상 외 데이터가 포함되거나 제외됐음.

재현 조건

특정 조건에서 집계 결과가 예상과 다름.

수정 내용

-- 수정 전: 조건 불완전
SELECT * FROM 내부테이블 WHERE status = 'ACTIVE';

-- 수정 후: 조건 보완
SELECT * FROM 내부테이블
WHERE status = 'ACTIVE'
  AND deleted_at IS NULL
  AND type NOT IN ('LEGACY_TYPE');

검증

수정된 쿼리 결과와 기대값을 대조했음.

재발 방지

쿼리 작성 시 소프트 삭제 조건과 타입 필터를 체크리스트로 확인하기로 했음.

DB 설계 고려사항

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

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

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

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

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

다음

댓글 0

첫 댓글 달아줘.