본문 바로가기
프로젝트 개발 기록/[개발] java | spring

코딩 컨벤션 설정 | Spotless, Checkstyle ⚙️✨

by HelloJudy 2023. 5. 9.

여러 개발자들이 작업을 할 때 코딩 컨벤션을 정하게 된다.
컨벤션을 정하게 되면 가독성을 높일 수 있다.
Spotless 적용하는 방법과 네이버 코딩 컨벤션을 Code Style Formatter 설정하고, Checkstyle 적용하는 방법 두 가지에 대해서 알아보자.
 

1️⃣ Spotless

Keep your code spotless

 
여러 개발자가 협업하는 환경에서 코드 컨벤션을 지키기 위해 사용하는 플러그인이다.
컨벤션이 지켜지지 않을 경우 build가 실패한다.
 

✔️ Install Guide

  • build.gradle
plugins {
    id 'com.diffplug.spotless' version '6.11.0'
}

 

✔️ Setting Guide

이 부분은 팀 컨벤션에 맞춰 설정해 주면 된다.

  • build.gradle
spotless {
    java {
        target("**/*.java")
        googleJavaFormat().aosp()  // 구글 자바 포맷 적용
        // indentWithTabs(2)
        // indentWithSpaces(4)
        importOrder()  // import 순서 정의
        removeUnusedImports()   // 사용하지 않는 import 제거
        trimTrailingWhitespace()   // 공백 제거
        endWithNewline()  // 끝부분 New Line 처리
    }
}

 

✔️  Use Guide

1) ./gradlew build
컨벤션이 지켜지지 않으면 build는 실패하게 된다.
 
2) ./gradlew spotlessApply
정해진 컨벤션을 적용한다.
 

✔️  CI action 추가

      - name: spotless check
        run: ./gradlew spotlessCheck

 
 
🤔 이 방식은 gradle :spotlessApply로 커밋 전에 수동으로 적용해야 한다. 이는 휴먼에러를 야기한다고 생각한다. 이를 잊어버리고 커밋할 시, CI test가 실패하게 된다.
 
휴먼 에러를 줄이기 위해 자동화가 필요하다!
깃허브 훅으로 자동화할 수 있다. 이 부분은 따로 포스팅했다!

 

[Git] 개발 생산성 향상을 위한 Git Hooks 활용 (with. Spotless) 🎣

2️⃣ 네이버 코딩 컨벤션을 Code Style Formatter 설정하고, Checkstyle 적용

1. .editorconfig 파일 설정

프로젝트 root에 .editorconfig 파일을 설정한다.
 

🤖 : .editorconfig를 사용하는 이유는 뭔가요?

 
다양한 에디터와 IDE가 존재한다. 또한 어떤 OS는 줄 바꿈을 의미하는 개행 문자를 LF(line feed)만 어떤 OS는 CR+LF(Carriage Return + Line Feed)를 쓰기도 한다.
 
여러 개발자가 작업을 하게 되면, 이러한 표준이 없을 때 들여 쓰기를 tab으로 쓰거나 space 4칸을 쓰는 경우가 발생할 수 있다.
이때 소스 코드의 변경이 없음에도 변경이 감지되고 커밋 대상이 될 수 있다.
 
EditorConfig는 환경(Editor, OS, fIle encoding)에 따라 코딩 스타일의 일관성이 깨지는 문제를 해결하기 위한 표준으로 character encoding, 개행 처리 방법, 들여 쓰기 방법(tab인지 space 인지) 등을 정의하고 있어 일관된 코딩 스타일을 유지할 수 있다.
 

  • New > EditorConfig File

 
 

2. Formatter 적용

1) naver-intellij-formatter.xml 파일 다운

 
Java에서는 구글이나, 네이버에서 지정한 코딩 컨벤션을 많이 사용한다. 나는 네이버 코딩 컨벤션을 프로젝트에 적용해 보겠다.
 
🖇️ 네이버 캠퍼스 핵데이 Java 코딩 컨벤션 rule-config
 
위 링크에서 파일을 다운로드하자.
 

2) Scheme 설정

 

  • Settings > Editor > Code Style > Java

현재는 IDE default로 설정되어 있다.

 

  • 톱니바퀴 > Import Scheme > IntelliJ IDEA code style XML

여기서 다운로드한 파일을 선택한다. 이때 To 항목은 프로젝트마다 다른포맷터설정을 사용한다면 스키마의 이름을 유일성 있게 수정한다.
프로젝트마다 컨벤션을 달라질 수 있기 때문에 프로젝트마다 다르게 관리하는 것을 추천한다.
 

 
 
cmd + option + L로 코드 포맷팅을 할 수 있다.
 
 

3. 저장 시 자동 컨벤션 적용

 
저장 시 컨벤션 적용하는 것이 귀찮거나 잊어버릴 수 있다.
그래서 다음과 같이 설정하여 저장 시 포맷팅 되게 할 수 있다.
하지만 난 직접 누르는 게 좋아서(?) 설정하지 않겠다. 각자 상황에 맞춰 적용하면 될 것 같다.
 

  • Settings > Tools > Actions on Save

 

4. Checkstyle 적용

checkstyle : 공식 문서

Checkstyle이란 Java 소스 코드가 지정된 코딩 컨벤션을 준수하는지 확인하기 위한 정적 코드 분석 도구이다.
친절하게 공식 문서에 Gradle에 적용하는 방법이 나와 있으니 참고하여 설치해 보자.
 

  • build.gradle
plugins {
    id 'checkstyle'
}

 
🖇️ 네이버 캠퍼스 핵데이 Java 코딩 컨벤션 rule-config
 
위 링크에서 rules와 suppressions을 저장하자. 그리고 공식문서에서 제공하는 레이아웃에 따라 프로젝트 루트에 파일을 저장하자.
 

checkstyle gradle 공식문서

 

  • build.gradle
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'

tasks.withType(Checkstyle) {
    reports {
        xml.required = true
        html.required = true
    }
}

checkstyle {
    configFile = file("config/checkstyle/naver-checkstyle-rules.xml")
    configProperties = ["suppressionFile": "config/checkstyle/naver-checkstyle-suppressions.xml"]
}

 
build 한 다음 checkstyle Task가 실행되고 리포트 결과를 확인할 수 있다.


📌 Reference

반응형

댓글