소나큐브
소나큐브(SonarQube)는 프로그램 코드의 품질을 체크해주는 오픈소스 툴이다. 이클립스(Eclipse)에서 사용할 수 있는 소나큐브 플러그인이 무료로 제공되고 있다.
개요
소나큐브(SonarQube, 이전 이름: 소나/Sonar)는 코드 베이스의 코드 품질 및 보안을 지속해서 검사하고 코드 검토 중에 개발팀을 안내하는 선도적인 도구이다. 27개의 프로그래밍 언어를 다루면서 기존 소프트웨어 파이프라인과 연결되는 동안 소나큐브는 개발자가 문제를 이해하고 수정하고 팀 전체가 더 우수하고 안전한 소프트웨어를 제공할 수 있도록 명확한 수정 지침을 제공한다. 170,000개 이상의 배포를 통해 소규모 개발팀과 글로벌 조직을 지원하는 소나큐브는 전 세계의 모든 팀과 회사가 코드 품질 및 보안을 소유하고 영향을 미칠 수 있는 수단을 제공한다.[1]
소나큐브는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼이다. 소나소스(SonarSource)가 개발하였다. 소나큐브는 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공한다.[2] 소나큐브는 여러 분석 툴을 종합하여 여러 항목을 한번에 검사한 후 웹페이지에서 분석 결과들을 손쉽게 확인할 수 있다. 또한 각종 플러그인을 이용하여 다양한 기능을 제공한다. 소나큐브를 실행하기 위해선 실행 환경이 JDK 버전 8 이상에 최소 2기가 이상의 램과 운영체제 실행을 위한 1기가의 여유 램, 분석을 위한 저장 공간이 필요하다. 클라우드 지향형 소나 클라우드, IDA 확장 플러그인 형태인 소나린트도 있어 다양한 품질 문제를 감지하고 수정할 수 있다. 커뮤니티부터 데이터 센터까지 다양한 에디션으로 구성되어 있고, 그중 커뮤니티 에디션은 무료로 제공된다. 그 외 에디션은 연간 인스턴스 당 코드 라인 수로 가격이 책정되고 다양한 기능들이 더 추가되어 있다.[3]
특징
소나큐브의 특징은 첫째로 지속적인 검사(continuous inspection)이다.[4] 프로젝트의 소스 코드 품질 현황과 관련해 버그, 취약점, 코드 스멜, 기술부채 등의 정보를 한눈에 보여주고, 프로젝트 코드가 품질 측면에서 현재 어떤 상황인지를 표시해준다. 코드 품질 관리를 위해 강력한 방법인 워터릭(wateric) 패러다임, 즉 수도관의 물이 새는 것을 막는 것처럼 소스 추가 및 변경 시에 새로 발견된 문제들을 제어하여 코드 품질을 기계적으로 향상한다. 팀에서 코드 품질관리를 수행하기 위해 조직이 원하는 품질 게이트를 설정할 수 있고, 이를 요구사항 충족 기준 즉, 허들로 사용하여 코드 출시 여부를 판단할 수 있다. 그래프 형태의 시각화를 사용하여 특정 기간 발생한 이슈, 커버리지, 중복 등 프로젝트 히스토리의 세부사항을 쉽고 정밀하게 추적할 수 있다.[3] 둘째, 까다로운 이슈 탐지(detect tricky issues)이다.[4] 프로젝트 이슈 리스트에서 소스 코드 선택 시 해당 이슈의 내용, 상태, 변경 시점, 코드 작업자 등을 자세히 분석할 수 있다. 이슈 발생 시 이메일을 통해 알림을 받을 수도 있으며 해당 이슈의 상세 정보를 확인할 수 있다. 중복코드, 테스트 안 된 코드, 복잡한 코드들을 악취가 나는 코드라고 부르는데, 이러한 코드들은 유지보수가 어렵다. 시스템에서 발견할 수 있는 코드의 취약점을 찾아 추적할 수 있다. 예를 들어 SQL 인젝션, 하드 코딩된 암호, 잘못된 관리 오류 등이 있다. 소나큐브 코드 분석기는 기본 품질 프로파일을 근간으로 대부분의 프로젝트에서 작동하고, 사용자가 원하는 대로 쉽게 조정이 가능하다.[3] 셋째, 20개 이상의 프로그래밍 언어를 지원하고, 데브옵스(devops) 도구와 통합이 가능하다.[4] 20개가 넘는 각 주요 프로그래밍 언어에 대한 코드분석기와 규칙을 제공하고, 여러 프로그래밍 언어를 한 번에 사용할 수도 있다. 코드 품질 정보를 위해 자바, C#, C++, Object C와 같은 언어에 대한 빌드 통합을 지원하고, 뱀부(bamboo), 젠킨스(jenkis), 팀시티(teamcity)와 같은 다양한 CI 엔진과의 통합도 제공한다. 관리 책임자는 거버넌스 제품의 일부로 제공되는 집계 대시보드를 사용하여 프로젝트 품질에 대한 큰 그림을 인식하고 리스크를 평가할 수 있다. 크게 출시 가능성, 신뢰성, 보안, 유지 보수성 등으로 나눠 알 수 있다. 주요 소프트웨어 품질 문제인 테스트 커버리지, 소스 복제 등 주의가 필요한 잠재적인 핫스팟을 강조한다.[3]
장점
소나큐브는 몇 가지 장점이 있는데 첫째, 오픈소스 프로젝트이기 때문에 라이센스 비용이 따로 발생하지 않는다. 추가 비용 없이 다운받아서 사용이 가능하다. 둘째, 프로그램을 설치한 후 사용 가능한 강력하고 단순한 웹 모니터링 UI(user interface) 대시보드를 제공한다. 셋째, 테이블과 차트를 이용하여 시간이 지남에 따라 프로젝트가 얼마나 개선되고 있는지를 보여준다. 넷째, 코딩 품질 개선을 위한 정보인 소스의 중복이나 복잡도, 유닛 테이스트의 커버리지 및 잠재적인 버그 정보 등을 프로젝트 단위부터 파일 단위까지 제공한다.[5]
구성 요소
- 소나큐브 서버(SonarQube Server)
- 소나큐브 서버는 개발자와 관리자가 사용하는 웹서버로 코드를 분석하는 컴퓨터 엔진 서버이다.[6] 사용자용 웹서버, 검색서버, 보고서 처리 및 데이터베이스 저장용 컴퓨터 엔진으로 구성되어 있다.[4]
- 소나큐브 데이터베이스(SonarQube Database)
- 소나큐브 데이터베이스는 소나큐브의 보안 및 플러그인 세팅 등 설정값으로, 각종 설정 및 소스품질 스냅샷 용도로 사용된다. 관계 데이터베이스만 지원하며 MySQL, 오라클(Oracle), PostgreSQL, MS-SQL과 같은 데이터베이스를 지원한다.[6]
- 소나큐브 플러그인(SonarQube Plug-in)
- 소나큐브 스캐너(SonarQube Scanners)
- 소나큐브 스캐너는 분석 스캐너로, 소나큐브에서 분석할 데이터를 전송하는 클라이언트이다. 빌드 서버에 플러그인 형태로 설치하는 것이 대부분이다.[6]
사용 방법
소나큐브 사이트에서 배포하는 파일을 다운로드 후 설정 파일을 개발환경에 맞는 IP, 포트, 콘텍스트 등의 정보를 수정한 후 소나 서비스를 실행한다. 필요에 따라 이클립스 마켓 플레이스에서 제공하는 플러그인을 추가로 설치할 수 있다. 주요 플러그인으로는 파인드 버그, 파인드 시큐리티 버그, PMD, 소나 HTML 등이 있다. 로그인 후 탑 메뉴를 통해 소나큐브의 기능을 사용할 수 있다. 프로젝트 메뉴는 소나큐브에서 관리하는 프로젝트 목록을 확인할 수 있다. 개별 프로젝트명을 클릭한 후 나오는 오버 뷰 화면은 분석 결과의 전체적인 내용을 요약해서 보여준다. 이슈 화명은 현재 프로젝트에 대한 활동 사항을 보여준다. 필터 기능 사용 및 클릭을 통해 해당 문제점들을 상세히 확인이 가능하다. 이슈의 중요도, 상태, 담당자, 액션 플랜, 코멘트 등을 입력할 수 있다. 롤 메뉴는 점검에 적용할 규칙을 관리하는 화면으로 유형별 코딩 규칙을 보여준다. 기본적으로 5가지 결함 등급으로 나뉘는데, 블로커, 크리티컬, 메이저, 마이너, 인포로 관리한다. 블로커(blocker)는 프로그램의 동작에 영향을 줄 가능성이 높은 버그로 즉시 수정이 필요하다. 예를 들어 메모리 노출, 닫히지 않는 데이터베이스 연결 등이 있다. 크리티컬(critical)을 프로그램의 동작에 영향을 줄 가능성이 낮은 버그이지만 보안 결함으로 즉시 검토가 필요하다. 예를 들어 비어있는 캐치 블록, SQL 인젝션 등이 있다. 메이저(major)는 개발 생산성에 크게 영향을 주는 결함으로 시간을 두고 검토가 필요하다. 예를 들어 중복코드, 사용하지 않는 매개변수 등이 있다. 마이너(minor)는 개발 생산성에 잠재적인 영향을 주는 결함으로 너무 긴 코드나 3개 미만의 스위치 문 등이 있다. 인포(info)는 버그이거나 품질 결함은 아니지만 인지할 필요가 있는 것들이다.[7]
전망
- 보안
- 7.9LTS의 경우 자바, C#, PHP에 대한 오염 분석 규칙과 해당 언어에 대한 핫스팟 및 3개를 더한 SAST(static application security testing)분야에 진입했다. 8.x LTS의 경우 더 많은 규칙과 더 많은 언어로 해당 제품을 확장할 것이라고 밝혔다. 오염 분석이 파이썬, C++, C, 자바스크립트 및 타입스크립트로 확장될 것으로 예상하고, 포함된 취약점의 범위도 확장될 것으로 예상한다. 또한, 더 많은 핫스팟 규칙을 추가하고 핫스팟 개념을 보다 직관적이고 사용하기 쉽게 만들 것으로 보인다.[1]
- 파이썬은 곧 도입할 예정이며, 다른 도구가 필요 없는 품질 및 보안과 같은 높은 가치의 규칙으로 최고의 분석을 기대할 수 있다고 밝혔다.[1]
- 완성
- 지금까지 주요 ALM 및 CI/CD 도구 체인과의 통합을 제공하는데 좋은 일을 해왔지만 좋은 것만으론 충분하지 않았다. 2020년 말까지 온 프레미스 및 클라우드에서 깃 허브(git hub), 애저(azure), 비트 버킷(bit bucket) 및 깃 랩(git lab)과 원활하게 통합될 뿐만 아니라 젠킨스를 통해 모든 코드를 쉽게 분석할 수 있을 것으로 기대한다.[1]
- 운용성
- 데브옵스 측에서는 지원되는 공식 Docker 스캐너 이미지와 각 소나큐브 에디션에 대한 공식 지원 이미지를 사용하여 삶을 더 쉽게 만들 것이고, 그 외에 쿠버네티스(kubernetse)와 같은 오케스트레이션 시스템, 모니터링 및 지리적 중복 기능을 추가로 지원할 것이다.[1]
각주
- ↑ 1.0 1.1 1.2 1.3 1.4 소나큐브 공식 홈페이지 - https://www.sonarqube.org/
- ↑ 〈SonarQube 도입기?〉, 《티스토리》, 2020-02-07
- ↑ 3.0 3.1 3.2 3.3 얇은생각, 〈DevOps:SonaQube 특징, 개요, 기능〉, 《티스토리》, 2019-12-09
- ↑ 4.0 4.1 4.2 4.3 4.4 네스팡팡, 〈SonarQube의 특징〉, 《네이버 블로그》, 2019-04-28
- ↑ Isley.tnc, 〈SonarQube란?〉, 《개인 블로그》, 2014-09-14
- ↑ 6.0 6.1 6.2 yayz, 〈Sonarqube란?〉, 《티스토리》, 2019-09-29
- ↑ 얇은생각, 〈DevOps:SonarQube 사용법〉, 《티스토리》, 2019-12-10
참고자료
- 소나큐브 공식 홈페이지 - https://www.sonarqube.org/
- 〈SonarQube 도입기?〉, 《티스토리》, 2020-02-07
- 얇은생각, 〈DevOps:SonaQube 특징, 개요, 기능〉, 《티스토리》, 2019-12-09
- 네스팡팡, 〈SonarQube의 특징〉, 《네이버 블로그》, 2019-04-28
- Isley.tnc, 〈SonarQube란?〉, 《개인 블로그》, 2014-09-14
- yayz, 〈Sonarqube란?〉, 《티스토리》, 2019-09-29
- 얇은생각, 〈DevOps:SonarQube 사용법〉, 《티스토리》, 2019-12-10
같이 보기
이 문서는 로고 수정이 필요합니다.