회사에서 혼자서 프로젝트를 진행하다보면 코드에 문제가 거나나 취약점 혹은 잠재적 에러 발상 부분에 대해서 스스로 파악하고 해결해야하는 문제점을 가지고 있습니다.
저도 항상 그 부분때문에 배포하고 나서도 생각하지도 못한 NPE로 인해서 재 배포하는 일도 빈번했습니다.
물론 완벽하게 예외처리를하고, 입력값에 대한 철저한 검증을 했다만 막을 수 있었겠지만 혼자서 완벽하게 처리하기에는 아직 경험과 실력이 부족한거 같습니다.
그래서 이번에는 SonarQube 정적 분석툴을 이용해 제가 작업한 소스코드에 어떤부분이 잠재적으로 오류를 발생하는지, 어떻게 수정하면 좋을지 등에 대한 피드백을 받기로 했습니다.
우선 SonarQube 대한 자세한 내용은 아래 글을 참고하면 좋을거 같구요
이번 포스팅에선 Ubuntu에 SonarQube 설치하는 방법에 대해서 작성해보려고 합니다.
- https://medium.com/@joypinkgom/%EC%86%8C%EC%8A%A4-%EC%A0%95%EC%A0%81-%EB%B6%84%EC%84%9D%EB%8F%84%EA%B5%AC-sonarqube-%EB%A6%AC%EC%84%9C%EC%B9%AD-9d48fc62b01f
- https://www.popit.kr/%EB%82%B4%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EB%A6%AC%EB%B7%B0%ED%95%B4%EC%A4%80%EB%8B%A4%EB%A9%B4-by-sonarqube/
1. Download
우선 SonarQube 다운로드 페이지로 이동해서 설치하려는 버젼의 압축파일 링크를 복사합니다.
저는 LTS 버젼인 6.7.7 버젼을 설치 했습니다.
복사된 주소를 ubuntu 서버 터미널에서 wget을 이용해 다운받습니다.
1 | # 다운로드 |
2. JDK 설치
SonarQube를 사용하려면 서버에 JDK도 설치 되어있어야 합니다만. 지원하는 JDKsms Open JDK 8 버젼만 지원합니다. 참고
그래서 Open JDK 8 버젼을 설치합니다.
1 | # Open JDK 8 설치 |
3. Database 셋팅
SonarQube에는 MS-SQL, Oracle, PostgreSQL, MySQL을 지원하는거 같은데 MySQL은 권장하지 않는다고 합니다.(데이터 센터 에디션은 아예 MySQL을 지원하지 않는다고 합니다.)
그래서 여기서는 PostgreSQL을 이용해 셋팅을 해보도록 하겠습니다.
(저도 PostgreSQL은 처음이라 좀 셋팅이 어설플 수 있습니다.)
PostgreSQL 셋팅은 아래와 같이 작업합니다.
1 | # postgresql을 설치합니다. |
4. SonarQube 셋팅
이제 SonarQube 셋팅 후 실행하는 단계만 남았습니다.
1 | # SonarQube 설정 파일을 수정합니다. |
5. SonarQube 실행
이제 SonarQube를 실행해보겠습니다.cd $HOME/sonarqube-6.7.7/conf
로 이동해서 보면 여러 운영체제의 실행폴더가 있는데요
그중에서 linux-x86-64 폴더로 들어갑니다(linux-x86-32 도 있는데 OS에 맞춰서 들어가시면 될거 같아요)
실행할때 추가적인 옵션에 따라서 그냥 실행 혹은 중단, 재시작, 상태확인, 콘솔 출력 등의 작업을 수행할 수 있는데요
설치후 최초 실행하는거라서 저는 항상 정상적으로 실행되는지 궁금해서 콘솔 출력 옵션을 추가해서 실행합니다.
(옵션 목록 : console | start | stop | restart | status | dump)
1 | # 기본적인 SonarQube 실행 |
SonarQube가 정상적으로 실행이 되었다면 웹브라우저를 통해 접속해보겠습니다.
SonarQube의 기본 포트는 9000번 이구요 변경하고 싶다고 하시면 sonar.properties 파일에서 변경 가능합니다.
6. SonarQube와 프로젝트 연동
http://서버의IP:9000 로 접속하시면 SonarQube 페이지가 노출됩니다.
로그인을 할때는 ID : admin / PW : admin으로 접속하시고 관리자 페이지에서 계정추가 및 관리를 해주시면 됩니다.
최초 로그인하면 연결된 프로젝트가 없어서 튜토리얼이 진행되면서 프로젝트 연동을 도와줍니다.
튜토리얼 1번에 Token의 이름을 입력하시고 Generate 버튼을 누르시면 토큰이 생성됩니다.
(토큰은 프로젝트 식별을 위해 사용되는거 같습니다.)
토큰 생성 완료 후 Continue 버튼을 누르시면 다음 튜토리얼로 넘어갑니다.
프로젝트를 연동하기 위해 선택해야 하는 부분이 있는데요 우선 프로젝트가 어떤 언어로 개발되었는지, 빌드툴은 Maven을 쓰는지 Gradle을 쓰는지 선택을 하면 오른쪽에 연동할때 필요한 스크립트 및 플러그인 코드가 나옵니다.
저는 Spring에 Gradle을 사용하고 있어서 위와 같이 선택하였구요.
첫번째 코드는 프로젝트의 build.gradle파일에 추가해주시면 됩니다.
두번째 스크립트는 터미널을 열고 프로젝트가 위치한 폴더로 이동후 터미널에 입력하면 해당 프로젝트를 SonarQube와 연동하게 됩니다.
정상적으로 연동이 완료되면 아래 이미지와 같이 연동된 프로젝트가 노출되고요 여러가지 버그, 취약점등에 대해 확인할 수 있습니다.
다음번에는 이전 포스팅에서 작업한 Gitlab과 SonarQube를 연동해서 PR이 요청되면 자동으로 SonarQube의 정적분석을 실행해서 결과를 알려주는 방법에 대해 소개해 보겠습니다.
참고 링크