이 문서는 SonarQube에서 제공하는 AI 기능에 대한 소개 및 설정에 대한 문서입니다.



SonarQube AI 기능 개요

AI 기능은 상용 버전(Developer, Enterprise, Data Center Edition)에서 사용 가능합니다.


SonarQube는 AI를 활용하여 코드 품질을 개선하는 다양한 기능을 제공합니다.

  • AI-기반 코드 수정 제안(AI CodeFix): AI가 코드 스멜(Code Smells), 버그(Bugs), 보안 취약점(Vulnerabilities)에 대한 자동 수정안을 제안
  • AI가 생성한 코드 자동 감지(Autodetect AI-generated Code): GitHub Copilot과 같은 AI 기반 코드 생성 도구를 사용하여 생성된 코드를 자동 감지
  • AI 코드 품질 보증(AI Code Assurance): AI 코드에 대한 품질 게이트(Quality Gate)를 적용하여 품질 검증


AI-기반 코드 수정 제안(AI CodeFix)

AI CodeFix 기능은 모든 상용 버전에서 사용 가능하며  Early Access 기간 동안 무료로 체험 가능합니다.

OpenAI GPT-4를 활용하여 SonarQube에서 분석된 코드 이슈에 대해 AI가 코드 수정 제안을 제공하는 기능입니다.

코드 스멜(Code Smells), 버그(Bugs), 보안 취약점(Vulnerabilities)에 대한 해결책을 제공합니다.

지원 언어

  • Java
  • JavaScript
  • TypeScript
  • Python
  • C#
  • C++

AI CodeFix 활성화 방법

  1. SonarQube UI에 관리자로 로그인합니다.
  2. Administraion > Configuration > AI CodeFix 메뉴로 이동합니다.
  3.  "Enable AI CodeFix"를 체크한 후, 프로젝트 범위를 선택합니다.
    • All projects : 현재 생성된 모든 프로젝트 및 새로 생성되는 프로젝트에 AI CodeFix 활성화
    • Only selected projects : 특정 프로젝트에서만 AI CodeFix 활성화 (새로 생성되는 프로젝트는 자동으로 활성화되지 않습니다.)
  4. Save를 클릭하여 설정을 저장합니다.

SonarQube Server에서 AI CodeFix 기능을 사용하려면 인터넷 연결이 필요합니다.

이 기능은 api.sonarqube.io를 통해 제공되며 다음 고정 IP 주소를 허용해야 합니다.

  • 99.83.135.55(CIDR: 99.83.135.55/32)
  • 15.197.164.24(CIDR: 15.197.164.24/32)

AI CodeFix  비활성화 방법

SonarQube Server에서 AI CodeFix 기능을 완전히 비활성화하고 관리자를 포함한 모든 사용자에게서 숨기려면 다음 방법을 사용할 수 있습니다.

  1. SonarQube 설정 파일에서 비활성화
    • sonar.properties 파일에서 다음 설정을 추가합니다.
      sonar.ai.codefix.hidden=true
  2. 다음 중 하나의 방법으로 SonarSource에 직접 요청
    • 메일로 “Disabling AI CodeFix”라는 제목과 함께 contact@sonarsource.com로 요청
    • Sonar 지원팀을 통해 요청 

AI-기반 코드 수정 제안 생성 방법

AI-기반 코드 수정 제안을 생성하려면 다음 방법을 사용할 수 있습니다.

  1. 프로젝트에서 이슈 검색 후 세부 정보 페이지로 이동합니다.
  2. Where is the issue? 혹은 AI CodeFix 탭에서 Generate AI Fix를 클릭합니다.
    • Where is the issue?탭
    • AI CodeFix 탭
  3. AI CodeFix가 생성되고 AI CodeFix탭에서 diff 뷰가 표시됩니다.
  4. IDE에 SonarQube 연결모드 가 설정된 경우 View fix in IDE를 선택하여 IDE에서 diff 뷰를 확인할 수 있습니다.

    - IDE에서 표시되는 diff 뷰 예시(Visual Studio Code)



