개발 slecs

송금 수취인 계좌 오매칭을 파트너 식별자 조회로 해결

목차

파트너 식별자 기반 계좌 조회로 갈아탄 이유

연락처 송금 흐름 손볼 때 가장 거슬렸던 게 수취인 계좌 매칭 로직임. 기존엔 입력값(연락처 + 이름) 조합으로 계좌를 끌어왔는데, 동명이인이거나 같은 번호를 공유하는 파트너가 끼면 엉뚱한 잔액 계좌로 꽂힐 위험이 있었음. 이번에 파트너 식별자(partnerSn)를 1차 키로 잡고 계좌를 조회하도록 갈아엎음.

바뀐 부분 정리

영역 이전 이후
송금 폼 연락처 + 이름 hidden 파트너 식별자 hidden 추가
컨트롤러 문자열 조합 검색 식별자 우선, 미존재 시 fallback
유틸 매칭 결과 단건 가정 단건 강제 + 다건이면 즉시 예외
매퍼 LIKE 검색 식별자 단일 SELECT

핵심은 폼에서 식별자를 같이 넘기게 한 것. 화면에서 파트너 선택할 때 이미 식별자를 쥐고 있는데도 굳이 텍스트로 다시 매칭한 게 그동안 깨진 부분이었음.

컨트롤러에서 신경 쓴 포인트

  • 식별자 누락 요청은 그냥 4xx 로 잘라냄. 과거 호환을 위해 fallback 두려다 "그건 새 결제 라인업에선 안 쓴다"고 결론 내고 제거.
  • 유틸 시그니처도 한 줄 갈아끼움.
// before
Account acc = util.findByContact(name, phone);

// after
Account acc = util.findByPartnerSn(partnerSn)
        .orElseThrow(() -> new BizException("INVALID_PARTNER"));
  • Optional 강제로 바꾸니 호출부에서 null 체크 빠뜨린 곳 두 군데 잡힘. 보너스.

매퍼/SQL 정리하면서 발견한 것

  • 기존 LIKE 쿼리가 인덱스를 못 타고 있었음. 식별자 단일 조건으로 바꾸니 실행계획에서 PK 레인지 한 방.
  • 같이 살펴본 김에 안 쓰는 컬럼 join 두 개 끊음. 송금 처리 평균 응답 50ms 이상 줄었음. 측정은 로컬 + 개발 환경 둘 다.

회고 메모

  • 데이터 식별자가 이미 있으면 텍스트로 재매칭하지 말 것. 이게 매번 사고 친 패턴이라 이번 기회에 머리에 박았음.
  • 폼 hidden 필드는 화면 작업자가 자주 빠뜨리는 부분이라, 컨트롤러에서 누락 시 명시 에러 던지는 쪽이 디버깅 빠름.
  • fallback 욕심 줄이기. "혹시 모르니 옛날 방식도..." 가 결국 버그 온상이 됨. 지울 땐 깔끔하게.

다음

댓글 0

첫 댓글 달아줘.