Study/Java

SonarQube, SonarLint issue 예외 처리하기

Bluesky_ 2024. 5. 11. 04:16
반응형

SonarQube나 SonarLint를 사용하면 코드 품질 관리가 편해진다.

검사 대상 프로젝트의 코드 내 버그, 코드 스멜, 보안 취약점을 찾아 관련 내용을 issue로 등록하여 어느 부분에 어떤 문제가 있는지를 알려준다.

하지만 issue로 등록하지 않기를 원하는 내용에 대해서도 Issue로 남기는 경우가 있다.

예를 들어 아래와 같이 사용하는 경우를 가정해 보자.
(Spring은 class 위치에 @RequestMapping 선언으로 각 method가 호출하는 공통된 path를 조합할 수 있지만 아래의 경우 그렇게 사용하지 않는 케이스라고 가정해 본다.)

@Controller
public class Controller {

    private final String pathPrefix = "/some/prefix/path";

    @GetMapping(pathPrefix + "/someRequest1")
    public String someRequest1() {
    }

    @GetMapping(pathPrefix + "/someRequest2")
    public String someRequest2() {
    }
}

이런 경우 SonarQube나 SonarLint는 pathPrefix 문자열 선언 위치에 대해 java:S1075 issue를 안내한다.

 

https://sonarsource.atlassian.net/browse/RSPEC-1075

주소 문자열을 조합해 사용하려는 의도이기 때문에 굳이 지적받은 바와 같이 수정하길 원치 않는다.

이런 경우 품질 관리 이슈 등록에 예외 처리가 되어야 해당 코드에 대해 경고받지 않을 수 있다.

인터넷에서 찾아보니 예외처리하는 방법이 다음과 같이 있다.

방법 1 - @SuppressWarnings annotation 사용

@SuppressWarnings을 다음과 같이 추가하면 된다.

@Controller
public class Controller {

    @SuppressWarnings("java:S1075")
    private final String pathPrefix = "/some/prefix/path";

    @GetMapping(pathPrefix + "/someRequest1")
    public String someRequest1() {
    }

    @GetMapping(pathPrefix + "/someRequest2")
    public String someRequest2() {
    }
}

이렇게 추가하면 해당 위치에 해당 rule에 대한 품질 검사를 예외처리하게 된다.

Eclipse Unsupported @SuppressWarnings warning 비활성화 설정하기

하지만 내 경우 Eclipse를 사용하는데 Eclipse에서는 @SuppressWarning 을 위처럼 사용하는 경우 Unsupported @SuppressWarnings("java:S1075") warning이 발생한다.

Eclipse에서 이 warning을 비활성화하려면
환경설정 -> Java -> Compiler ->Errors/Warnings 메뉴의 Annotations 항목에 Unhandled Token in '@SuppressWarnings' 항목이 Warning 으로 되어있는 부분을 Ignore 로 바꿔주면 된다.

방법 2 - // NOSONAR 주석 사용

다음과 같이 // NOSONAR 주석을 사용하여 품질 검사 예외 처리를 할 수도 있다.

@Controller
public class Controller {

    private final String pathPrefix = "/some/prefix/path";   // NOSONAR 여기에 설명을 추가할 수 도 있음

    @GetMapping(pathPrefix + "/someRequest1")
    public String someRequest1() {
    }

    @GetMapping(pathPrefix + "/someRequest2")
    public String someRequest2() {
    }
}

다만 이 경우 해당 라인에서 발생하는 다른 품질 검사 issue도 모두 예외 처리하기 때문에 놓칠 수 있는 단점이 있다.


위에서 설명한 2가지 방법은 특정 코드 위치에서 품질 검사 issue 예외 처리를 하는 방법이다.

아예 특정 코드 품질 검사 rule id를 전역 예외 처리하는 설정을 설정 파일이나 maven properties 변수로 지정하여 사용하는 방법도 있다.
해당 설정 부분에 대해서 자세히 알고 싶은 경우 아래 sonarqube 문서에서 확인하면 된다.
https://docs.sonarsource.com/sonarqube/latest/project-administration/analysis-scope/

또한 Profile로 Rule에 대해 관리할 수도 있고 또는 특정 프로젝트 단위로 Rule 제외처리나 검사 범위를 제한하는 방법도 있다.

상황에 맞게 적절한 방법을 선택하면 된다.

반응형