목차
1. 정적 분석기란?
2. SonarLint란?
3. SonarQube란?
4. SonarQube의 구조
5. SonarLint 사용하기
6. SonarQube 사용하기
정적 분석기란?
코드를 검사하여 메모리 누수 또는 버퍼 오버플로우 등 일반적으로 알려진 오류 및 취약점을 파악합니다.
또한 정적 분석을 활용하면 코딩 표준 적용이 가능합니다
CI 파이프라인의 첫 단계에서 수행하거나 변경 사항 커밋 전 IDE에서 직접 수행할 수 있습니다.
정적 분석기의 지원 기능
• 코드 규칙 검사
• 코드 스타일 검사
• 중복 코드 검사
• 버그 검사
• 보안 취약점 검사
정적 분석기 추천
SonarLint
• 인텔리J 플러그인
• IDE 에서 정적 분석 제공
SonarLint란?
SonarLint는 인텔리제이 플러그인으로 IDE에서 정적 분석을 제공합니다.
SonarQube란?
SonarQube는 클린 코드를 제공하도록 체계적으로 도와주는 자체 관리형 자동 코드 검토 도구입니다.
SonarQube는 기존 워크플로에 통합되고 코드의 문제를 감지하여 프로젝트의 지속적인 코드 검사를 수행할 수 있도록 지원합니다.
이 도구는 30개 이상의 다양한 프로그래밍 언어를 분석하고 CI 파이프라인 및 DevOps 플랫폼에 통합하여 코드가 고품질 표준을 충족하는지 확인합니다.
IDE에선 SonarLint로 Push전 코드 품질을 검사하고 젠킨스나 Github Action의 CI 파이프라인에 소나큐브를 연동해 품질 결과를 꾸준히 체크할 수 있습니다.
소나큐브 라이선스는 다음과 같습니다.
무료 버전인 커뮤니티 버전을 연동해 볼 예정입니다.
SonarQube 구조
소나큐브 공식문서에 따르면 소나큐브는 크게 스캐너, 서버, DB로 구성되어 있습니다.
각각의 구성요소는 다음과 같은 역할을 가지고 있습니다.
SonarQube 서버: SonarQube 사용자 인터페이스를 제공하는 웹 서버입니다. Elasticsearch 기반의 검색 서버입니다. 코드 분석 보고서를 처리하고 SonarQube 데이터베이스에 저장하는 컴퓨팅 엔진입니다.
데이터베이스 : 코드 스캔 중에 생성된 코드 품질 및 보안에 대한 메트릭 및 문제를 저장합니다.
하나 이상의 스캐너 : SonarQube 인스턴스 구성. 프로젝트를 분석하기 위해 빌드 또는 지속적 통합 서버에서 실행되는
스캐너는 이미 사용 중이던 CI/CD 호스트이고, 소나큐브 서버와 DB를 구성하면 됩니다.
SonarLint 사용하기
인텔리제이 플러그인이므로 설치하고 사용하면 됩니다.
일부러 사용하지 않은 import문과 중복 코드를 만들었습니다.
SonarLint를 클릭해 분석을 진행할 수 있습니다.
중복 코드, 사용하지 않는 import문 둘 다 코드스멜이라 인식합니다.
중복 코드에 대해서는 Major 레벨의 이슈, 사용하지 않는 import문에 대해선 Minor 한 이슈라고 설명해 줍니다.
SonarQube 사용하기
1. docker를 통해 sonarqube를 설치합니다.
docker run -d -p 9000:9000 mwizner/sonarqube:8.9.5-community
2. localhost:9000에 접속하고 초기 계정인 admin/admin으로 로그인합니다.
3. 프로젝트 추가
sonarqube 초기 화면이고 프로젝트를 추가합니다.
토큰은 소나큐브에 정적 분석을 요청 시 사용하는 인증 토큰 만들기 위한 토큰을 입력합니다.
토큰 생성이 완료되면 sonarqube 연동하는 방법이 나옵니다.
4. sonarqube 연동
build.gradle 파일에 플러그인을 추가한 이후 gradlew 명령을 실행시킵니다.
코드 분석 결고를 확인할 수 있습니다.
버그, 보안 취약점, 기술 부채, 테스트 커버리지, 중복 코드, 코드 스멜 등 정보를 확인할 수 있습니다.
코드 스멜이 있는 파일을 확인해 보겠습니다.
어떤 부분에 이슈가 있는지 설명해 줍니다.
여기까지 정적 분석기로 자주 사용하는 sonarlint, sonarqube에 대해서 알아봤습니다.
'스프링 > 외부 서비스' 카테고리의 다른 글
Spring으로 ABTest 진행하기 (1/2) - ABTest란 무엇인가? (0) | 2023.05.30 |
---|---|
Spring으로 ABTest 진행하기 (2/2) - Hackle 사용하기 (0) | 2023.05.30 |
Spring으로 Slack 알림 보내기 (0) | 2023.05.30 |