NH농협 SMS 금액 파싱 정규식 순서 오류 수정
목차
NH농협 정규식 순서 보강 (보냈습니다 → 금액 → URL)
NH농협 정규식 순서 보강 (보냈습니다 → 금액 → URL) 버그를 수정했음.
원인 분석
은행 SMS 포맷이 변경되거나 새 형식이 추가됐을 때 기존 정규식이 커버하지 못했음.
재현 조건
특정 은행의 특정 형식 메시지가 NO_MATCH로 분류됨.
수정 내용
// 수정 전: 단일 패턴
Pattern p = Pattern.compile("(\d+)원");
// 수정 후: 우선순위 순으로 복수 패턴 시도
List<Pattern> patterns = List.of(
Pattern.compile("보냈습니다.+?(\d[\d,]+)원"),
Pattern.compile("입금\s*(\d[\d,]+)원"),
Pattern.compile("(\d[\d,]+)원\s*입금")
);
for (Pattern pat : patterns) {
Matcher m = pat.matcher(msg);
if (m.find()) return parseLong(m.group(1));
}
검증
수정된 패턴으로 기존에 실패한 메시지가 정상 파싱되는지 확인했음.
재발 방지
새 형식 추가 시 테스트 케이스에 추가하도록 프로세스를 만들었음.
개발 원칙 적용
이번 작업에서 몇 가지 원칙을 확인했음.
단일 책임 원칙: 각 클래스/함수가 하나의 역할만 담당하도록 구분했음. 역할이 섞이면 수정할 때 예상치 못한 곳에 영향이 가기 쉬움.
방어적 프로그래밍: 외부 입력이나 외부 시스템 응답은 항상 의심하고 검증하는 코드를 넣었음. 특히 null 처리와 상태 검증은 빠뜨리기 쉬운 부분임.
로깅: 주요 처리 지점마다 로그를 남겼음. 운영 중 이슈가 생겼을 때 로그만 봐도 원인을 찾을 수 있어야 함.
log.info("처리 시작: id={}, type={}", id, type);
// ... 처리 ...
log.info("처리 완료: id={}, result={}", id, result);
다음
댓글 0
첫 댓글 달아줘.