AI 생성 코드 자동 감지(Autodetect AI-generated code)

GitHub Copilot을 사용하여 생성된 GitHub의 프로젝트의 코드를 자동 감지하는 기능입니다.

요구사항

  • SonarQube Server에서 AI 생성 코드 자동 감지 기능은 기본적으로 활성화되어 있습니다. 
    글로벌 및 프로젝트 수준에서 기능을 관리하는 방법은 아래 설정 방법을 참고하세요.
  • 프로젝트 관리자는 GitHub 앱에서 액세스를 활성화해야 합니다.
    자동 감지 기능은 SonarQube Server에 GitHub Copilot Business에 대한 액세스를 제공하지 않으면 작동하지 않습니다.

설정 방법

1. SonarQube에서 AI 자동 감지 관리

  1. Administration > Configuration > General Settings > AI-Generated Code로 이동합니다.
  2. Autodetect AI-Generated Code를 선택하거나 해제합니다.


2. GitHub 통합 

AI 코드 자동 감지 기능은 GitHub 앱을 통해 SonarQube Server가 GitHub Copilot의 Organization 사용 통계를 접근할 수 있도록 하는 방식으로 동작합니다.

1. SonarQube를 Github 앱으로 등록합니다.

1. GitHub 오른쪽 상단의 프로필 사진 클릭 후 계정 설정으로 이동합니다.

  • 개인: Settings 클릭
  • 조직 : Your organizations - Settings 클릭

2. 왼쪽 사이드바에서 <> Developer settings을 클릭합니다.

3. 왼쪽 사이드바에서 GitHub Apps 클릭 후, New GitHub App을 클릭하여 다음과 같은 설정을 추가합니다.

  • GitHub App Name: 앱의 이름을 설정합니다. (예: sonarqubeserver)
  • Homepage URL: SonarQube 서버의 기본 URL 입력 (정보 제공 목적)
  • Callback URL: SonarQube 서버의 기본 URL 입력(GitHub에서 SonarQube로 리디렉션할 때 사용)
  • Webhook URL: 보안 강화를 위해 기본적으로 Webhook 사용이 비활성화되므로 코드 스캐닝 알람을 활성화하고 싶은게 아니라면 비활성화하는 걸 권장합니다.
    Active 체크박스 선택해제하고 Webhook URL과 Secret 필드를 공백으로 하여 비활성화 할 수 있습니다.
  • 권한 및 이벤트는 다음과 같이 설정합니다.

    Repository permissions

    PermissionAccessNote
    ChecksRead & Write
    AdministrationRead-onlyRequired only for user provisioning.

    GitHub Enterprise: Repository metadata

    GitHub.com: Metadata

    Read-only
    Pull RequestsRead & Write
    Private repositories: ContentRead-only
    Code scanning alertsRead & WriteRequired only if you want to report security alerts raised in SonarQube Server to GitHub. When you update this permission, GitHub sends an email to the GitHub organization's administrator, asking them to validate the changes on the installation of the GitHub App.


    Organization permissions

    PermissionAccessNote
    AdministrationRead-onlyRequired only for user provisioning.
    GitHub Copilot BusinessRead-onlyRequired only to use SonarQube Server's Autodetect AI-Generated Code feature.
    MembersRead-only
    ProjectsRead-only


    Account permissions

    PermissionAccessNote
     Email addressesRead-onlyRequired only for user authentication and provisioning.
  • Where can this GitHub App be installed?: Any Account를 선택하여 App을 공개(Public)함으로써, 이후 설정에서 어느 조직에나 앱을 설치할 수 있게됩니다.

4. Create GitHub App을 클릭하여 App을 생성합니다.

2. 조직에 SonarQube Server용 GitHub앱을 설치합니다.

1. GitHub 오른쪽 상단의 프로필 사진 클릭 후 계정 설정으로 이동합니다.

  • 개인: Settings 클릭
  • 조직 : Your organizations - Settings 클릭

