OS : Windows 11 x64
IDE : Intellij(Spring), VSCode(React)
언어 : Java(Spring), Typescript(React)
빌드 : Gradle
다운로드 링크는 여기를 참고하면된다.
.zip
파일 다운로드의 경우 Java 17
버전을 필수로 다운로드 받는다.Java 17
의 환경 변수 설정을 수행한다.실행 커맨드
C:\sonarqube\bin\windows-x86-64\StartSonar.bat
또는 해당 경로에서 .bat
파일을 더블 클릭하면 아래와 같이 실행 화면이 출력된다.
실행 화면
접속 URL
http://localhost:9000
로그인 기본 정보
user : admin
password : admin
로그인을 성공하면 비밀번호를 변경해야하는데 다음 조건에 만족해야한다.
메인 화면에 표시된 것처럼 Create a local project
를 클릭하여 프로젝트를 생성해보자.
메인 화면
다음과 같이 정보를 설정하는 화면이 나온다.
정보 설정
위와 같이 Project 정보를 입력하고 Next를 클릭하여 설정 화면으로 넘어간다.
새 코드 인식 설정
New Code
를 인식 방식은 다음과 같으며, 기본 설정은 Previous Version
이다.
New Code
로 인식New Code
로 인식New Code
로 인식Use the global setting
을 기본으로 이용하는 것을 추천하며, Create project
를 클릭하자.
메인 화면
Project를 생성하면 위와 같이 이름과 브랜치명이 표시되며, 하단에 Locally
라는 UI가 활성화 된다.
Locally
를 클릭하여 토큰 발급을 수행하자.
토큰 발급
Token의 이름을 지정하고, 만료기한을 설정한다. 만료기한이 다 되었을 경우에는 토큰을 새로 다시 발급하면 된다.
이후 Generate
를 클릭하여 토큰을 발급하자.
토큰 생성
토큰이 발급되면 반드시 복사하고, 안전한 곳에 저장한다.
Continue
를 클릭하여 분석을 수행해보자.
SonarQube Server에서는 친절하게 하단에 적용해야하는 사항을 제시해준다.
하지만 추가적으로 설정이 필요한 부분이 있으니 아래 내용을 참고하자.
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 프로젝트에 대해서 분석을 수행해보자. 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 환경에서 사용하기에는 다음과 같은 부분들이 불편하게 생각되었다.
.bat
파일을 직접 실행하는 등의 방식으로 서버가 유지됨OS를 변경하여 서비스로 SonarQube Server를 구성하고, 차후 DevOps 플랫폼과 통합한다면 버전 관리와 동시와 코드 품질 관리도 할 수 있어 상당히 도움이 많이 될 것 같다.
위에서 작업을 수행하면서 궁금했던 부분은 branch는 어떤 역할을 하는 것인가?
였다. 그래서 간단하게 알아본 내용은 다음과 같다.
Quality Gate
를 설정할 수 있고, 품질 상태를 항상 안정적으로 유지하도록 관리New Code
대상으로 설정하여 추가 및 수정된 코드만 분석하는 것도 가능브랜치는 sonar.branch.name
속성으로 지정이 가능하다.
위 내용을 토대로 본다면 버전 관리 체계에서 사용하는 브랜치의 역할과 유사한 역할을 하는 것으로 판단된다. Git 등의 Repository와 연결하고, 브랜치 단위로 SonarQube에서도 코드 품질 검사를 지원하는 것이기 때문에 연계성이 높고 관리 측면에서도 효율적이라는 생각을 했다.
브랜치별 코드 품질 관리를 하는 부분들도 차차 정리해서 다뤄보겠다.