코드의 품질을 높여주기위해 SonarQube 로 정적 분석을 할 수 있는데 그 과정에 대해 정리해보자.
SonarQube 란
SonarQube 는 코드의 품질을 지속적으로 검사하여 자동 코드 리뷰를 수행하는 오픈 소스 플랫폼이다.
SonarQube 사용 이유
- 코드 품질 개선
: 정적 분석을 통해 코드 스멜, 버그, 취약점 드을 식별하여 코드 품질을 개선할 수 있다.
- 지속적인 코드 검사
: 자동화된 코드 리뷰를 통해 개발 과정 전반에 걸쳐 지속적으로 코드 품질을 검사하고 유지할 수 있다.
- 다양한 언어 지원
: Java, C#, Python 등 다양한 프로그래밍 언어를 지원한다.
- 통합 개발 환경(IDE) 지원
: SonarLint 와 같은 플러그인을 통해 Eclipse, Visual Studio 등의 IDE 에서 피드백받을 수 있다.
- 품질 관문(Quality Gates)
: 코드가 사정 정의된 품질 기준을 충족하는 지 확인하고 기준에 부합하지 않는 코드의 이동을 막을 수 있다.
- 보안 취약점 감지
: 코드 내 보안 취약점을 식별하여 애플리케이션의 보안 수준을 높일 수 있다.
- 시각화
: 대시보드를 통해 코드 품질, 보안 취약점 등의 지표를 시각적으로 확인할 수 있다.
SonarQube 로 정적 분석하기 with docker, spring boot
1. sonarqube install with docker
$ docker pull sonarqube
$ docker run -d -p 9000:9000 sonarqube
2. localhost:9000 접속 및 로그인하여 Token 발급
- 초기 ID 및 Password : admin
- My Account > Security > Generate Tokens - Type: User Token 으로 Generate ( Name 과 Expires In 은 개별 설정 )
3. project plugin 설정 for gradle : build 를 통해서 sonarqube 로 정보 전달 가능
- build.gradle
plugins {
..
// https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner-for-gradle/
id 'org.sonarqube' version '4.4.1.3373'
}
sonar {
properties {
property("sonar.host.url", "http://localhost:9000") // host url
property("sonar.login", "token") // SonarQube에서 생성한 token 값
}
}
4. sonarqube 로 정적 분석하기
$ ./gradlew sonarqube
- 실행 결과
SonarQube 활용하기
1. Projects Tab : SonarQube 서버에 등록된 모든 프로젝트를 볼 수 있다.
2. Issues Tab : 코드 분석을 통해 발견된 모든 문제 (버그, 취약점, 코드 스멜 등) 을 볼 수 있다. 심각도, 분류, 파일, 라인 넘버 등 다양한 방식으로 정렬할 수 있으며 Issue 를 할당하는 등 어떻게 처리할 지 결정할 수 있다.
Filters 내 항목들은 다음과 같다.
Clean Code Attribute:
- Consistency : 코드가 일관된 방식으로 작성되었는지
- Intentionality : 코드가 의도를 명확하게 전달하는지
- Adaptability : 코드가 변경에 유연하게 대응할 수 있는지
- Responsibility: 코드가 단일 책임만을 가지고 있는지
Software Quality:
- Security: 보안 관련 이슈
- Reliability: 버그로 인한 잠재적 실패 가능성 ( 신뢰성 )
- Maintainability : 코드가 변경 및 이해하기 어려운 부분이 얼마나 있는지 ( 유지보수성 )
3. Rules Tab : SonarQube 가 코드 분석에 사용하는 규칙들을 볼 수 있으며, 사용자는 이 규칙들을 기반으로 새로운 품질 프로필을 생성하거나 기존 프로필을 수정할 수 있다.
4. Quality Profiles Tab : 코드 품질을 평가할 때 적용되는 규칙의 집합을 관리(Activate or Deactivate)할 수 있다.
그러나 내장된 품질 프로파일(Built-in Quality Profiles) 은 기본적으로 제공되는 설정을 가진 Profiles 이기 때문에 규칙을 변경할 수 없다. 수정된 규칙을 적용하고 싶은 경우에는 사용자 정의 Profile 을 만들어야 한다.
5. Quality Gates Tab : 프로젝트가 출시 전에 만족해야하는 품질 기준을 설정할 수 있다. ( ex> 버그 x개 이하, 코드 커버리지 x% 이상 등 )
설정 가능한 기준은 다음과 같다.
Condition:
- Issues : 새로운 코드에서 발견된 이슈의 수
- Security Hotspots Reviewd : 새로운 보안 핫스팟 검토율
- Coverage : 새 코드에 대한 테스트 커버리지 ( 높을수록 더 많은 코드가 검증되었음을 의미 )
- Duplicated Lines (%) : 중복된 코드 라인의 비율 ( 가능한 낮게 유지하는 것이 바람직 )
6. Administration Tab : 사용자 계정, 보안, 플러그인, 시스템 설정 등 SonarQube 인스턴스 설정을 관리할 수 있다.
7. More Tab : 추가 옵션과 설정들에 접근할 수 있으며 다양한 플러그인이나 확장 기능에 대한 접근이 포함된다.
정리
SonarQube 를 통해 우리는 모르고 지나갈 수 있는 버그나 Bad Code 를 찾을 수 있게 되어 코드 품질을 높일 수 있게된다.이후에 자동화된 코드 리뷰를 위하여 Jenkins 와 연동하는 방법을 정리해봐야겠다.
참고
'Tools' 카테고리의 다른 글
[Artillery] 성능 테스트 with spring boot (0) | 2024.03.31 |
---|---|
[Git] merge 와 rebase (0) | 2023.11.12 |