반응형
해당 글에서는 코드분석도구 중 정적분석 도구인 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에서 제공하는 언어 목록들을 확인하실 수 있습니다.
3. 대시보드 및 보고서 지원
💡 대시보드 및 보고서 지원
- 사용자에게 직관적인 대시보드와 상세한 보고서를 제공하여 코드 품질의 개선 여부를 확인할 수 있습니다.
💡 아래와 같이 SonarQube를 수행함에 따라 개선된 정도를 대시보드나 보고서에서 확인이 가능합니다.
4. 지속적인 통합 (CI Integration) 지원
💡 지속적인 통합 (CI Integration) 지원
- SonarQube의 경우는 지속적인 통합 프로세스에 통합이 될 수 있습니다.
- CI/CD 도구(Github Actions, GitLab CI/CD, Bitburket Pipelines, Jenkins, Azure Pipelines)와 연동하여 코드 변경 사항을 자동으로 분석하고 피드백을 제공합니다.
💡 [참고] SonarQube에서 지원해 주는 CI 목록들입니다.
5. 확장성과 커스터마이징
💡 확장성과 커스터마이징
- 플러그인 시스템을 제공하여 다양한 기능을 추가하고 사용자의 요구에 맞게 규칙(Rules)을 정하여 커스터마이징 할 수 있습니다.
💡 IntelliJ에서 SonarQube를 사용하기 위한 Plugin 설치 방법
💡 [참고] IntelliJ에서 SonarQube/SonarLint를 설치하는 방법에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
3) SonarQube 구성요소
1. 품질 게이트(Quality Gate)
💡 품질 게이트(Quality Gate)
- 소프트웨어의 품질을 평가하고 관리하기 위한 기준을 설정하는 데 사용됩니다. 코드가 릴리즈 될 수 있는지에 대해 진행/불가를 제공하는 기준이 되는 ‘코드 품질 지표’를 의미합니다.
- 여러 가지 기준으로 구성됩니다. 일반적으로 코드 커버리지, 코드 복잡성, 버그 및 취약점의 수, 코드 스타일 등이 포함됩니다. 이러한 기준은 프로젝트의 요구 사항과 표준을 충족시키기 위해 조정될 수 있습니다.
💡 해당 이미지에서 Quality Gate를 통해 성공과 실패를 거칩니다.
2. SonarScanner
💡 SonarScanner
- 소스 코드 품질을 분석하고 정적 분석 보고서를 생성하는 도구입니다.
- 코드 중복, 코딩 규칙 준수, 성능 문제, 보안 취약점 등을 식별하여 개발자에게 코드 품질을 개선하는 데 도움을 줍니다.
- 다양한 프로그래밍 언어와 통합되어 사용할 수 있으며, 자동화된 정적 분석을 수행하여 코드 품질을 지속적으로 모니터링할 수 있습니다.
- SonarScanner를 이용하기 위해서는 SonarQube 또는 SonarCloud와 같은 SonarSource의 정적 분석 플랫폼이 필요합니다.
- 소스 코드를 검색하고 분석한 후, 결과를 SonarQube 또는 SonarCloud로 전송하여 분석 보고서를 생성합니다.
💡 사전에 Docker로 구성된 SonarQube로 프로젝트를 SonarScanner로 실행합니다.
3. 규칙(Rules)
💡 규칙(Rules)
- SonarQube는 코드 품질 문제(코드 스멜, 버그, 취약점, 보안 취약점 등)를 확인하는 다양한 미리 정의된 규칙을 갖고 있습니다.
- 이러한 규칙은 수정 가능하여 팀이 특정 요구에 맞게 맞춤 설정할 수 있습니다.
- 예를 들어 A라는 코드 버그라고 출력이 되고 있지만 우리 팀에서는 A라는 버그는 허용하기로 했다면, 해당 Rule에서 수정이 가능합니다.
💡 아래의 Rules 탭에서 규칙들에 대해서 확인이 가능하며 팀 별로 이를 수정이 가능합니다.
[ 더 알아보기 ]
💡 이러한 규칙은 어떠한 기준으로 수행이 되는가?
- 아래의 공식사이트를 확인하시면 각각의 기준이 되는 정보를 알 수 있습니다.
4. 코드 규칙 유형
💡 코드 규칙 유형
- SonarQube를 수행하여 리포트를 얻을 경우 아래와 같은 ‘코드 규칙 유형’에 대해 출력이 됩니다. 이에 대해 각각에 대해 어떤 문제인지 확인해보아야 합니다.
규칙 유형 | 설명 |
Reliability : Bug | 코드 안정성과 관련된 버그입니다. 예기치 않은 동작이나 충돌을 일으킬 수 있는 버그를 의미합니다. |
Maintainability : Code Smells | 유지보수에 어려움을 줄 수 있는 ‘낮은 코드 품질’의 지표입니다. 복잡하거나 중복된 코드, 긴 메소드, 일관성 없는 네이밍 규칙 등이 포함될 수 있습니다. |
Security : Vulnerabilities | 코드에서 발견된 최근 취약점을 강조합니다. 공격자가 이용할 수 있는 잠재적인 취약점이나 안전하지 않은 데이터 처리 등을 의미합니다. |
Security Review: Security Hotspots | 보안 핫스팟은 추가적인 관심과 보안 검토가 필요한 코드 영역을 나타냅니다. 취약점이나 보안 위험이 존재할 수 있는 부분입니다. |
Coverage | 커버리지는 자동화된 테스트가 실행한 코드의 비율을 의미합니다. 테스트 중 실행된 코드의 백분율을 측정합니다. |
Duplications | 중복 코드는 코드베이스 내에서 중복된 코드 블록을 나타냅니다. 중복을 식별하고 줄이는 것은 코드의 유지보수성을 향상시키고 잠재적인 문제를 줄일 수 있습니다. |
[ 더 알아보기 ]
💡 보안 취약점(Vulnerabilities)과 보안 핫스팟(Security Hotspots)의 차이는 무엇일까?
- 보안 취약점(Vulnerabilities)은 공격자가 이용할 수 있는 잠재적인 취약점이나 안전하지 않은 데이터 처리 등을 의미합니다.
- 보안 핫스팟(Security Hotspots)은 추가적인 관심과 보안 검토가 필요한 코드 영역을 나타냅니다. 이는 취약점이나 보안 위험이 존재할 수 있는 부분을 가리킵니다.
- 결론적으로 보안 취약점은 실제로 발견된 취약점을 강조하고, 보안 핫스팟은 더 깊은 보안 검토가 필요한 영역을 나타냅니다.
5. 이슈(Issue)
💡 이슈(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를 사용하면, 자동으로 코드 스타일, 보안 취약점, 버그, 코드 복잡도 등을 분석하여 피드백을 제공합니다. 이를 통해 개발자는 코드 품질을 높이고 잠재적인 문제를 사전에 발견할 수 있습니다.
1. Sonarlint : Code
💡 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 과정 중 빌드를 실패 처리합니다.
5.2. SonarQube & SonarCloud : Quality Gate Success
💡 SonarQube & SonarCloud : Quality Gate Success
- Quality Gate에서 정한 ‘기준’을 통과하면 개인작업 브랜치가 메인 브랜치에 합쳐지는 Merge & Promote 과정을 수행합니다.
6. SonarQube & SonarCloud: Production Ready
💡 SonarQube & SonarCloud: Production Ready
- 메인 브랜치로 합쳐지면 제품 출시 준비가 완료됩니다.
7. SonarQube & SonarCloud: New Business Requests
💡 SonarQube & SonarCloud: New Business Requests
- 개발자는 이제 다른 작업을 수행합니다.
[ 더 알아보기 ]
💡 Promote
- Git에서 한 브랜치에서 다른 브랜치로 변경사항을 이동시키는 동작을 의미합니다. 주로 기능 브랜치에서 메인 브랜치로 변경사항을 병합할 때 사용됩니다.
💡 SonarLint을 플러그인으로 설치하고 싶은데 어디를 참고해야 할까?
- 공식사이트 https://docs.sonarsource.com/sonarqube/latest/user-guide/sonarlint-connected-mode/ 링크를 참조하시면 됩니다.
오늘도 감사합니다. 😀
반응형
'공통 > OpenSource' 카테고리의 다른 글
[OpenSource] Vault 이해하기 -1 : 이론, 구성요소, 처리과정 (0) | 2024.04.15 |
---|