SonarQube란 무엇인가?
KUKJIN LEE • 3개월 전 작성
SonarQube는 오픈 소스 코드 품질 및 보안 분석 도구로, 소프트웨어 프로젝트의 소스 코드를 지속적으로 검사하고 분석하여 코드 품질을 개선하고 보안 취약점을 식별하는 데 도움을 줍니다. 다양한 프로그래밍 언어를 지원하며, 코드의 버그, 코드 냄새, 보안 취약점 등을 자동으로 감지합니다.
npm i sonarqube-scanner
주요 기능
-
코드 분석 (Code Analysis): SonarQube는 정적 분석을 통해 코드의 버그, 보안 취약점, 코드 냄새, 중복 코드 등을 식별합니다.
-
품질 게이트 (Quality Gate): 프로젝트의 품질 기준을 설정하고, 이를 통과하지 못하는 코드는 배포되지 않도록 방지합니다.
-
다양한 언어 지원: Java, C#, Python, JavaScript 등 25개 이상의 프로그래밍 언어를 지원합니다.
-
지속적인 통합 (CI/CD) 지원: Jenkins, GitLab, Azure DevOps 등과 통합되어 코드 품질 검사를 자동화할 수 있습니다.
-
통합 개발 환경 (IDE) 지원: SonarLint 확장을 통해 IDE에서 직접 코드 품질 문제를 식별하고 수정할 수 있습니다.
-
프로젝트 대시보드: 프로젝트의 코드 품질 상태를 한눈에 볼 수 있는 대시보드를 제공합니다.
SonarQube 설정
1. SonarQube 서버 설치 및 실행
SonarQube 서버를 설치하고 실행합니다. Docker를 사용하는 방법을 예로 들어 설명하겠습니다.
docker run -d --name sonarqube -p 9000:9000 sonarqube
SonarQube 서버가 실행되고 나면 웹 브라우저에서 http://localhost:9000
으로 접속하여 설정을 진행합니다. 초기 로그인 정보는 기본적으로 admin/admin
입니다.
2. SonarQube 프로젝트 생성
SonarQube 웹 인터페이스에 로그인한 후, 새로운 프로젝트를 생성합니다. 프로젝트 키와 프로젝트 이름을 설정하고, 토큰을 생성하여 기록해 둡니다.
Next.js 프로젝트에 SonarQube 통합
1. SonarQube 스캐너 설치
SonarQube 스캐너를 설치합니다. 여기서는 Node.js 환경에서 SonarQube 스캐너를 실행하는 방법을 설명합니다.
먼저, 프로젝트의 루트 디렉토리에 sonar-project.properties
파일을 생성합니다.
touch sonar-project.properties
sonar-project.properties
파일에 다음 내용을 추가합니다.
sonar.projectKey=your_project_key
sonar.projectName=Your Project Name
sonar.host.url=http://localhost:9000
sonar.login=your_sonarqube_token
2. npm 스크립트 설정
package.json
파일에 SonarQube 스캐너를 실행할 수 있는 스크립트를 추가합니다.
(start, build 등이 존재하는 곳에 끼워 넣으면 됩니다.)
{
"scripts": {
"sonar": "sonar-scanner"
}
}
3. SonarQube 스캐너 실행
다음 명령어를 실행하여 SonarQube 스캐너를 실행합니다.
npm run sonar
이 명령어는 sonar-project.properties
파일의 설정을 기반으로 프로젝트의 소스 코드를 분석하고 SonarQube 서버에 결과를 업로드합니다.
Next.js 프로젝트와 CI 통합
Next.js 프로젝트에서 CI/CD 파이프라인을 사용하여 SonarQube 분석을 자동화할 수 있습니다. 예를 들어, GitHub Actions를 사용하여 SonarQube 분석을 설정할 수 있습니다.
GitHub Actions 설정
프로젝트의 루트 디렉토리에 .github/workflows/sonar.yml
파일을 생성합니다.
(기존 GitHub Actions 자동 배포 등 존재한다면 내용 확인 후 아래 코드를 적절하게 배치하면 됩니다. `node-version` 확인해주세요.)
name: SonarQube Scan
on:
push:
branches:
- main
jobs:
sonarQubeScan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run SonarQube Scanner
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: npm run sonar
이렇게 설정하면 main
브랜치에 코드가 푸시될 때마다 GitHub Actions가 SonarQube 스캐너를 실행하여 코드 품질을 분석합니다. SONAR_TOKEN
은 GitHub 리포지토리의 시크릿으로 설정된 SonarQube 토큰을 사용합니다.
위의 단계들을 따라하면 Next.js 프로젝트에서 SonarQube를 사용하여 코드 품질을 지속적으로 분석할 수 있습니다.