2. 왼쪽 사이드바에서 <> Developer settings을 클릭합니다.

3. 왼쪽 사이드바에서 GitHub Apps 클릭 후, 설치하려는 앱을 클릭합니다.

4. 왼쪽 사이드바에서 Install App을 클릭합니다.

5. 설치하려는 위치에 옆에 있는 Install을 클릭합니다.

6. 앱에 리포지토리 권한이 필요한 경우 다음을 선택합니다.

  • All repositories : 모든 리포지토리
  • Only select repositories: 선택한 리포지토리만

7.Install을 클릭합니다.

3. SonarQube Server의 글로벌 설정에 GitHub 앱을 추가합니다.

1. SonarQube에서 dministration > DevOps Platform Integrations > GitHub로 이동합니다.

2. Create configuration을 클릭합니다.


3. 다음과 같이 구성 정보를 추가합니다.

필드설명
Configuration name

GitHub 구성을 식별할 수 있는 이름을 입력합니다


GitHub API URL

GitHub API의 URL을 입력합니다.
예: GitHub Enterprise – https://github.company.com/api/v3

GitHub App IDGitHub에서 생성한 GitHub App의 App ID를 입력합니다.
(GitHub의 Settings > Developer Settings > GitHub Apps에서 확인 가능)
Client IDGitHub App 페이지에서 확인할 수 있는 클라이언트 ID(Client ID) 를 입력합니다.
(GitHub의 Settings > Developer Settings > GitHub Apps에서 확인 가능)
Client SecretGitHub App 페이지에서 확인할 수 있는 클라이언트 시크릿(Client Secret) 을 입력합니다.
관리자가 암호화 가능 (Encrypting sensitive settings 참고)
Private KeyGitHub App의 프라이빗 키(Private Key) 를 PEM 형식으로 입력합니다.
GitHub App 페이지의 Private keys 섹션에서 .pem 파일을 생성한 후, 해당 파일의 내용을 복사하여 입력합니다.
관리자가 암호화 가능 (Encrypting sensitive settings 참고)
Webhook Secret

GitHub App에서 설정한 Webhook 시크릿 값을 입력합니다.

(GitHub에서 보안 이슈(Code Scanning Alerts)를 활성화하는 경우에만 필요)


4. Save Configuration을 클릭하여 추가한 구성 정보를 저장합니다.

3. 프로젝트 다시 스캔 

위의 요구 사항이 충족되면  SonarQube Server는 분석이 수행될 때마다 AI 생성 코드의 존재 여부를 확인합니다.

자동 감지된 코드가 포함된 프로젝트는 프로젝트의 개요 및 프로젝트 정보 페이지에 *AI code detected 상태를 표시합니다.


AI 코드 품질 보증(AI Code Assurance)

AI로 생성된 코드의 보안성과 품질을 보장하기 위해 AI 코드에 대한 품질게이트를 설정하고 관리할 수 있는 기능을 제공합니다.

프로젝트에 AI 코드 레이블 지정

프로젝트 설정에서 'AI로 생성된 코드 포함(Contains AI-generated code)' 옵션을 활성화하여 해당 프로젝트가 AI 코드로 구성되어 있음을 표시할 수 있습니다.


AI로 생성된 코드 포함(Contains AI-generated code) 활성화 설정 방법

  1. SonarQube 프로젝트에서 Project Settings > AI-Generated Code로 이동합니다.
  2. Contains AI-Generated Code를 활성화합니다.
  3. Overview 페이지에서 $contains-ai-code 레이블을 확인할 수 있습니다.


AI 코드 보증을 위한 품질 게이트 적용

AI 코드가 포함된 프로젝트에는 AI 코드 보증을 위한 품질 게이트를 적용할 수 있습니다.

SonarQube는 'AI 코드용 Sonar way(Sonar way for AI Code)'라는 기본 품질 게이트를 제공하여 AI 코드 보증을 위해 사용할 수 있습니다.

