코딩 컨벤션은 일종의 개발자들 사이의 규칙입니다.
코딩 컨벤션을 지켜 전체적으로 일관성있는 코드를 작성함으로써 유지보수성을 높일 수 있습니다.
아래 링크에서 Google과 Naver의 Java 코딩 컨벤션을 살펴볼수 있습니다.
Google Java Style Guide
https://google.github.io/styleguide/javaguide.html#s3.4.1-one-top-level-class
캠퍼스 핵데이 Java 코딩 컨벤션
https://naver.github.io/hackday-conventions-java/#class-noun
Git Hook은 클라이언트 훅과 서버 훅으로 나눌 수 있습니다. 클라이언트 훅은 commit 이나 merge 할 때 실행되고 서버 훅은 push 할 때 서버에서 실행됩니다.
클라이언트 훅을 사용하여 commit시 Java 코딩 컨벤션을 체크하고 컨벤션을 지키는 코드만 commit 되도록 설정해봅시다.
https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-checkstyle-rules.xml
먼저 저희는 Naver의 코딩 컨벤션을 사용하기로 하였습니다.
위 링크에서 규칙을 다운로드 받을 수 있습니다.
<root>
└── config
└── checkstyle
└── checkstyle.xml
다운받은 규칙 파일을 프로젝트 루트 하위 경로에 두었습니다.
<module name="SuppressionFilter">
<property name="file" value="${suppressionFile}"/>
<property name="optional" value="false"/>
</module
참고로 저는 굳이 예외로 지정할 파일이 없었기 때문에 naver-checkstyle-rules.xml에서 위의 선언은 삭제하고 사용하였습니다.
Git Hook을 설정하기 전,
IDE 설정을 통해 코딩 컨벤션을 체크할 수 있는 환경을 구성하도록 하겠습니다.
먼저 CheckStyle-IDEA
플러그인을 다운로드 받아줍니다.
설정 > 도구 > Checkstyle
에서 미리 다운로드 받은 Naver CheckStyle Configuration file을 등록해주고 활성화해줍니다.
CheckStyle 설정을 통해 한 라인 안에서 여러 변수가 선언될 수 없다는 경고를 안내하고있습니다.
하단 CheckStyle 탭을 통해 프로젝트 전반적으로 코딩 컨벤션을 어긴 부분을 확인할 수 있습니다.
그러나 현재 규칙을 어긋나는 코드가 존재하더라도 commit, push가 모두 가능한 상황입니다.
따라서 commit 직전 규칙 검사를 통해 규칙을 어긋나는 코드가 있다면 commit되지 않도록 설정해보도록 하겠습니다.
프로젝트 경로/.git/hooks
에는 Git에서 지원하는 Hook들의 목록을 살펴볼 수 있습니다.
.sample
확장자를 지우면 별도의 설정 없이 각 상황에 샘플이 바로 적용됩니다.
pre-commit
은 commit 직전에 스크립트를 실행하기 때문에 테스트가 실행되는지 확인하거나, 코드에서 검사해야 하는 항목을 검사하는 데 사용하기 적합합니다.
직접 스크립트를 작성할 수 있지만 이미 CheckStyle을 검사하는 스크립트가 다수 존재하기 때문에 이를 이용하도록 하겠습니다.
아래 링크에서 스크립트를 다운받아 pre-commit
파일을 스크립트 내용으로 교체합니다.
https://gist.github.com/davetron5000/37350
그리고 CheckStyle을 실행할 수 있는 jar파일을 아래 링크에서 다운로드 받아줍니다.
https://github.com/checkstyle/checkstyle/releases/
To use this you need:
1. checkstyle's jar file somewhere
2. a checkstyle XML check file somewhere
3. To configure git:
* git config --add checkstyle.jar <location of jar>
* git config --add checkstyle.checkfile <location of checkfile>
* git config --add java.command <path to java executale> [optional
defaults to assuming it's in your path]
4. Put this in your .git/hooks directory as pre-commit
스크립트에 작성된 TODO List를 확인해보면 [1], [2], [4]는 완료하였으니
아래 git 명령어를 통해 git 설정만 추가해면 됩니다.
git config --add checkstyle.jar c:/Users/.../.git/hooks/checkstyle-8.45.1-all.jar
git config --add checkstyle.checkfile c:/Users/.../config/checkstyle/naver-checkstyle-rules.xml
여기까지 진행했다면 commit 명령어 수행시, 작성한 스크립트가 실행되면서 CheckStyle을 검사하고 규칙을 어긋나는 코드가 있다면 Commit이 되지 않습니다.
사용하는 checkstyle.xml
파일을 다시 한번 확인해보시길 바랍니다.
<module name = "Checker">
<property name="severity" value="warning"/>
위와 같이 위험도가 warning
으로 설정되어있다면 다음과 같이 error
로 변경하면 됩니다.
<module name = "Checker">
<property name="severity" value="error"/>