🖥️ 프로젝트에서 PMD를 이용한 소스 품질 검사
PMD는 Java와 같은 언어로 작성된 코드를 분석하여 코드 스타일, 복잡성, 중복, 오류 가능성 등의 문제를 잡아주는 정적 코드 분석 도구입니다. 품질 좋은 코드를 유지하려면 특히 중요한데, PMD는 프로젝트 코드의 품질을 한층 더 높이는 데 큰 도움을 줍니다. 오늘은 PMD에 대해 알아보고, 설정 방법과 사용 예시를 자세히 설명하겠습니다.
1. 🔍 PMD란 무엇인가?
PMD(Programming Mistake Detector)는 오픈소스 정적 코드 분석 도구로, Java, JavaScript, XML 등을 포함한 여러 언어를 지원합니다. PMD는 코드에 대한 다양한 규칙(Rule)을 제공하여 코드의 오류나 중복 코드 등을 탐지합니다. 이를 통해 복잡성이나 코드 스타일 문제를 미리 발견하고, 유지 보수성을 높이는 데 큰 역할을 합니다.
2. 🛠️ PMD의 주요 기능
PMD는 아래와 같은 주요 기능을 제공합니다:
- 코드 스타일 검사: 예를 들어, 클래스 이름이 CamelCase인지 확인하거나, 메소드가 너무 길지 않은지 검사합니다.
- 중복 코드 검사: 프로젝트 내에서 코드 중복이 발생했는지 감지하여 유지 보수를 쉽게 합니다.
- 복잡성 검사: 메서드의 복잡도를 측정해 가독성과 유지 보수성을 높입니다.
- 잠재적 오류 탐지: 예를 들어, 무한 루프가 발생할 가능성이 있는 코드를 찾아내기도 합니다.
- 커스텀 규칙 작성 기능: 프로젝트 요구에 맞게 맞춤형 규칙을 만들 수 있습니다.
3. 📦 PMD 설치하기
PMD는 일반적으로 Gradle, Maven 등 빌드 도구에 플러그인으로 추가하여 사용합니다. 여기서는 Gradle과 Maven 설정 방법을 설명하겠습니다.
Gradle에 PMD 추가하기
먼저 build.gradle
파일에서 PMD 플러그인을 추가합니다.
plugins {
id 'java'
id 'pmd'
}
pmd {
toolVersion = '6.50.0' // 원하는 버전 입력
ignoreFailures = true // 오류가 발생해도 빌드를 중단하지 않음
}
tasks.withType(Pmd) {
reports {
xml.required = true
html.required = false
}
}
PMD가 설치되면 ./gradlew pmdMain
명령어로 메인 소스에 대한 PMD 검사를 수행할 수 있습니다.
Maven에 PMD 추가하기
pom.xml
파일에 PMD 플러그인을 추가합니다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.15.0</version> <!-- 원하는 버전 입력 -->
<configuration>
<linkXref>false</linkXref>
<printFailingErrors>true</printFailingErrors>
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
이후 mvn pmd:check
명령어를 통해 PMD 검사를 실행할 수 있습니다.
4. 📑 PMD의 Rule 설정하기
PMD는 rulesets
을 통해 코드 검사 규칙을 정의합니다. 기본 제공되는 rule을 사용할 수도 있고, 필요한 경우 직접 정의할 수도 있습니다. PMD가 제공하는 규칙에는 Java Basic Rules, Code Style Rules, Design Rules 등이 있으며, 예를 들어 rulesets/java/quickstart.xml
파일에서 규칙을 정의할 수 있습니다.
<ruleset name="My Custom Rules" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0">
<description>Custom ruleset for my project.</description>
<!-- 기본 규칙 추가 -->
<rule ref="category/java/bestpractices.xml"/>
<rule ref="category/java/codestyle.xml"/>
<!-- 복잡성 규칙 커스터마이징 -->
<rule ref="category/java/design.xml/CyclomaticComplexity">
<properties>
<property name="max" value="10"/> <!-- 복잡도가 10 이상이면 경고 -->
</properties>
</rule>
</ruleset>
규칙 파일 적용하기
위와 같이 작성한 규칙 파일을 빌드 설정에서 적용할 수 있습니다. 예를 들어 Gradle에서는 다음과 같이 적용합니다.
pmd {
ruleSetFiles = files("config/pmd/ruleset.xml") // 설정 파일 경로 입력
}
5. 📊 PMD 검사 실행하기
위와 같이 설정한 PMD를 이제 실행하여 소스 품질을 검사해보겠습니다.
Gradle에서 PMD 검사 실행하기
다음 명령어로 PMD 검사를 수행할 수 있습니다.
./gradlew pmdMain
실행하면 build/reports/pmd/main.html
파일에 검사 결과가 저장됩니다. 결과 보고서를 통해 어떤 파일의 어떤 부분에서 문제가 발생했는지 확인할 수 있습니다.
Maven에서 PMD 검사 실행하기
Maven을 사용하는 경우 다음 명령어를 실행합니다.
mvn pmd:check
PMD가 코드 품질 검사를 수행하고, 보고서를 target/site/pmd.html
파일로 생성합니다.
6. 🎯 PMD로 코드 품질 검사 예시
간단한 예제를 통해 PMD의 코드 품질 검사 기능을 확인해보겠습니다.
public class SampleClass {
public void sampleMethod() {
int i = 0;
while (true) { // PMD가 무한 루프 가능성 경고 발생
i++;
}
}
}
위 코드에서 PMD는 while (true)
로 인해 무한 루프 가능성 경고를 발생시킵니다. 이외에도 메서드가 너무 길거나 복잡도가 높은 경우, 중복 코드가 있는 경우 등 다양한 상황에서 경고를 줄 수 있습니다.
7. 🔄 PMD 결과 개선하기
PMD 검사 결과는 코드의 품질을 향상시키는 가이드라인 역할을 합니다. 무한 루프 방지, 복잡성 줄이기, 중복 코드 제거 등 PMD가 제시한 문제를 해결하며 코드의 유지 보수성을 크게 높일 수 있습니다.
요약
PMD는 정적 코드 분석 도구로 Java 코드 품질 개선에 유용하다.
Gradle과 Maven으로 손쉽게 설정 가능하다.
Custom Rules로 프로젝트에 맞는 규칙을 적용할 수 있다.
PMD는 소스 품질을 높이는 데 큰 역할을 하므로, 프로젝트 초기부터 도입하는 것을 추천드립니다! Programming Mistake Detector
'Java' 카테고리의 다른 글
[JAVA] Java의 예외 계층 구조와 개념 (4) | 2024.11.15 |
---|---|
[JAVA] Java에서 예외 처리방법 (7) | 2024.11.13 |
[JAVA] Spring 돌아보기 Part.3 #JDBC #MyBatis #Multiple DataSources (4) | 2024.10.10 |
[JAVA] Spring Boot Redis 캐시 사용법 (0) | 2024.09.20 |
[JAVA] Spring 돌아보기 Part.2 #AOP (0) | 2024.09.12 |