Sky Archive

Tools

[PMD] 시큐어 코딩을 위한 PMD-eclipse-plugin 사용 방법.

Anchovy ʕ-᷅ᴥ-᷄ʔ 2021. 7. 28. 18:32

0. PMD란?

PMD(Programming Mistake Detector)는 애플리케이션 코드 내에서 발견된 문제를 보고하는 정적 소스코드 분석기입니다.🐱‍🐉

일반적으로 시큐어 코딩을 위해 자바 코드를 검사해서 나쁜 코딩을 잡아주고 그에 대한 설명을 지원하며, Eclipse, Jbuider 등에 연동하여 사용해요.

 

또한

- PMD에는 기본 제공 규칙 세트가 포함되어 있으며 사용자 지정 규칙을 작성할 수 있어요.

- PMD는 올바른 형식의 소스 파일만 처리할 수 있기 때문에 컴파일 오류는 보고하지 않아요

 

 

PMD는 대표적으로 다음과 같은 소스 코드의 결함을 감지할 수 있습니다!

- try / catch / finally / switch 블록이 비어 있을 때
- if / while 문이 비어 있을 때
- 불필요한 if 문일 때
- 낭비적인 string / stringbuffer를 사용하고 있을 때
- 복사 / 붙여 넣기를 많이 해 유지 관리 능력을 떨어뜨릴 때 등

 

1. 설치

이클립스에서는 ‘PMD-eclipse-plugin’이 이클립스 마켓에 올라가 있어 손쉽게 설치할 수 있어요.

- Help > Eclipse Marketplace > ‘PMD’ 검색

  (설치가 완료되면 이클립스를 재시작해줍니다.)

 

설치가 완료되면 ‘eclipse Perspective’에 확인이 됩니다.

 

2. 세팅

Eclipse-Window-Preferences에서 PMD의 Reports를 선택 후 리포트 형식을 ‘CSV’로 지정해 줍니다.

 

기본으로 설치되어 있는 Rull을 ‘EgovInspectionRules’으로 변경해 주는 작업으로

Eclipse-Window-Preferences에서 PMD의 ‘Rule Configuration’로 이동합니다.

 

‘Rule Configuration’에 있는 Rule들을 모두 선택한 뒤 ‘Remove rule’을 진행해 줍니다.

 

모두 제거가 완료되었다면 ‘Import rule set’을 선택합니다.

‘Import rule set’에서 ‘Browse’를 선택하여 ‘EgovInspectionRules_kor-3.5_new4.xml’를 불러옵니다.

 

※ 룰 셋 3.8 파일 다운로드 링크

https://www.egovframe.go.kr/wiki/lib/exe/fetch.php?media=egovframework:dev3.8:imp:egovinspectionrules-3.8.zip

※ 적용 방법 및 PMD 룰 셋에 대한 내용 참고
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.8:imp:inspection

 

‘EgovInspectionRules_kor-3.5_new4.xml’에 들어있는 Rule을 확인하고 OK 버튼을 통해 적용시켜 줍니다.

적용이 되면 Eclipse full Build를 진행하여 Apply 시켜 줍니다. 

 

3. 작동

프로젝트에서 PMD 체크할 패키지를 선택한 뒤 ‘Check Code’를 클릭합니다.

 

Code Checking이 완료되면 위반사항이 색별로 표시가 됩니다.

- 컬러 삼각형들은 priority levels로 각 의미는 아래 참고 사항을 확인하세요~

 

- 특정 기능 활용방법

위반사항을 리포트로 출력하기 위해 프로젝트를 우측 클릭합니다..

PMD에서 ‘Generate Reports’를 클릭합니다.

 

 

4. 참고 사항

- priority levels의 의미

 

- eclipse에서 'an error has occurred. see the log file' 발생 시

workspace/.metadata/.log 파일에 알 수 없는 형식의 문자가 들어간 것으로 아래 3가지 방법을 통해 해결할 수 있습니다.

 

1. eclipse 실행 시 -clean 옵션으로 실행하기

- 커맨드 모드에서 [c:\eclipse\eclipse.exe -clean] 입력

 

2. workspace/.metadata/.plugins/org.eclipse.core.resources/.snaps 파일 삭제

- '.snaps' 파일을 삭제

- 재시작하여 새로운 '.snaps' 파일 생성

 

3. workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi 파일 삭제

-  'workbench.xmi' 파일을 삭제

-  'workbench.xmi' 파일은 정상종료 시 다시 생성