Infra/CI-CD

[SonarQube] 소나큐브

baek-dev 2025. 3. 9. 12:38

⚡ 1. 소나큐브(SonarQube)란?

소나큐브(SonarQube)정적 코드 분석(Static Code Analysis) 도구로,

소프트웨어의 버그, 코드 스멜(Code Smell), 보안 취약점(Security Vulnerabilities) 을 자동으로 분석하여 코드 품질을 향상시키는 도구입니다.

 

✅ 소나큐브의 핵심 기능

 

🔹 정적 코드 분석 → 코드 실행 없이 문제를 찾아냄

🔹 코드 품질 분석 → 코드 스멜(Code Smell), 복잡도, 중복 코드 감지

🔹 보안 취약점 검사 → OWASP Top 10, SAST(정적 애플리케이션 보안 테스트) 지원

🔹 CI/CD 연동 가능 → Jenkins, GitHub Actions, GitLab CI, Bitbucket과 통합

🔹 다양한 언어 지원 → Java, JavaScript, Python, Kotlin, C, C++ 등 25개 이상의 언어 지원

 

📌 즉, 소나큐브는 코드 품질과 보안 취약점을 자동으로 검사하여 코드의 유지보수성을 향상시키는 도구!

 

⚡ 2. 소나큐브 동작 방식

🏗 소나큐브의 기본 동작 구조

개발자 → 코드 작성 → SonarQube Scanner → 분석 결과 → SonarQube Server 대시보드 → 개선 조치

 

✅ 소나큐브의 주요 구성 요소

구성 요소 역할
SonarQube Server 분석된 코드 품질 결과를 저장하고, 대시보드에서 시각화
SonarQube Scanner 실제 코드 분석을 수행하는 클라이언트
SonarQube Database 분석된 결과를 저장하는 데이터베이스 (PostgreSQL, MySQL 등)
SonarQube Plugins 추가 기능을 제공 (예: SonarLint, GitLab Integration)

 

⚡ 3. 소나큐브 설치 및 실행 방법

✅ 1) Docker를 사용한 소나큐브 실행

docker run -d --name sonarqube \
  -p 9000:9000 \
  -e SONARQUBE_JDBC_URL=jdbc:postgresql://localhost/sonarqube \
  -e SONARQUBE_JDBC_USERNAME=sonar \
  -e SONARQUBE_JDBC_PASSWORD=sonar \
  sonarqube:lts

📌 설명

9000 포트에서 소나큐브 서버 실행

PostgreSQL을 데이터베이스로 사용

 

✅ 실행 후 브라우저에서 http://localhost:9000 접속

✅ 기본 로그인: admin / admin

 

✅ 2) 소나큐브 스캐너(SonarQube Scanner) 실행

 

프로젝트 폴더에서 다음 명령어 실행:

sonar-scanner \
  -Dsonar.projectKey=my_project \
  -Dsonar.sources=src \
  -Dsonar.host.url=http://localhost:9000 \
  -Dsonar.login=admin \
  -Dsonar.password=admin

📌 설명

-Dsonar.projectKey=my_project → 프로젝트 이름 지정

-Dsonar.sources=src → 코드가 있는 폴더 지정

-Dsonar.host.url=http://localhost:9000 → 소나큐브 서버 URL 지정

-Dsonar.login=admin → 로그인 정보 입력

 

✅ 실행이 완료되면 소나큐브 웹 대시보드에서 코드 분석 결과 확인 가능!

 

⚡ 4. 소나큐브 주요 분석 기능

✅ 1) 코드 품질 지표 (Code Quality Metrics)

 

소나큐브는 다음 7가지 주요 품질 지표를 기준으로 코드 분석을 수행합니다.

지표 설명
Bugs (버그) 실행 중 문제를 일으킬 가능성이 있는 코드
Vulnerabilities (취약점) 보안상 위험이 있는 코드 (예: SQL Injection, XSS)
Code Smells (코드 스멜) 유지보수성이 떨어지는 코드 (예: 너무 긴 메서드, 중복 코드)
Coverage (테스트 커버리지) 유닛 테스트로 커버되는 코드 비율
Duplications (중복 코드 비율) 동일한 코드가 여러 곳에서 반복되는 비율
Complexity (복잡도) 메서드나 클래스의 복잡성 (예: if-else 중첩)
Maintainability (유지보수성) 코드 변경이 얼마나 쉬운지 평가

📌 즉, 소나큐브는 단순한 코드 스타일 검사 도구가 아니라, 코드 품질과 보안까지 분석하는 강력한 툴!

 

✅ 2) 코드 스멜(Code Smell) 분석 예제

public void process() {
    if (user.isAdmin()) {
        if (user.isActive()) {
            if (user.hasPermission()) {
                System.out.println("Access granted");
            }
        }
    }
}

📌 소나큐브 분석 결과

문제: 너무 깊은 if 중첩 → 코드 스멜(Code Smell)

개선 방법: 중첩을 줄이고 메서드 분리

수정 코드:

public void process() {
    if (!user.isAdmin() || !user.isActive() || !user.hasPermission()) {
        return;
    }
    System.out.println("Access granted");
}

 

⚡ 5. CI/CD와 소나큐브 통합

소나큐브는 Jenkins, GitHub Actions, GitLab CI/CD와 쉽게 통합할 수 있습니다.

 

✅ 1) Jenkins와 연동

 

Jenkins pipeline을 사용하여 소나큐브 분석 실행:

pipeline {
    agent any
    stages {
        stage('SonarQube Analysis') {
            steps {
                script {
                    def scannerHome = tool 'SonarQubeScanner'
                    withSonarQubeEnv('SonarQube') {
                        sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=my_project -Dsonar.sources=src"
                    }
                }
            }
        }
    }
}

📌 설명

Jenkins에서 자동으로 소나큐브 분석 실행

코드 품질을 CI/CD 파이프라인에서 자동으로 점검 가능

 

GitHub Actions, GitLab CI에서도 비슷하게 설정 가능!

 

⚡ 6. 소나큐브의 장점과 단점

✅ 소나큐브의 장점

 

정적 분석을 통해 코드 품질 향상

버그 및 보안 취약점 사전 감지

CI/CD와 쉽게 통합 가능

25개 이상의 언어 지원 (Java, JavaScript, Python, Kotlin 등)

 

❌ 소나큐브의 단점

 

설치 및 초기 설정이 다소 복잡

분석 속도가 느릴 수 있음 (특히 대규모 프로젝트의 경우)

무료 버전(Community Edition)에서는 일부 기능 제한 (예: Branch 분석 불가)

 

대규모 프로젝트에서는 SonarQube Enterprise Edition을 고려하는 것이 좋음!

 

⚡ 7. 결론

소나큐브(SonarQube)는 정적 코드 분석 도구로, 코드 품질을 자동으로 점검하고 보안 취약점을 분석

Jenkins, GitHub Actions, GitLab CI/CD 등과 통합 가능

코드 스멜(Code Smell), 중복 코드, 보안 문제, 테스트 커버리지를 한눈에 확인 가능

CI/CD 파이프라인에 적용하면 코드 품질 관리 자동화 가능

 

🚀 소나큐브를 활용하면 코드 품질을 유지하면서 안전한 애플리케이션을 개발할 수 있다

 

 

 

 

출처 : ChatGPT