선택형 자식 쿠폰 환불 시 부모 쿠폰 식별자 null 오류 수정
목차
선택형 자식 쿠폰 환불 시 부모 welcomeUseTrstnId fallback
선택형 자식 쿠폰 환불 시 부모 welcomeUseTrstnId fallback 버그를 수정했음.
원인 분석
특정 경로에서 필드값이 null로 들어오는 케이스가 있었음. 정상 경로에서는 값이 항상 존재해서 null 처리가 빠져 있었음.
재현 조건
특정 조건의 요청에서 NullPointerException 발생. 로그에서 확인됨.
수정 내용
// 수정 전: null 체크 없음
Long id = getIdFromSource(); // null 반환 가능
process(id); // NPE 발생
// 수정 후: null fallback 처리
Long id = getIdFromSource();
if (id == null) {
id = resolveAlternativeId(context); // 대안 소스에서 조회
}
if (id == null) throw new IllegalStateException("id를 확인할 수 없음");
process(id);
검증
null이 발생하는 경로를 명시적으로 테스트해서 fallback이 동작하는지 확인했음.
재발 방지
null이 올 수 있는 모든 소스 경로를 추적하고 처리 방침을 문서화했음.
개발 원칙 적용
이번 작업에서 몇 가지 원칙을 확인했음.
단일 책임 원칙: 각 클래스/함수가 하나의 역할만 담당하도록 구분했음. 역할이 섞이면 수정할 때 예상치 못한 곳에 영향이 가기 쉬움.
방어적 프로그래밍: 외부 입력이나 외부 시스템 응답은 항상 의심하고 검증하는 코드를 넣었음. 특히 null 처리와 상태 검증은 빠뜨리기 쉬운 부분임.
로깅: 주요 처리 지점마다 로그를 남겼음. 운영 중 이슈가 생겼을 때 로그만 봐도 원인을 찾을 수 있어야 함.
log.info("처리 시작: id={}, type={}", id, type);
// ... 처리 ...
log.info("처리 완료: id={}, result={}", id, result);
다음
댓글 0
첫 댓글 달아줘.