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