All
배경
•
메인 서비스 MariaDB와 데이터팀 MariaDB 간 복제를 위해 AWS DMS (Database Migration Service) 사용 중
•
DMS 동작 검증을 위해 매시간 직전 2시간 구간의 데이터를 기준으로
◦
소스/타깃 DB의 Row 수 비교
◦
스키마 변경 여부 감시 로직이 존재함
•
그 중 CART 테이블만 거의 소스 테이블 행 수가 더 많다는 정합성 알람이 자주옴
원인 분석
1. CART 테이블의 특성
•
CART는 hard delete가 발생하는 테이블로, 사용자가 장바구니에서 상품을 제거하면 실제로 레코드가 삭제됨
•
조회 쿼리 예시
SELECT COUNT(*) FROM CART
WHERE created_at >= '2025-09-23 18:00:00'
AND created_at < '2025-09-23 19:00:00'
SQL
복사
2.
로그 분석
•
데이터 비교하는 task 로그를 보면 Secret retrieved successfully. 가 두번 찍히는 것을 볼 수 있었음
•
이는 소스 DB와 타겟 DB 각각 connection 맺어서 값을 조회할때, 시크릿매니저에서 DB 시크릿 값을 읽어오면서 찍히는 로그
•
타임라인
◦
17:02:10 - 메인 DB 시크릿 조회 후 COUNT 쿼리 수행
◦
17:02:26 - 데이터팀 DB 시크릿 조회 후 COUNT 쿼리 수행
◦
→ 두 쿼리간 16초 차이있음
3.
원인 정리
a.
메인 DB에서 COUNT 쿼리 실행 시점에 CART에 존재하던 데이터가 포함된 상태
b.
이후 16초 텀 사이에 장바구니에 담은 항목들이 삭제됨
c.
데이터 DB CART에 삭제 CDC 이벤트가 바로 반영되어 행개수가 줄어듬
d.
타깃 DB에서 COUNT 쿼리 실행 시 이미 줄어든 상태로 조회
e.
최종적으로 비교시 메인 DB CART의 행 수가 항상 더 많게 나옴
개선
•
동시 쿼리 실행으로 시차 제거
◦
ThreadPoolExecutor(max_workers=2) 사용
◦
소스/타깃 COUNT를 동시에 실행
•
시크릿 호출 최적화
◦
기존 boto3를 통한 Secrets Manager 직접 호출 제거
◦
기존 방식인 Airflow Connection + MySqlHook 으로 일원화
•
검증 윈도우 수정
◦
의미없던 타임 윈도우 2시간 → 1시간으로 중복 집계 없애고 한시간마다 한시간치만 조회하도록 변경
결과
•
변경 이후 동일 유형의 CART 정합성 노이즈 알람 제거됨
•
진짜 정합성 알람만 남게되어 DMS 모니터링 신뢰도 향상

