본문 바로가기
Troubleshooting

+ ""는 의미가 있을까요?

by 밍상 2024. 2. 19.

직장에서 코드를 수정해서 카나리 서버에 배포했는데 갑자기 모니터링 알람이 마구마구 울렸습니다.

배포한 내용에서 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가 발생하였습니다.

 

결론

  1. Intellij의 커밋 설정의 Cleanup 옵션은 코드의 동작을 바꿀 수도 있으니 유의하라.
  2. null에 빈 문자열("")을 더하면 "null"이 된다.
    1. 물론 "null"을 사용하는 것보단 str값을 검증 후에 사용하는 것이 안전할 것으로 보입니다.

'Troubleshooting' 카테고리의 다른 글

Kafka - consume 실패 시 리트라이  (0) 2024.04.06