직장에서 코드를 수정해서 카나리 서버에 배포했는데 갑자기 모니터링 알람이 마구마구 울렸습니다.
배포한 내용에서 NPE가 발생한다는 내용이었어요.
"왜지? 분명 로컬에선 잘 돌아갔는데?" 라는 생각을 했었는데요.
예외가 발생한 이유가 무엇이었을까요?
수정 전 코드
String str = "";
...
while(true){
...
var comment = str + "";
if(comment.equals(preComment)){
...
}
...
}
기존에 위와 같은 형태로 코드가 개발돼있었습니다.
그리고 저 코드가 속한 메서드와 관계없는 코드를 수정하고 commit을 했는데요.
Intellij에 Cleanup 을 포함한 여러가지 commit 설정들을 사용하고 있었고,
그 중에 Cleanup 옵션에서 자동으로 str + "" 에서 + ""를 제거하는 문제가 발생했어요.
이게 왜 문제가 발생했을까 확인해보니,
위의 코드에는 나와 있지 않지만 str이 null이 되는 케이스가 있었고,
그러므로 기존에는 comment에는 "null"이 들어가던 내용이 comment에 null이 들어가도록 수정이 됐습니다.
// Cleanup으로 인한 변경 전 코드
var comment = str + ""; // -> "null"
// 변경 후 코드
var comment = str; // -> null
따라서 기존에는 "null".equals(...)로 예외가 발생하지 않던 코드에서
null.equals(...)로 바뀌며 NPE가 발생하였습니다.
결론
- Intellij의 커밋 설정의 Cleanup 옵션은 코드의 동작을 바꿀 수도 있으니 유의하라.
- null에 빈 문자열("")을 더하면 "null"이 된다.
- 물론 "null"을 사용하는 것보단 str값을 검증 후에 사용하는 것이 안전할 것으로 보입니다.
'Troubleshooting' 카테고리의 다른 글
Kafka - consume 실패 시 리트라이 (0) | 2024.04.06 |
---|