마스킹 이름으로 들어온 정산 매칭 실패 수정
목차
마스킹 이름/하이픈 금액 매칭 실패 수정
마스킹 이름/하이픈 금액 매칭 실패 수정 버그를 수정했음.
원인 분석
실명 대신 마스킹된 이름(홍*동)이 들어올 때 DB의 실명과 직접 비교해서 매칭 실패가 발생했음.
재현 조건
마스킹 처리된 이름으로 들어온 요청이 NO_MATCH로 처리됐음.
수정 내용
// 수정 전: 완전 일치 비교만
boolean match = inputName.equals(storedName);
// 수정 후: 마스킹 패턴도 허용
boolean matchName(String input, String stored) {
if (input.equals(stored)) return true;
// 마스킹 패턴: 첫글자 + * + 마지막글자
if (stored.length() >= 2) {
String masked = stored.charAt(0) + "*" + stored.charAt(stored.length()-1);
return input.equals(masked);
}
return false;
}
검증
마스킹된 이름과 실명 모두 매칭이 정상인지 확인했음.
재발 방지
외부에서 들어오는 이름 필드는 마스킹 가능성을 항상 고려하기로 했음.
DB 설계 고려사항
이번 작업에서 DB 쿼리를 작성하면서 몇 가지를 점검했음.
인덱스 활용: WHERE 조건에 사용하는 컬럼에 인덱스가 있는지 확인했음. 특히 status, created_at 같은 자주 필터링하는 컬럼은 복합 인덱스를 고려했음.
-- 인덱스 설계 예시
CREATE INDEX idx_status_created ON 내부테이블 (status, created_at DESC);
-- status 필터링 후 최신순 정렬이 많을 때 유효
소프트 삭제: 데이터를 물리적으로 삭제하지 않고 deleted_at 컬럼으로 논리 삭제하는 패턴을 유지했음. 이력 추적이 필요한 데이터는 지우면 안 됨.
페이징: 대량 데이터 조회 시 LIMIT/OFFSET 방식이 현재 규모에서는 충분했음. 데이터가 많아지면 커서 기반 페이징으로 전환을 고려해야 함.
다음
댓글 0
첫 댓글 달아줘.