Sonar way for AI code 품질 게이트 조건

  • Conditions on new code (새 코드에 대한 조건)

    • No new issues are introduced → 새로운 이슈가 발생하지 않아야 합니다.

    • All new Security Hotspots are reviewed → 모든 새로운 보안 핫스팟(Security Hotspots)이 검토되어야 합니다.

    • New code test coverage is greater than or equal to 80.0% → 새 코드의 테스트 커버리지는 80.0% 이상이어야 합니다.

    • Duplication in the new code is less than or equal to 3.0% → 새 코드에서 중복된 코드 비율은 3.0% 이하이어야 합니다.


  • Conditions on overall code (전체 코드에 대한 조건)

    • Security rating: A → 보안 등급(Security rating): A

    • All security hotspots are reviewed → 모든 보안 핫스팟이 검토되어야 합니다.

    • Reliability rating: C → 신뢰성 등급(Reliability rating): C

Sonar way for AI code 품질 게이트 커스텀 설정 방법

  1. Quality Gates 에서 내장된 Sonar way for AI Code을 선택합니다.
  2. 오른쪽 메뉴 에서 Copy를 클릭한 후, 이름을 입력하여 새로운 AI코드를 위한 품질게이트를 생성합니다.
  3. 생성된 품질 게이트 Confditions 아래에 Unlock editing을 통해 조건을 추가하거나 변경합니다.
  4. 오른쪽 메뉴에서 Quality for AI Code Assurance를 클릭하여 AI 코드 검증 품질 게이트로 지정합니다.

내부 AI 코드 보증 배지

 AI 코드 보증을 위한 품질 게이트 설정 완료 후, 분석을 실행하면 프로젝트 Overview 및 프로젝트 정보 페이지에는 AI 코드 보증 상태를 나타내는 배지가 표시됩니다.


다음은 각 보증 배지가 의미하는 상태입니다.

  • $in-shield-success AI Code Assurance passed (AI 코드 보증 통과) : 프로젝트가 AI 코드 보증을 위한 품질 게이트를 통과했음을 나타냅니다.
  • $in-shield-error AI Code Assurance failed (AI 코드 보증 실패) : 프로젝트가 AI 코드 보증을 위한 품질 게이트를 통과하지 못했음을 나타냅니다.
  • $인쉴드온AI Code Assurance is on (AI 코드 보증 활성화됨) : 프로젝트에 AI 코드 보증을 위한 품질 게이트가 적용되었지만, 아직 상태가 계산되지 않았음을 나타냅니다.
  • $in-shield-off/비활성화됨 AI Code Assurance is off (AI 코드 보증 비활성화됨) : 프로젝트에 AI 코드 보증이 적용되지 않았음을 나타냅니다.

외부 AI 코드 보증 배지

프로젝트가 AI 코드 보증 기준을 충족하면, 외부 웹사이트에 표시할 수 있는 AI 코드 보증 배지를 발행할 수 있습니다.

이를 통해 프로젝트의 AI 코드 품질 상태를 외부에 알릴 수 있습니다.
프로젝트 배지 사용 에서 생성 방법 및 자세한 정보를 확인할 수 있습니다.


다음은 각 AI Code Assurance 배지가 의미하는 상태입니다.

  • $AI 코드 보증 | 통과: AI가 생성한 코드에 대한 품질 게이트(quality gate qualified for AI-generated code)를 통과했습니다.
  • $AI 코드 보증 | 실패: AI가 생성한 코드에 대해 품질 게이트를 통과하지 못했습니다.
  • $AI 코드 보증 |: AI가 생성한 코드에 대해 품질 게이트를 사용중이지만, 품질 게이트 상태가 아직 계산되지 않았습니다.
  • $AI 코드 보증 | 꺼짐: AI가 생성한 코드에 대해 품질 게이트가 적용되지 않고 있습니다.



  • 레이블 없음