NPE 하나를 팀의 방어 체계로 바꾸기까지
·2026.08.20 17:56
핵심 내용
운영 환경에서 발생한 NPE 사고를 분석하고, Optional과 도메인 객체를 활용해 구조적으로 null 오류를 차단하는 설계 원칙을 제시했다.
자세히 보기
연차 날 발생한 쿠폰 복원 실패 사고의 원인은 NullPointerException(NPE) 이었다. 리팩토링 과정에서 예산 제한 쿠폰 여부를 확인하던 if 문이 사라지면서, 일반 쿠폰의 null 값이 유틸리티 함수까지 전달되어 오류가 발생했다.
이 버그는 컴파일러의 한계, 테스트 커버리지의 구멍, 코드 리뷰의 함정을 모두 통과했다. 단순한 주의력 부족이 아닌, 구조적 취약점이었다.
해결책은 Optional 타입과 도메인 객체를 활용해 null 가능성을 타입 시스템에 명시하는 것이다. Policy 클래스에서 예산 정보를 Optional<Budget>로 반환함으로써, 개발자가 null 체크를 누락하는 것을 원천적으로 차단했다.
또한 null 판단 로직을 범용 유틸리티가 아닌 데이터의 주인인 Value Object(IssuePeriod) 내부로 이동시켜, 도메인 지식이 유틸 코드로 오염되는 것을 방지했다. 이는 개발자의 실수를 허용하지 않는 안전한 시스템 설계로 이어진다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.