[DevOps]SonarQube Server 로컬에서 사용하기

Inung_92·2025년 1월 8일
1

DevOps

목록 보기
2/5

OS : Windows 11 x64
IDE : Intellij(Spring), VSCode(React)
언어 : Java(Spring), Typescript(React)
빌드 : Gradle

SonarQube Server 설치

설치 파일 다운로드

다운로드 링크는 여기를 참고하면된다.

  • Download를 클릭하고, 원하는 플랜의 제품을 다운로드 받는다.
  • .zip파일 다운로드의 경우 Java 17버전을 필수로 다운로드 받는다.
  • Java 17의 환경 변수 설정을 수행한다.

SonarQube 실행

실행 커맨드

C:\sonarqube\bin\windows-x86-64\StartSonar.bat

또는 해당 경로에서 .bat 파일을 더블 클릭하면 아래와 같이 실행 화면이 출력된다.

실행 화면

SonarQube 접속

접속 URL

http://localhost:9000

로그인 기본 정보

user : admin
password : admin

로그인을 성공하면 비밀번호를 변경해야하는데 다음 조건에 만족해야한다.

  • 특수 문자 1개 이상
  • 최소 12글자 이상
  • 영어 대문자 1개 이상
  • 숫자 포함

Project 생성 및 분석

Project 생성

메인 화면에 표시된 것처럼 Create a local project를 클릭하여 프로젝트를 생성해보자.

메인 화면

다음과 같이 정보를 설정하는 화면이 나온다.

정보 설정

위와 같이 Project 정보를 입력하고 Next를 클릭하여 설정 화면으로 넘어간다.

새 코드 인식 설정

New Code 를 인식 방식은 다음과 같으며, 기본 설정은 Previous Version이다.

  • Previous Version(default) : 이전 버전 이후로 작성된 모든 코드를 New Code로 인식
  • Number of days : 지정한 일자 이후의 코드를 New Code로 인식
  • Reference Branch : 특정 브랜치를 지정하여 해당 브랜치 코드를 New Code로 인식

Use the global setting을 기본으로 이용하는 것을 추천하며, Create project를 클릭하자.

분석하기

메인 화면

Project를 생성하면 위와 같이 이름과 브랜치명이 표시되며, 하단에 Locally라는 UI가 활성화 된다.
Locally를 클릭하여 토큰 발급을 수행하자.

토큰 발급

Token의 이름을 지정하고, 만료기한을 설정한다. 만료기한이 다 되었을 경우에는 토큰을 새로 다시 발급하면 된다.

이후 Generate를 클릭하여 토큰을 발급하자.

토큰 생성

토큰이 발급되면 반드시 복사하고, 안전한 곳에 저장한다.
Continue를 클릭하여 분석을 수행해보자.

SonarQube Server에서는 친절하게 하단에 적용해야하는 사항을 제시해준다.
하지만 추가적으로 설정이 필요한 부분이 있으니 아래 내용을 참고하자.

Java(Spring) Project

Maven, Gradle, .NET, Other(for JS, TS...) 등 여러 프로젝트에 대한 지원을 하지만 나는 Gradle을 이용한 빌드를 수행하기 때문에 Gradle을 기준으로 설명하겠다.

Plugin 추가

plugins {
  id "org.sonarqube" version "6.0.1.5171"
}

Gradle의 버전 정보는 여기를 참고하자.

실행 커맨드(옵션 포함)

./gradlew sonar \
  -Dsonar.projectKey=testProject \
  -Dsonar.projectName='testProject' \
  -Dsonar.host.url=http://localhost:9000 \
  -Dsonar.token=[your_token] \
  # sonarqube에서 java는 .class 파일만을 분석하기 때문에 .java를 제외
  -Dsonar.exclusions=**/*.java
  # 해당 옵션을 추가하지 않으면 main 브랜치에 코드 파일이 생성되지 않음
  -Dsonar.sources=src

실행 커맨드(옵션 별도 설정)

./gradlew sonar

옵션은 build.gradle파일에 아래 내용을 추가하여 설정한다.

sonar {  
	properties {  
		property("sonar.projectKey", "testProject")  
		property("sonar.projectName", "testProject")  
		property("sonar.host.url", "http://localhost:9000")  
		property("sonar.token", "your_token")  
		property("sonar.exclusions", "**/*.java")  
		property("sonar.sources", "src")  
	}  
}

위와 같이 커맨드를 수행하면 빌드가 성공했다는 메세지가 터미널에 출력된다.

메인 화면

분석이 완료된 Project에 들어가면 위 사진과 같이 대시보드로 요약이 출력되는 모습을 볼 수 있다.

Typescript Project

이번에는 Typescript 프로젝트에 대해서 분석을 수행해보자. Typescript는 별도로 SonarScanner CLI를 설치하여 환경 변수 설정을 해주어야한다.

