해당 글에서는 코드분석도구 중 정적분석 도구인 SonarQube에 대해 이해를 돕기 위해 작성한 글입니다.
1) SonarQube
💡 SonarQube
- 소스 코드의 품질을 분석하고 관리하기 위한 오픈 소스 플랫폼입니다.
- 소스 코드 정적 분석을 수행하여 코드의 버그, 취약점, 코드 스멜(품질이 낮은 코드)을 탐지하고 보고서를 제공합니다. 이를 통해 개발자들은 코드 품질을 향상하고 유지 보수성을 향상할 수 있습니다. - SonarQube에는 무료로 제공하는 커뮤니티 버전(Community)과 상업용 버전(Enterprice)등이 있습니다.
[ 더 알아보기 ] 💡 정적 분석 도구(Static code analysis tools)
- '컴파일 단계'에서 수행하며 소프트웨어 코드의 정적 특성을 분석하여 버그, 보안 취약점, 성능 문제 등을 발견하는 도구입니다. - 소스 코드를 분석하고, 코드의 구조, 흐름, 변수 사용 등을 검사하여 잠재적인 문제를 식별합니다. 이를 통해 소프트웨어를 개선하고 안전성, 신뢰성, 효율성을 향상할 수 있습니다. 💡 동적 분석 도구 (Dynamic code analysis tools)
- '런타임 단계'에서 수행하며 메모리 사용, CPU 사용, 네트워크 트래픽 등 다양한 측면을 모니터링하고 분석합니다. - 이를 통해 애플리케이션의 성능 문제, 메모리 누수, 보안 취약점 등을 탐지하고 해결할 수 있는 지표를 제공합니다.
1. SonarQube 버전 종류
💡 SonarQube 버전 종류
- SonarQube에서 지원하는 버전에 대해서 확인해 봅니다.
분석
버전
설명
SonarQube (Self-Managed)
Community Edition
설치가 간단하며 무료로 제공되는 오픈 소스 버전입니다. 기본적인 코드 품질 및 보안 분석 기능을 제공합니다.
SonarQube (Self-Managed)
Developer Edition
단일 사용자 또는 개발 팀이 자체적으로 관리하고 운영할 수 있습니다. 코드 품질 및 보안 분석을 제공하여 개발 프로세스를 향상시킵니다.
SonarQube (Self-Managed)
Enterprise Edition
대규모 조직이나 기업에서 사용하기에 적합합니다. 확장성과 고가용성을 갖춘 기능을 제공하여 여러 팀 및 프로젝트에 대한 코드 품질 및 보안 관리를 지원합니다.
SonarQube (Self-Managed)
Data Center
매우 큰 조직이나 기업에서 사용하기에 적합합니다. 분산 아키텍처를 통해 고가용성과 확장성을 제공하여 대규모 프로젝트 및 다수의 동시 사용자를 지원합니다.
SonarCloud (As a Service)
Private Project
클라우드 기반으로 제공되며 개인적인 프로젝트에서 사용할 수 있습니다. 코드 품질 및 보안 분석을 제공하여 개발자들이 프로젝트의 품질을 향상시킬 수 있도록 도와줍니다.
2) SonarQube 주요 특징
💡 SonarQube 주요 특징
- SonarQube를 사용하였을 때 이점이 되는 주요한 특징에 대해서 우선적으로 알아봅니다.
1. 정적 코드 분석 지원
💡 정적 코드 분석 지원
- 정적 코드 분석을 통해 코드의 품질과 보안을 평가합니다. - 버그, 보안 취약점, 코드 커버리지, 중복 코드 등을 식별할 수 있습니다. - 이러한 분석을 통해 ‘클린코드’를 지향합니다.
💡 아래와 같이 SonarQube를 실행하여 정적코드를 분석하면 아래와 같은 대시보드를 제공해 줍니다. 각각의 항목에 대해서는 뒤에서 확인하실 수 있습니다.
[ 더 알아보기 ] 💡 클린 코드(Clean Code)
- 읽기 쉽고 이해하기 쉬우며 유지 보수가 용이한 코드를 말합니다.
2. 다양한 언어 지원
💡 다양한 언어 지원
- 다양한 프로그래밍 언어를 지원합니다. Java, C#, JavaScript, Python, Ruby 등 다양한 언어에서 코드 품질을 평가할 수 있습니다. - Commuity 버전(무료)과 EnterPrice 버전(유료)에서 지원하는 언어들이 각각 다르기에 확인이 필요합니다.
💡 대시보드 및 보고서 지원 - 사용자에게 직관적인 대시보드와 상세한 보고서를 제공하여 코드 품질의 개선 여부를 확인할 수 있습니다.
💡 아래와 같이 SonarQube를 수행함에 따라 개선된 정도를 대시보드나 보고서에서 확인이 가능합니다.
4. 지속적인 통합 (CI Integration) 지원
💡 지속적인 통합 (CI Integration) 지원 - SonarQube의 경우는 지속적인 통합 프로세스에 통합이 될 수 있습니다. - CI/CD 도구(Github Actions, GitLab CI/CD, Bitburket Pipelines, Jenkins, Azure Pipelines)와 연동하여 코드 변경 사항을 자동으로 분석하고 피드백을 제공합니다.
- 소프트웨어의 품질을 평가하고 관리하기 위한 기준을 설정하는 데 사용됩니다. 코드가 릴리즈 될 수 있는지에 대해 진행/불가를 제공하는 기준이 되는 ‘코드 품질 지표’를 의미합니다. - 여러 가지 기준으로 구성됩니다. 일반적으로 코드 커버리지, 코드 복잡성, 버그 및 취약점의 수, 코드 스타일 등이 포함됩니다. 이러한 기준은 프로젝트의 요구 사항과 표준을 충족시키기 위해 조정될 수 있습니다.
- 소스 코드 품질을 분석하고 정적 분석 보고서를 생성하는 도구입니다. - 코드 중복, 코딩 규칙 준수, 성능 문제, 보안 취약점 등을 식별하여 개발자에게 코드 품질을 개선하는 데 도움을 줍니다. - 다양한 프로그래밍 언어와 통합되어 사용할 수 있으며, 자동화된 정적 분석을 수행하여 코드 품질을 지속적으로 모니터링할 수 있습니다.
- SonarScanner를 이용하기 위해서는 SonarQube 또는 SonarCloud와 같은 SonarSource의 정적 분석 플랫폼이 필요합니다. - 소스 코드를 검색하고 분석한 후, 결과를 SonarQube 또는 SonarCloud로 전송하여 분석 보고서를 생성합니다.
💡 사전에 Docker로 구성된 SonarQube로 프로젝트를 SonarScanner로 실행합니다.
3. 규칙(Rules)
💡 규칙(Rules)
- SonarQube는 코드 품질 문제(코드 스멜, 버그, 취약점, 보안 취약점 등)를 확인하는 다양한 미리 정의된 규칙을 갖고 있습니다. - 이러한 규칙은 수정 가능하여 팀이 특정 요구에 맞게 맞춤 설정할 수 있습니다. - 예를 들어 A라는 코드 버그라고 출력이 되고 있지만 우리 팀에서는 A라는 버그는 허용하기로 했다면, 해당 Rule에서 수정이 가능합니다.
💡 아래의 Rules 탭에서 규칙들에 대해서 확인이 가능하며 팀 별로 이를 수정이 가능합니다.
[ 더 알아보기 ] 💡 이러한 규칙은 어떠한 기준으로 수행이 되는가? - 아래의 공식사이트를 확인하시면 각각의 기준이 되는 정보를 알 수 있습니다.
[ 더 알아보기 ] 💡 보안 취약점(Vulnerabilities)과 보안 핫스팟(Security Hotspots)의 차이는 무엇일까?
- 보안 취약점(Vulnerabilities)은 공격자가 이용할 수 있는 잠재적인 취약점이나 안전하지 않은 데이터 처리 등을 의미합니다. - 보안 핫스팟(Security Hotspots)은 추가적인 관심과 보안 검토가 필요한 코드 영역을 나타냅니다. 이는 취약점이나 보안 위험이 존재할 수 있는 부분을 가리킵니다.
- 결론적으로 보안 취약점은 실제로 발견된 취약점을 강조하고, 보안 핫스팟은 더 깊은 보안 검토가 필요한 영역을 나타냅니다.
💡 이슈(Issue) - SonarQube에서 발견된 코드의 문제 또는 개선 사항을 나타냅니다.
- 이슈는 다양한 유형이 있을 수 있으며, 예를 들어 코드 중복, 코딩 규칙 위반, 보안 취약점 등이 있습니다. - SonarQube에서 이슈를 식별하고 표시하여 개발자들이 코드의 문제를 파악하고 수정할 수 있도록 도와줍니다.
💡 아래와 같이 이슈 탭에서 발견된 코드의 문제 또는 개선사항을 나타냅니다.
💡 상세하게 어떠한 문제가 발생하였는지 구체적으로 소스코드 내에 발생한 이슈를 알려줍니다.
💡 일부 이슈에서는 ‘How can I fix it?’을 통해서 어떻게 수정을 해야 할지에 대한 가이드를 제공해주기도 합니다.
4) SonarQube PR(Pull Request) 수행 프로세스
💡 SonarQube PR(Pull Request) 수행 프로세스
- 개발자가 소스코드를 작성하고 ‘메인 브랜치’에 PR(Pull Request) 하는 과정에서 SonarQube를 통합하여 코드 리뷰 및 품질 검사를 자동화할 수 있습니다.
- PR(Pull Request)을 생성하고 리뷰어들이 코드 변경 사항을 확인하는 단계에서 SonarQube를 사용하면, 자동으로 코드 스타일, 보안 취약점, 버그, 코드 복잡도 등을 분석하여 피드백을 제공합니다. 이를 통해 개발자는 코드 품질을 높이고 잠재적인 문제를 사전에 발견할 수 있습니다.
💡 Sonarlint : Code - Visual Studio, VS Code, Eclipse, IntelliJ와 같은 IDE Tool 내에서 Plug-in을 통해 SonarLint를 설치합니다. - 해당 과정에서 개발자가 컴파일 단계에서 소스 코드 품질 이슈를 감지하고 사전에 수정할 수 있도록 도와줍니다.
2. Sonarlint : Commit → Push
💡 Sonarlint : Commit → Push
- SonarLint를 통한 사전 코드 품질 분석이 완료되면 개인 브랜치로 Commit과 Push 작업으로 원격 저장소에 해당 소스코드가 올립니다.
3. SonarQube & SonarCloud : Build & Test
💡 SonarQube & SonarCloud : Build & Test - 개발자는 개인 브랜치의 소스코드를 메인 브랜치에 PR(Pull Request) 과정을 통해 CI/CD가 수행이 됩니다. - 이를 통해 CI/CD 과정을 통해 소스코드 수행을 위한 사전 환경인 ‘빌드’ 과정이 수행되고 ‘테스트’ 과정에서 정적 분석도구인 ‘SonarQube & SonarCloud’를 통해 테스트를 수행합니다.
4. SonarQube & SonarCloud : Quality Gate
💡SonarQube & SonarCloud : Quality Gate
- SonarQube & SonarCloud에서 제공하는 Quality Gate에서 정한 ‘기준’을 통해 품질을 평가하고 관리하게 됩니다.
5.1. SonarQube & SonarCloud : Quality Gate Fail
💡 SonarQube & SonarCloud : Quality Gate Fail
- Quality Gate에서 정한 ‘기준’을 통과하지 못한 경우 다음 단계로 넘어가지 못하고 CI/CD 과정 중 빌드를 실패 처리합니다.