[SonaQube] What is SonaQube ?
SonaQube 란?
SonarQube는 Java기반의 정적분석 도구로, 다양한 항목들에 대해서 분석하여 사용자에게 결과를 제공함.
- 여러 분석툴을 통합하여 여러 항목들을 한 번에 검사 가능
- 웹페이지에서 분석결과들을 손쉽게 확인 가능
- 플러그인을 이용하여 다양한 기능 제공
SonarQube Architecture
SonarQube 플랫폼은 4개의 컴포넌트로 구성
- SonarQube Server
- Web Server : 사용자들에게 분석 결과를 보여주고, SonarQube 설정 페이지를 제공함.
- Search Server : Elasticsearch Server를 사용하며, 사용자에게 검색기능을 제공함.
- Compute Engine Server : 정적 분석 결과를 생성하고 이를 SonarQube Database를 통해 저장
SonarQube DataBase SonarQube의 기본설정들(보안, Plugin 정보 등)과 프로젝트 분석 스냅샷들을 저장. 설치시, Default로 H2 DB 포함, 설정을 통해 다양한 DB 사용 가능
SonarQube Plugin 내부에서 사용하는 다양한 기능 (분석 프로그램 언어, 권한, 관리, SCM 등)을 플러그인 형태로 설치 가능
SonarQube Scanner 프로젝트 정적 분석을 수행하는 툴로 다양한 형식으로 제공되며 CI Server와 연계하여 사용이 가능
SonarQube Log 정보
sonar.log 기본 프로세스에 대한 로그입니다. 시작 및 종료에 대한 일반 정보를 보유합니다. 여기에는 전반적인 상태가 표시되지만 세부 정보는 표시되지 않습니다. 다른 로그를 살펴보십시오.
web.log 데이터베이스에 대한 초기 연결, 데이터베이스 마이그레이션 및 재 인덱싱 및 HTTP 요청 처리에 대한 정보 여기에는 해당 요청과 관련된 데이터베이스 및 검색 엔진 로그가 포함됩니다.
ce.log 백그라운드 작업 처리 및 해당 작업과 관련된 데이터베이스 및 검색 엔진 로그에 대한 정보
es.log Elasticsearch 시작, 상태 변경, 클러스터, 노드 및 인덱스 수준 작업 등과 같은 검색 엔진의 운영 정보
SonarQube Integration
IDE에서 코드를 작성하고, Sonar Lint등을 통해 로컬에서 코드 분석을 실행함.
개발자는 분석을 통해 수정된 완성코드를 SCM으로 Push함.
CI Server에서 트리거된 빌드 수행 시 SonarQube Scanner를 실행함
SonarQube Scanner는 생성한 분석 리포트의 처리를 위해 SonarQube로 전송함.
SonarQube Server는 분석 리포트 결과를 처리하여 DB에 저장하고 결과를 웹서버를 통해 제공함.
개발자는 웹페이지에서 분석결과를 확인하여 코드를 개선함.
관리자는 결과 보고서를 받는다.
SonarQube 분석 내용
소나 큐브는 다음 7가지 품질 요소를 기준으로 소프트웨어 품질을 구분/관리 합니다.
- 코드악취 (Maintainability)
- 버그 (Reliability)
- 취약점 (Vulnerabilities)
- 중복 (Duplications)
- 단위 테스트 (Unit Tests)
- 복잡도 (Complexity)
- 사이즈 (Size)
코드악취 (Maintainability)
심각한 이슈는 아니지만 베스트 프렉티스에서 사소한 이슈들로 모듈성(modularity), 이해가능성(understandability), 변경 가능성 (changeability), 테스트 용의성(testability), 재사용성(reusability) 등이 포함
품질 모델 등급
Maintainability(Code Smell)
- > A : 추가로 발생한 Technical Debt가 프로그램 전체 Debt의 5 % 이하
- > B : 6 ~ 10 %
- > C : 11 ~ 20 %
- > D : 21 ~ 50 %
- > E : 50 % 이상
버그 (Reliability)
일반적으로 잠재적인 버그 혹은 실행시간에 예상되는 동작을 하지 않는 코드를 나타냄.
품질 모델 등급
Reliability(Bug)
- > A : 0개 버그
- > B : 1개 이상의 Minor 버그
- > C : 1개 이상의 Major 버그
- > D : 1개 이상의 Critical 버그
- > E : 1개 이상의 Blocker 버그
취약점 (Vulnerabilities)
해커들에게 잠재적인 약점이 될 수 있는 보안상의 이슈를 말한다. SQL 인젝션, 크로스 사이트 스크립팅과 같은 보안 취약성을 찾아냄.
품질 모델 등급
Vulnerability(Security)
- > A : 0개 취약점
- > B : 1개 이상의 Minor 취약점
- > C : 1개 이상의 Major 취약점
- > D : 1개 이상의 Critical 취약점
- > E : 1개 이상의 Blocker 취약점
중복 (Duplications)
코드 중복은 코드의 품질을 저해시키는 가장 큰 요인 중 하나임.
복잡도 (Complexity)
순환 복잡도(Cyclomatic Complexity) 측정, 코드의 논리적인 흐름상에 존재하는 인지 복잡도(Cognitive Complexity) 측정
사이즈 (Size)
소스코드 사이즈와 관련된 다양한 지표를 제공 ( 코드 라인수 전체 라인수 구문, 함수 클래스 파일 디렉터리 주석 수 코멘트 비율 )
* 복잡도(Complexity), 문서화(Documentation, Comment), 중복(Duplications) 등의 주요 수치는 분석대상에 따라 결과 값이 상이하므로 공식문서 참조
심각도 (Serverity)
SonarQube에서는 프로젝트 분석을 위해서 규칙들의 집합인 Quality Profile을 사용하며, 적용된 규칙이 얼마나 심각하고 중요한지 5가지로 정의하고 있다.
Blocker
프로그램의 동작에 영향을 줄 가능성이 높은 버그로 코드를 즉시 수정 해야함.
ex) 메모리 누출, 닫히지 않은 JDBC 연결 등
Critical
프로그램의 동작에 영향을 줄 가능성이 낮은 버그 또는 보안 결함으로 코드를 즉시 검토 해야함.
ex) 비어있는 catch 블록, SQL Injection 등
Major
개발자 생산성에 영향을 크게 줄 수 있는 품질 결함으로 시간을 두고 검토 해야 한다.
ex) 중괄호로 덮여있지 않은 코드, 중복 코드, 사용되지 않은 매개 변수 등
Minor
개발자의 생산성에 잠재적인 영향을 미칠 수 있는 품질 결함
ex) 너무 긴 코드, 3개 미만의 switch 문 등
Info
버그이거나 품질상의 결함이 아닌 것을 인지를 위한 알림.
#