코드 품질 향상을 위한 SonarQube 활용

정태경·2023년 3월 5일
0
post-thumbnail

SonarQube?

SonarQube(소나큐브)는 20개 이상의 프로그래밍 언어를 지원하는 정적 분석 도구이다.
코드를 분석하여 버그, 보안 취약성, 코드 커버리지, 코드 복잡도 등을 리포팅해주며 Jenkins, GitHub, GitLab 등 CI 도구와 결합하여 사용할 수 있다. 소나큐브는 19개 언어에 대하여 커뮤니티 버전(무료)을 제공하고 있기 때문에 충분히 사용성 검토를 해본 후 필요에 따라 라이센스를 구독해보는 것도 좋을 것 같다. (라이센스 정보는 이 링크 참고.)

SonarQube 구성

소나큐브는 크게 3가지로 구성되어 있다.

SonarQube Server

코드를 분석하는 엔진 서버이다.
브라우저를 통해 접속할 수 있도록 웹 서버도 제공하며 분석된 데이터를 DB에 저장하는 역할을 한다.

SonarQube Database

소나큐브의 설정 값(플러그인 세팅, 보안 등) 또는 정적 분석 결과 값을 저장하는데 필요하다.
MySQL, Oracle, PostgreSQL 등 RDB만 지원한다.

SonarQube Scanner

소나큐브 서버(SonarQube Server)에 분석할 소스코드를 업로드하는 역할을 한다.
보통은 Jenkins 같은 CI 빌드 서버에 플러그인 형태로 설치하곤 한다.

SonarQube 설치

CI 서버에 결합하기 전에 로컬에서 돌려보기 위해 설치한 과정은 다음과 같다.
소나큐브 공식 홈페이지에서 제공하는 zip 파일을 다운받아 설치해도 되지만 나는 docker를 활용하여 설치했다. 작성한 docker-compose.yml 파일은 다음과 같다.

services:
  sonarqube:
    image: sonarqube:lts-community
    ports:
      - '39270:9000'
    networks:
      - sonarnet
    container_name: sonarqube
    environment:
      - sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar
      - sonar.jdbc.username=admin
      - sonar.jdbc.password=admin
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
      
  postgres:
    image: postgres:14.2
    ports:
      - '35432:5432'
    networks:
      - sonarnet
    container_name: postgres
    environment:
      - POSTGRESQL_USER=admin
      - POSTGRESQL_PASSWORD=admin
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:
    driver: bridge
    
volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

SonarQube 실행

로컬 호스트의 39270 포트로 들어오면 초기 ID/PW 입력 화면이 등장한다.
admin / admin 입력 후 패스워드를 변경하여 로그인 절차를 완료해준다.


로그인 절차를 완료하면 프로젝트 생성 화면이 등장한다.
CI 서버와 연계하여 프로젝트를 생성해도 되고 수동으로 로컬의 프로젝트를 생성할 수도 있다. 나는 로컬에서 실행할 것이기 때문에 수동으로 프로젝트를 생성해주었다.


프로젝트를 생성하면 소나큐브 실행을 위한 토큰 생성 화면이 등장한다.
생성한 토큰은 소나큐브 스캐너를 통해 소스코드를 업로드할 때 활용된다.


토큰까지 생성되었다면 정적 분석을 실행할 로컬 프로젝트 경로로 이동한다.
경로 이동 후 스캐너를 실행하여 소스코드를 업로드하고, 정적 분석이 완료될 때까지 잠시 대기한다.

docker run --rm --net host -e SONAR_HOST_URL="http://127.0.0.1:39270" -v ${PWD}:/usr/src sonarsource/sonar-scanner-cli -Dsonar.projectName={프로젝트명} -Dsonar.projectKey={프로젝트키} -Dsonar.sonar.sourceEncoding=UTF-8 -Dsonar.sonar.host.url=http://127.0.0.1:39270 -Dsonar.sources=/usr/src -Dsonar.login={토큰}

결과를 확인한다.
결과 리포팅 가이드 : 링크

profile
두나무 업비트 QA 엔지니어

0개의 댓글