Skip to content

refactor: 일일 금융 동기화 N+1 쿼리 제거 및 계좌 저장 벌크화 (#233) - #235

Merged
hanjyoon01 merged 2 commits into
developfrom
feature/#233
Aug 24, 2026
Merged

refactor: 일일 금융 동기화 N+1 쿼리 제거 및 계좌 저장 벌크화 (#233)#235
hanjyoon01 merged 2 commits into
developfrom
feature/#233

Conversation

@KSBoscoKim

@KSBoscoKim KSBoscoKim commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

관련 이슈

작업 사항

  • 일일 금융 동기화 연결 조회 최적화

    • 사용자별 단건 조회를 사용자 ID chunk 기반 일괄 조회로 변경
    • CODEF·NTROPY 연결을 findByUserIdsAndProvider로 일괄 조회
    • 상위 서비스에서 조회한 CodefConnection을 기관별 수집 과정에 재사용
    • 기관 반복문 안에서 발생하던 CODEF 연결 중복 조회 제거
  • CODEF 계좌 저장·재조회 벌크화

    • 계좌별 upsert + findOne 반복을 upsertAll + findMany 방식으로 변경
    • 실제 서비스 호출 경계인 사용자×기관 단위로 계좌를 처리
    • MySQL packet 크기와 MyBatis 파라미터 수를 고려해 최대 200개 단위로 분할
    • bulk upsert 결과가 누락되면 거래 수집 전에 예외를 발생시키도록 검증
  • NTROPY 계좌 조회 개선

    • 기관마다 전체 계좌를 다시 조회하던 방식을 사용자당 1회 조회 후 기관별 그룹화하는 방식으로 변경
    • 기관 수에 비례하던 계좌 조회 증폭 제거
  • 배치·Mapper 안전장치 보강

    • Batching.chunk에 null 및 0 이하 chunk 크기 검증 추가
    • 단건/bulk upsert의 INSERT 컬럼과 ON DUPLICATE KEY UPDATE 정책 일치 여부 검증
    • 단건/bulk 조회의 projection과 복합키 조건 일치 여부 검증
  • 실제 MySQL 성능 검증 하네스 추가

    • MyBatis Executor 인터셉터로 실제 SQL 실행 횟수 측정
    • 워밍업 후 Before/After 순서를 번갈아 실행하고 median/p95 산출
    • 운영 Mapper와 동일한 전체 projection으로 EXPLAIN ANALYZE 수행
    • 실제 AccountCollectionService 경로를 통과하는 DB 스모크 테스트 추가

참고 사항

  • 실제 로컬 MySQL 9.7.1에서 사용자 100명 × 기관 3개 × 계좌 10개, 총 CODEF 계좌 3,000개 데이터셋으로 검증했습니다.
측정 항목 Before After 개선율
CODEF+NTROPY 연결 조회 SQL 200 2 99.0%
기관별 중복 CODEF 연결 조회 SQL 300 0 100.0%
CODEF 계좌 저장/재조회 SQL 6,000 600 90.0%
NTROPY 계좌 조회 SQL 300 100 66.7%
개선 대상 Mapper SQL 합계 6,800 702 89.7%
  • 로컬 MySQL Mapper 경로 수행시간

    • median: 23.18초 → 3.17초, 86.3% 단축
    • p95: 24.06초 → 3.71초, 84.6% 단축
    • 워밍업 1회, Before/After 교차 실행 5회 기준
  • 실행계획 확인

    • uk_codef_connection_user_provider: index range scan
    • uk_account_connection_hash: index range scan
    • 두 SELECT 모두 full table scan 없음
    • 운영 SQL은 전체 컬럼을 조회하므로 covering index 조회로 표현하지 않음

@KSBoscoKim KSBoscoKim self-assigned this Aug 24, 2026
@hanjyoon01
hanjyoon01 merged commit 72b9b0a into develop Aug 24, 2026
2 checks passed
@hanjyoon01
hanjyoon01 deleted the feature/#233 branch August 25, 2026 14:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ Refactor ] - account-service 일일 금융 동기화 N+1 쿼리 제거 및 계좌 저장 벌크화

2 participants