이 문서는 소나큐브(SonarQube) 에서 커스텀 룰(Custom Rule)을 생성하는 가이드를 공유하기 위해 작성되었다.
커스텀 룰 생성
커스텀 룰을 생성하기 위해 플러그인에서 제공하는 규칙 템플릿을 사용한다.
Rules > 왼쪽 메뉴 Template > Show Templates Only에서 원하는 템플릿을 클릭한다.
해당 템플릿 페이지 하단의 "Create" 버튼을 클릭하여 새로운 커스텀 룰에 대한 정보를 입력한다.
다음의 정보를 입력 후 "Create"를 클릭하여 새로운 커스텀 룰을 생성한다.
- Name(필수) : 규칙 이름
- Key (필수): 키 (규칙 이름 입력 시 자동 제안)
- Category : 클린 코드 카테고리
- Attribute : 클린 코드 속성
- Software Quality (필수): 소프트웨어 품질
- Severity (필수): 심각도
- Status : 규칙 상태
- Description(필수) : "Why is this an issue?"에 대한 설명
- 템플릿에 의해 지정된 정보
생성된 커스텀 룰을 클릭하여 세부 정보를 확인할 수 있다.
품질 프로필에서 커스텀 룰 활성화
커스텀 룰을 사용할 품질 프로필(Quality Profile)을 추가한다.
커스텀 룰 세부 정보 페이지 > Quality Profiles > "Activate" 버튼 클릭
"Quality Profile"에서 사용할 품질 프로필 선택.
- Quality Profile : 생성한 룰을 추가할 품질 프로필
- Severity : 심각도(deprcated)
[선택] 품질 프로필(Quality Profiles) 생성
새로운 품질 프로필(Quality Profile)에 커스텀 룰을 추가하고 싶은 경우, Quality Profiles > 오른쪽 "Create"버튼을 클릭하여 생성할 수 있다.
다음과 같이 세 가지 방법으로 프로필을 생성할 수 있다.
- Extend an existing quality profile : 상위 품질 프로필의 활성화된 룰을 상속 받아 하위 품질 프로필을 생성한다.(상위 품질 프로필 변경 시 하위 프로필에 영향을 준다.)
- Copy an existing quality profile : 기존에 생성된 프로필을 복사하여 새로운 품질 프로필 복사본으로 생성한다. (두 프로필은 변경 시 서로에 영향을 주지 않는다.)
- Create a blank quality profile : 활성화된 규칙이 없는 새로운 품질 프로필을 생성한다.
SonarQube는 내장된 기본 품질 프로필인 "Sonar way"를 상속 받아서 새로운 프로필을 생성하는 것을 권장한다.
이 경우, 자동으로 다음과 같은 이점을 얻을 수 있다.
- 새로 구현된 규칙
- 규칙의 기본 구성 변경 사항
[선택] sonar-checkstyle 플러그인 설치
Checkstyle은 코딩 표준을 준수하는 Java 코드를 작성하는 데 도움이 되는 개발 도구로서 SonarQube에서 코드 포맷이나 레이아웃 등에 대한 다양한 템플릿을 제공한다.
자동 설치(커뮤니티 버전)
1. Administration > Marketplace에서 "checkstyle" 검색 후 install 버튼 클릭
2. 서버 재시작
수동 설치(상용 버전)
1. Releases · checkstyle/checkstyle (github.com)에서 SonarQube 버전과 호환되는 버전의 jar파일을 다운로드 받는다.
2. <SONARQUBE_HOME>/extensions/plugins경로에 다운로드 받은 파일을 넣고 SonarQube 서버를 재시작한다.
예시 - 정규식 표현으로 검사하는 커스텀 룰 생성
1. 커스텀 룰 생성을 참고하여 Regexp Multiline Template 템플릿에서 커스텀 룰을 추가한다.
(*Regexp Multiline Template : 정규 표현식을 사용하여 여러 줄에 걸친 코딩 스타일 위반 사항을 검사하는 기능을 제공하는 템플릿)
정보 입력 시 템플릿에 의해 지정된 정보 부분을 다음과 같이 입력한다.
- FileExtensions : 처리할 파일의 확장자를 지정
- IgnoreCase : 검색 시 대소문자를 무시할지 여부를 설정
- Format : 정규 표현식의 형식을 지정 (예: \b[A-Z]{1,2}\d{7,8}\b)
- MatchAcrossLines : 여러 줄에 걸쳐 표현식을 일치시킬지 여부를 설
- Maximum : 각 파일에서 필요한 최대 일치 횟수를 지정
- Messege : 위반 사항을 알리기 위해 사용되는 메시지를 지정, 이 값이 비어 있으면 기본 메시지가 사용됨(예: Hard-coded passport number informations are security-sensitive)
- Minimum : 각 파일에서 필요한 최소 일치 횟수를 지정
2. 사용할 품질 프로필에 생성한 커스텀 룰 활성화
3. 1,2단계 설정 완료 후, 소스 코드를 분석한다.
4. 하드 코딩된 여권 번호가 있을 경우, 생성한 룰에 따라 다음과 같은 이슈가 나타난다.