[OpenSource] 소나큐브 연동하기

0. 시작하며

개인적으로 프로젝트 리팩토링을할때 "기존 대비 ~~의 향상!" 이라는 부분이 필요하다고 느꼈습니다. 따라서 프로젝트 코드의 기존 상태를 파악하기위해 사용한 소나큐브에대한 기록을 하려고합니다.

 

1. 소나큐브란?

SonarQube란 여러가지 프로그래밍 언어에서 버그, 취약점, 테스트 커버리지 등을 분석해주는 정적 코드 분석 도구입니다. 간단한 연동을 통해 자동으로 분석해주니 지속적 관리에 좋다고 생각하여 연동했습니다.

 

소나 큐브 구성

  1. SonarQube Server : 웹 어플리케이션의 형태로 SonarQube Scanner 로 업로드한 소스 코드를 분석하고 보여줍니다
  2. SonarQube Database : SonarQube 분석 결과를 저장
  3. SonarQube Scanner : SonarQube 분석을 위해 소스 코드 업로드

2. 소나 큐브 설치

1. zip 파일 설치

https://www.sonarsource.com/products/sonarqube/downloads/

 

Download | SonarQube

Get the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.

www.sonarsource.com

 

2. docker image pull

docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest

 

 

(docker 기준으로 설명을 이어가겠습니다) 위 방식으로 SonarQube Server를 받아 localhost:9000으로 접속을 하고 로그인을 해주면 바로 프로젝트를 등록할 수 있습니다.

초기 ID, PW는 모두 admin 입니다.

 

3. 소나큐브 사용

1. 로그인 후

etc-image-0

로그인을하면 위와 같은 화면을 보실 수 있습니다. 아래에 경고는 따로 Database를 설정하지 않아 발생하는 경고입니다. Database의 경우 Postgre SQL, MS SQL, Oracle을 지원하며 해당 DBMS가 아니라면 추후 버전 업데이트시 데이터가 유지되지 않을 수 있습니다. 

 

위 화면에서는 프로젝트의 인프라 플랫폼과 연동하여 진행할 수 있는데 저는 로컬 프로젝트를 선택하겠습니다

 

2. craete a local project

 

etc-image-1

create a local project를 선택하면 위처럼 프로젝트 이름, key 그리고 branch name도 설정할 수 있습니다. 

 

etc-image-2

설정을 했다면 다음과 같은 설정을 고를 수 있는데요 저는 Global setting으로 진행했습니다.

etc-image-3

Locally를 선택하고

etc-image-4

generate를 누르면 토큰을 발급 받을 수 있습니다. 해당 토큰을 잘 보관한뒤 진행해주세요 아래 "Run analysis in your project" 단계가 되면 빌드 도구를 선택할 수 있는데요 저는 Maven 프로젝트를 타겟으로 하여 진행하기 때문에 Maven을 선택했습니다.

Maven이라면 다음과 같은 명령어를 프로젝트 위치에서 실행해야합니다.

mvn clean verify sonar:sonar ^
  -Dsonar.projectKey=Milligram ^
  -Dsonar.projectName="Milligram" ^
  -Dsonar.host.url=http://localhost:9000 ^
  -Dsonar.login=your_tkoen^

 

위 명령어에서 your_tkoen은 본인이 발급 받은 토큰을 넣어주세요. 

 

여기 까진 무난히 진행됐는데 이때  java.lang.UnsupprortedClassVersionError  에러가 발생했습니다. (그럼 그렇지 ㅋㅋ) 하지만 아래의 소나큐브 공식문서에 답이 있었습니다. 

https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/languages/java/

 

Java

Java analysis is available in all editions of SonarQube.

docs.sonarsource.com

 

결론만 말하자면 환경을 java 17 version으로 맞춰주고 해당 프로젝트를 빌드할 jdk의 경로를 설정해주니 해결이 됐습니다. 처음엔 image를 pull받아서 sonarqube를 실행하니까 내 기본 환경의 java version이 8이든 17이든 상관 없을줄 알았지만 scanner plugin의 java version을 최근 버전은 17로맞춰야했기 때문에 에러가 발생했었습니다.

 

이후 문제가 없다면 분석 화면을 볼 수 있습니다. 소스 코드 상 바꿔야할 부분이 발생한 위치, 왜 그런지와 어떤식으로 바꾸는게 좋은지 전부 나와서 신기하기도하고 개인 PT 선생님이 생긴 기분입니다.

 

다음 목표들..

  • jenkins, githubAction 등과 연동하여 자동, 지속 관리할 수 있습니다.
  • DB와 연결해서 더욱 장기적인 관리를 도모할 수 있음 ( PostgreSQL, MS SQL, Oracle)
  • Jcoco와 연결하여 더욱 세세하게 테스트 커버 여부를 알 수 있음