강력한 정적 분석 툴인 Sonarqube
무료이긴한데, VS 처럼 Community(무료), Developer, Enterprise 등의 유료버전이 있다.
무료버전에서도 기본적인 언어 15개를 지원한다. (C++, C#, Java, JS, Phython 등)
다운로드 사이트: Download | SonarQube
-
무료 버전인 커뮤니티버전을 다운.
-
다운받으면 압축파일이 하나 생기는데 압축을 풀고 자신의 최애 경로로 이동
-
\sonarqube-8.3.1.34397\bin\windows-x86-64 경로 안에
-
위와 같은 내용물들이 있을텐데, StartSonar.bat를 실행 시켜주면 소나 로컬 서버가 동작.
-
실행 전 사전 준비 사항: Java JDK 11 버전 이상 설치 및 환경변수 설정
-
실행 하면 SonarQube is up 이란 메시지가 뜨고 서버에 접속.
-
Sonar Qube 접속 주소: http://localhost:9000
-
기본 아이디 / 암호: admin / admin
-
Sonar Qube 접속 화면
-
서버 오픈까지는 했고 이제 개발중인 프로젝트를 등록하고 연동.
-
화면 중앙에 ‘Create new projet’ 버튼을 눌러 project key, display name을 입력하고 프로젝트를 생성.
-
토큰 생성
-
토큰을 생성하라고 하는데 이는 나중에 코드 스캔할때 꼭 필요하니까 성 된 토큰을 꼭 복사해서 저장. 이후에 확인하고 싶어도 못한다. (user account에서 토큰을 지우고 재생성 해야한다.)
-
토큰 저장 후 Continue 버튼을 누르면 아래 화면이 나온다.원하는 언어를 선택하고 아래 절차대로 수행하면 되는데, 여기서는 C#에 대해서만 설명한다.
-
MSBuild 용 Scanner를 다운. Download 링크에서 받아도 되지만 아래 링크에서 받는게 최신버전.
.NET Framework4.6+ 버전을 다운받는다.
Sonar Scanner: SonarScanner for .NET
16. SonarQube와 마찬가지로 압축 파일인데 압축 풀고 자신의 폴더로 이동.
(왠만하면 Sonar Qube랑 같은 경로면 좋을 것 같다.)
-
Java JDK와 마찬가지로 환경변수 설정 필요.
-
시스템 Path 변수 편집에서 SonarScanner.MSBuild.exe 실행 파일이 있는 경로를 넣어준다.
-
MSBuild도 환경 변수에 추가해줘야 하는데 MSBuild.exe 파일이 있는 곳을 찾아 마찬가지로 시스템 Path 변수에 추가해준다.
VS2019 기준 경로: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
-
마지막으로 Sonar Scanner 폴더에 SonarQube.Analysis.xml 파일이 있다. 파일을 열어 아래와 같이 수정한다.
SonarQube.Analysis.xml
-
sonar.login 속성에 있는 값은 토큰 값으로 이전에 복사해놨던걸 그대로 붙여넣어준다. 이제 Sonar Qube에 접속하고 빌드할 수 있는 모든 준비가 끝.
-
정적 분석 툴을 돌려보자. 커맨드 창을 열어 정적 분석을 원하는 솔루션 폴더의 경로로 이동한다. (.sln)
솔루션 경로 이동 후 Sonar Scanner 시작 명령 입력
23. 앞서 봤던 절차대로 하나씩 카피하면서 커맨드창에 입력 해준다. (아래 3가지 명령어는 따로 복사해서 저장해두는 것을 추천)
24. SonarScanner.MSBuild.exe begin 명령어 실행 시 위와 같은 화면이 나와야 정상. 혹시나 에러 발생 시 구글에 해당 에러를 검색…
-
2번째 명령어 입력
MSBuild.exe /t:Rebuild 명령 수행 시 결과 창
-
마지막 명령어 입력…
SonarScanner.MSBuild.exe end … 명령어 결과
-
3개 명령어 수행이 잘 끝났다면 다시 Sonar Qube 웹서버로 이동. 프로젝트 정보가 아래와 같이 갱신되었을 것이다.
-
여기서 결과를 보고 현재 자신의 코드에서 어느 부분이 잠재적 결함이 있는지, 그런 부분들을 어떻게 수정해야 하는지도 가이드를 해줌. 이는 빌드 할 때 참조한 외부 라이브러리까지 모두 빌드해서 반영한 결과이기 때문이다. 순수하게 자기가 코딩한 코드만 분석을 하고 싶다면 외부 라이브러리의 경로를 예외로 처리해야 한다.
-
먼저 예외 처리할 폴더 경로를 확인하기 위해 Code 탭으로 들어간다.
기존 내 코드 외에 lib라는 라이브러리 폴더가 같이 존재할 것이다.
그럼 lib 폴더 내에 3rdParty 폴더안에 있는 모든 소스는 예외하고자 할 때
관리자 페이지에서 Analysis Scope 설정 창이 있다. 여기서 Source File Exclusions 항목이 있는데
lib/3rdParty/**/*
라고 입력을 하면 3rdParty 폴더 내의 하위 폴더 포함 모든 소스코드를 예외로 하겠다는 말이다.
그리고 다시 Sonar Scanner를 돌리면 해당 프로젝트는 제외하고 결과가 반영될 것이다.
저 자세한 예외 처리 방법은 아래를 참고하자.