🔷 소프트웨어의 품질을 지속적으로 관리하기 위한 오픈 소스 플랫폼
코드 스멜(Code Smells)
을 감지하는 데 탁월하다.연속적 통합(Continuous Integration, CI)
환경에 쉽게 통합될 수 있다.💡 코드 스멜(Code Smells)
소프트웨어 코드에서 발견할 수 있는 문제점이나 나쁜 설계 패턴을 가리키는 용어로, 코드 자체에는 바로 잘못이 없지만, 향후 유지보수를 어렵게 만들거나 코드의 잠재적 결함을 초래할 수 있는 신호
ex) 너무 많은 기능이 하나의 클래스에 집중되어 있거나, 중복된 코드, 불필요하게 복잡한 조건문, 읽기 어려운 코드 등
🔷 개발이 완료된 코드를 DevOps 플랫폼에 보내고, CI 도구를 통해 단위 테스트를 확인, 빌드 및 실행 한 뒤에 SonaQube Scanner가 그 결과를 분석한다. 결과는 피드백과 함께 소나큐브 서버에 게시된다.
❗ 필자의 Docker는 EC2 인스턴스 내에 이미 위치해있다.
Docker
를 이용하여 sonarqube
를 설치하기sudo docker pull sonarqube
sudo docker run -d --restart=always \
-e TZ=Asia/Seoul \
--name sonarqube -p 9001:9000 \
sonarqube
# 복사용
sudo docker run -d --restart=always -e TZ=Asia/Seoul --name sonarqube -p 9001:9000 sonarqube
❗ 혹여나
portainer
를 설치했다면 9000번 포트가 겹치기 때문에 호스트를 9000이 아닌 다른 것(여기선 9001)으로 수정한다.portainer
의 호스트 포트 번호를 수정해도 상관없다. 방화벽 허용은 언제나 잊지 말자.
http://[설치한 컴퓨터의 IP 주소]:9001
에 접속한다.💡 기본 계정은 id와 password 모두 'admin'이다.
Jenkins
와 연동하기❗ 필자는 도커로 설치하여 이미 깃랩과 연동되어있는 젠킨스를 활용한다. 로컬에서 사용하고 싶다면 이 링크를 참고.
1) Jenkins 관리 > 플러그인 관리에서 SonarQube Scanner for Jenkins
를 찾아 설치
2) Sonar Scanner 설정
3) Jenkins 관리 > Manage Credentials > (global) > Add Credentials > Secret Text
로 kind 지정 후 아까 생성한 SonarQube 토큰을 Secret란에 입력한다. (ID는 식별될만한 것으로 임의로 작성)
4) Jenkins 관리 > 시스템 설정 > SonarQube servers에서 이름(프로젝트가 아닌 서버 이름이라 아무거나 지어도 상관 없음)을 적고 SonarQube 서버 URL(9000포트)과 만들어둔 Secret text 토큰을 넣는다.
5) 파이프라인 안에 코드를 작성한다. (백엔드 프로젝트가 있는 경로로 이동)
stage('SonarQube analysis') {
steps {
withCredentials([string(credentialsId: 'sangchu3', variable: 'SONAR_TOKEN')]) {
dir("${SPRING_PROJECT_DIR}") {
withSonarQubeEnv('sangchu') {
sh """
./gradlew sonar \
-Dsonar.gradle.skipCompile=true \
-Dsonar.projectKey=Sangchu \
-Dsonar.projectName='Sangchu' \
-Dsonar.host.url=http://[Domain or localhost]:9001 \
-Dsonar.login=${SONAR_TOKEN}
"""
}
}
}
}
}
언제나 초록불이 켜질 때의 쾌감은 이루 말할 수 없다.
6) SonarQube 페이지로 이동하여 분석 결과를 확인한다.
해당 분석사항들을 기반으로 리팩토링 후 다시 분석을 하면 어느 정도 지적이 줄어든다. (옆에 Failed가 뜬건 기분탓이다.)
SonarQube의 도입은 단순히 코드의 품질을 개선하는 것에서 그치지 않는다. 이는 보다 안정적이고, 보안이 강화된, 그리고 유지보수가 용이한 소프트웨어로 나아가는 길이다. 프로젝트에 있어 이는 근본적인 변화를 가져왔고, 지속 가능한 개발을 위한 중요한 발판이 되었다.