여기에서 OS에 해당하는 SonarScanner CLI를 설치하고, 경로를 지정해준다.

환경 변수 설정
검색 > 환경 변수 > 시스템 환경 변수 편집 > 환경 변수 > 시스템 변수 편집

위와 같이 경로를 잡아주고, 확인을 누른 뒤 Path 변수에 아래와 같이 매핑해준다.

PowerShell을 열고 아래와 같이 나오는지 확인한다.

SonarScanner 호출

정상적으로 나온다면 VSCode에서 호출할 준비가 끝났다.

VSCode 코드 분석
VSCode의 프로젝트 루트에 sonar-project.properties 파일을 생성하고, 아래 내용으로 설정을 한다.

sonar.projectKey=reactProject
sonar.projectName=reactProject
sonar.language=TypeScript
sonar.sources=src
# 인코딩 설정을 추가하지 않으면 제대로 분석이 수행되지 않음
sonar.sourceEncoding=UTF-8
sonar.host.url=http://localhost:9000
sonar.login=[your_token]

VSCode에서 터미널을 열어주고, 아래 커맨드로 실행한다.
bash로 수행을 하니 정상적으로 환경 변수를 인식하지 않아 PowerShell로 호출했다.

분석 실행

sonar-scanner

...
15:03:29.989 INFO  Analysis report generated in 317ms, dir size=2.2 MB
15:03:30.726 INFO  Analysis report compressed in 717ms, zip size=1.5 MB
15:03:30.772 INFO  Analysis report uploaded in 46ms
15:03:30.774 INFO  ANALYSIS SUCCESSFUL, you can find the results at: http://localhost:9000/dashboard?id=reactProject
15:03:30.774 INFO  Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
15:03:30.774 INFO  More about the report processing at http://localhost:9000/api/ce/task?id=e6578ad7-c774-424e-af03-f99ac2d261e6
15:03:31.274 INFO  Analysis total time: 55.673 s
15:03:31.275 INFO  SonarScanner Engine completed successfully
15:03:31.814 INFO  EXECUTION SUCCESS
15:03:31.814 INFO  Total time: 58.028s

성공했다는 문구가 뜨면서 분석이 완료된다.

메인 화면

Java를 분석했을 때 보다는 Clean Code에서 멀어진 모습을 볼 수 있다.


정리

SonarQube Server를 로컬에 설치하여 Project를 분석하는 방법에 대해서 알아보았다. Windows 환경에서 사용하기에는 다음과 같은 부분들이 불편하게 생각되었다.

  • SonarQube Server의 실행 방식 : .bat 파일을 직접 실행하는 등의 방식으로 서버가 유지됨
  • Windows에서는 서비스를 등록하려면 상당히 불편한 방식을 거쳐야함

OS를 변경하여 서비스로 SonarQube Server를 구성하고, 차후 DevOps 플랫폼과 통합한다면 버전 관리와 동시와 코드 품질 관리도 할 수 있어 상당히 도움이 많이 될 것 같다.

위에서 작업을 수행하면서 궁금했던 부분은 branch는 어떤 역할을 하는 것인가?였다. 그래서 간단하게 알아본 내용은 다음과 같다.

  • 주요 브랜치
    - mian & master로 관리되며 배포되는 코드의 기준이 되는 브랜치
    - Quality Gate를 설정할 수 있고, 품질 상태를 항상 안정적으로 유지하도록 관리
  • 기능 브랜치
    - 개발 중인 새로운 기능을 포함한 브랜치
    - 주요 브랜치에 병합되기 전에 문제를 사전에 식별하기 위해 이용
  • 단기 브랜치
    - 핫픽스, 작은 기능 추가 등에 대하여 작업하는 경우
    - 단기 브랜치를 New Code 대상으로 설정하여 추가 및 수정된 코드만 분석하는 것도 가능
  • 장기 브랜치
    - 지속적으로 유지되어야 하는 브랜치로 개발, 릴리즈, QA 브랜치 등이 해당
    - 전체 코드베이스를 분석하고, 품질 상태를 관리

브랜치는 sonar.branch.name 속성으로 지정이 가능하다.

위 내용을 토대로 본다면 버전 관리 체계에서 사용하는 브랜치의 역할과 유사한 역할을 하는 것으로 판단된다. Git 등의 Repository와 연결하고, 브랜치 단위로 SonarQube에서도 코드 품질 검사를 지원하는 것이기 때문에 연계성이 높고 관리 측면에서도 효율적이라는 생각을 했다.

브랜치별 코드 품질 관리를 하는 부분들도 차차 정리해서 다뤄보겠다.

profile
서핑하는 개발자🏄🏽

0개의 댓글