[공부정리] SonarCloud로 정적 코드 분석

jeyong·2024년 2월 3일
0

공부 / 생각 정리  

목록 보기
20/120
post-custom-banner


이번 글에서는 프로젝트에 정적 코드 분석을 적용하기 위해 SonarCloud를 활용해 본다.

1. SonarCloud

1-1. 정적 코드 분석

정적 코드 분석은 소스 코드를 실행하지 않고 분석하는 과정이다. 이 과정을 통해 소스 코드의 품질을 높이고 잠재적인 버그나 코딩 규칙 위반 등을 찾아낸다.

정적 코드 분석의 이점

  • 잠재적 버그 발견
  • 코드 스타일 위반 판단
  • 오타 찾기
  • 사용되지 않는 코드 식별
  • 보안 취약점 발견

1-2. SonarQube vs SonarCloud

SonarQube와 SonarCloud는 모두 코드 품질 관리 도구다.

  • SonarQube: 온프레미스 환경에서 사용되는 오픈소스 코드 품질 관리 플랫폼. 자체 서버 설치 및 관리 필요.
  • SonarCloud: 클라우드 기반의 호스팅 서비스로, SonarQube의 클라우드 버전. 자체 서버 설치 및 관리 불필요. GitHub PR에 댓글을 자동으로 달아주는 기능은 SonarQube에서는 유료지만, SonarCloud에서는 무료로 제공된다.

개인 프로젝트에서는 SonarCloud가 더 적합하다.

2. 프로젝트에 SonarCloud 적용

SonarCloud 홈페이지에 접속하여 세팅이 필요하지만, 다른 게시글에서 충분히 자세하게 다루어 주고있어 해당 게시글에서는 SonarCloud 홈페이지에 접속하여 기본적인 세팅을 완료한 기준으로 작성하겠다.

2-1. build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.1'
	id 'io.spring.dependency-management' version '1.1.4'
	id 'jacoco' // jacoco
	id "org.sonarqube" version "4.4.1.3373" // sonarqube
}

...

sonar {
	properties {
		property "sonar.projectKey", "Your projectKey"
		property "sonar.organization", "Your organization"
		property "sonar.host.url", "https://sonarcloud.io"
		property "sonar.language", "java"
		property "sonar.sourceEncoding", "UTF-8"
		property "sonar.sources", "src/main/java"
		property "sonar.tests", "src/test/java"
		property 'sonar.coverage.jacoco.xmlReportPaths', 'build/jacocoReport/test/jacocoTestReport.xml'
		property "sonar.java.binaries", "${buildDir}/classes"
		property "sonar.test.inclusions", "**/*Test.java"
		property "sonar.coverage.exclusions", "**/dto/**, **/event/**, **/*InitData*, **/*Application*, **/exception/**, **/service/alarm/**, **/aop/**, **/config/**, **/MemberRole*"
	}
}

build.gradle 파일중 일부이다. 아래에서 자세히 설명하겠다.

플러그인 설정

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.1'
	id 'io.spring.dependency-management' version '1.1.4'
	id 'jacoco' // Jacoco 플러그인
	id "org.sonarqube" version "4.4.1.3373" // SonarQube 플러그인
}
  • org.sonarqube: SonarQube와 SonarCloud 정적 코드 분석을 위한 플러그인.

Sonar 설정

sonar {
	properties {
		property "sonar.projectKey", "Your projectKey"
		property "sonar.organization", "Your organization"
		property "sonar.host.url", "https://sonarcloud.io"
		property "sonar.language", "java"
		property "sonar.sourceEncoding", "UTF-8"
		property "sonar.sources", "src/main/java"
		property "sonar.tests", "src/test/java"
		property 'sonar.coverage.jacoco.xmlReportPaths', 'build/jacocoReport/test/jacocoTestReport.xml'
		property "sonar.java.binaries", "${buildDir}/classes"
		property "sonar.test.inclusions", "**/*Test.java"
		property "sonar.coverage.exclusions", "**/dto/**, **/event/**, **/*InitData*, **/*Application*, **/exception/**, **/service/alarm/**, **/aop/**, **/config/**, **/MemberRole*"
	}
}
  • sonar.projectKey & sonar.organization: SonarCloud에서 프로젝트를 식별하는 데 사용되는 키와 조직명.
  • sonar.host.url: SonarCloud 서비스의 URL.
  • sonar.language: 프로젝트의 주 언어 설정.
  • sonar.sourceEncoding: 소스 코드의 인코딩 설정.
  • sonar.sources & sonar.tests: 소스 코드와 테스트 코드의 위치.
  • sonar.coverage.jacoco.xmlReportPaths: Jacoco에 의해 생성된 코드 커버리지 보고서의 위치.
  • sonar.java.binaries: 컴파일된 Java 바이너리 파일의 위치.
  • sonar.test.inclusions: 분석에 포함될 테스트 파일의 패턴.
  • sonar.coverage.exclusions: 코드 커버리지 분석에서 제외할 파일 패턴.

3. 실행 결과

프로젝트 코드에 대한 분석 결과를 잘 제공한다.

코드에 대한 자세한 분석뿐만 아니라, PR에 대해서도 분석해준다.

분석 결과를 이용해 프로젝트를 적절히 개선할 수 있다.

profile
노를 젓다 보면 언젠가는 물이 들어오겠지.
post-custom-banner

0개의 댓글