흑구의 공부내용 공유

[IntelliJ] SonarLint 코드분석 플러그인 소개(코드리뷰, 코딩 rule, 코딩스타일)

코딩하는흑구 2020. 6. 25. 23:21

안녕하세요. 오늘은 인텔리제이를 사용하시는 분들을 위해서 좋은 플러그인을 하나 발견해서 공유하고자 합니다.

 

 

SonarLint

 

스프링 프레임워크를 사용하며 자연스럽게 Java를 이용해서 프로그래밍을 자주 하게 되는데요. 자바의 Exception 중에서 개발자들이 NullpointerException을 가장 많이 낸다고 합니다.

 

그 이유중 하나가 저도 많이 느끼지만 Nullable에 대한 처리를 제대로 하지 못했던 경우입니다. 그로인해 예기치못한 상황에서 API가 서버에러를 내고 클라이언트 개발자들에게 Exception을 전달받는 상황이 많았습니다.

 

그래서 IDE 컴파일러 단에서 이걸 좀 확인해줄 수 있는 강력한 Lint가 없을까 생각하면서 찾아보다가 SonarLint를 알게 되었습니다.

 

사용법

일단 플러그인을 설치하고 인텔리제이를 재시작하고나면 아래쪽 탭에 빨간색 SonarLint라는 탭이 생성되어 있을 것입니다.

탭을 클릭하면 다음과 같은 화면이 나타나게되는데

 

먼저 초록색 플레이 버튼을 누르게 되면 현재 인텔리제이가 열고있는 페이지를 분석합니다.

 

여러가지 경고 혹은 알림같은 메시지를 띄우게 되는데, 가장 현재 눈에 띄는 두번째 NullpointerException에 관한 내용을 클릭해보겠습니다.

 

내용은 NullPointerException이 발생할 수 있다. "userEntity"라는 객체가 null일 수 있으니 주의하라" 라는 내용입니다.

그럼 userEntity라는 객체를 찾아가보겠습니다.

현재 빨간 네모칸에서 userEntity라는 변수의 getter를 실행하고 있는데 이부분에서 NullPointerException을 발생시킬 수 있다고 판단한 것입니다.

 

userEntity != null && 

 

라는 조건을 앞부분에 추가해주면 일단은 해당 빨간네모에서는 NullpointerException을 발생할 가능성을 완전히 없애버리고 아래 분석 리스트에서 경고문이 사라지게 됩니다.

 


 

또 한가지 제가 SonarLint를 선택하게 된 이유는 바로 Rule 탭에 존재하는 보완 솔루션입니다.

바로 다음과 같이 다소 문제를 야기할 수 있는 코드에 해당하는 보완 솔루션을 예제로 제시해준다는 점이 꽤 괜찮게 느껴졌습니다.

 


 

아무래도 이렇게 정리할 수 있는 이유는 SonarLint 측에서 가지고 있는 rule 데이터 때문인데요. 이를 확인하기 위해서는 settings에서 sonarLint 메뉴를 확인해보면 알 수 있습니다.

 

sonarLint rule

Java 뿐만아니라 HTML, Javascript, Kotlin, PHP, Python, TypeScript 등 여러가지 프로그래밍 언어를 지원하고 있습니다.

rule에 대해서는 특정 언어를 펼쳐서 체크박스를 통해 on/off로 적용할 수 있습니다. 

 

개인 혹은 팀에서 특정 코딩컨벤션에 맞춰서 코딩을 해야할 때 이런식으로 특정 rule은 어느정도 허용을 한 채로 진행할 수 있도록 융통성도 있는 것 같습니다. ㅎㅎ