이번에 Kotlin으로 Spring Boot를 개발하는 프로젝트에 들어가게 되었다. 이에 Kotlin 관련 코드 컨벤션을 정하면 좋을 것 같다는 이야기가 나왔고 이를 효율적으로 해주는 ktlint 설치를 담당하게 되어 이를 정리해보고자 한다.
ktlint
ktlint란, Kotlin 코드의 스타일을 자동으로 검사하고 포맷팅해주는 도구이다.
이를 통해, 코드를 깔끔하게 유지하고 팀 스타일 가이드를 지킬 수 있다는 장점이 있다.
📍ktlint는 pinterest의 오픈소스를 대부분 사용한다고 한다.
GitHub - pinterest/ktlint: An anti-bikeshedding Kotlin linter with built-in formatter
An anti-bikeshedding Kotlin linter with built-in formatter - pinterest/ktlint
github.com
📍ktlint 규칙에 대한 설명은 아래 링크에서 확인 가능하다.
Code styles - Ktlint
Code styles Starting from version 1.0, ktlint_official is the default code style. If you want to revert to another code style, then set the .editorconfig property ktlint_code_style. [*.{kt,kts}] ktlint_code_style = intellij_idea # or android_studio or ktli
pinterest.github.io
적용방법
이제 ktlint를 spring boot 프로젝트에 적용하는 방법에 대해 알아보자.
먼저, build.gradle 파일에 pinterest/ktlint를 간편하게 사용할 수 있게 한 그래들 플러그인을 작성해준다.
plugins {
id("org.jlleitschuh.gradle.ktlint").version("12.1.0")
}
그리고 터미널에 해당 명령어 적용해주면 끝이다.
./gradlew ktlintCheck
필자가 처음 명령어를 돌렸을 때 빌드 오류가 발생했는데, 이는 ktlint 규칙을 위반한 코드가 있기 때문에 발생한 것이다.
자세히 살펴보면 build > reports > ktlint 하위 파일에 관련 오류 보고서가 작성되어 있다는 것을 확인할 수 있다.
해당 보고서는 위처럼 txt파일로 작성되어 있다.
관련 에러들을 몇 개 살펴보면 다음과 같다.
- function-signature: 함수 선언부 포맷 문제 (함수에 매개변수가 많은데 한 줄에 모두 작성한 상황이다.)
- trailing-comma-on-declaration-site: 트레일링 콤마 누락
실제로 오류가 난 파일에 들어가 보면 13번째 줄에 매개변수가 모두 한 줄에 작성된 것을 확인할 수 있었다.
이러한 사항들을 자동으로 포맷팅해 주는 명령어도 있다.
./gradlew ktlintFormat
이렇게 하면 위에서 났던 에러들이 자동으로 바뀌어 있는 것을 확인할 수 있을 것이다.
리포트 예쁘게 바꾸기
txt 파일로 작성되는 것이 한눈에 들어오지 않아 보기 불편했었다. 그래서 이를 가독성 있게 해 주는 방법도 있는데 바로 JSON 파일로 확인하는 것이다.
build.gradle 파일에 ktlint 보고서를 JSON 형태로 보겠다고 작성해 준다.
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
ktlint {
reporters {
reporter(ReporterType.JSON)
}
}
그러면 이전과 달리 잘 보이도록 작성된 것을 확인할 수 있다.
CI 추가
마지막으로 PR을 올릴 때마다 kotlin 코딩 컨벤션을 잘 지켰는지 확인하기 위해 CI에도 추가해 주면 좋다!
jobs:
ci:
runs-on: ubuntu-22.04
# 생략!
- name: ktlint 실행
run: ./gradlew ktlintCheck
📍ktlint 적용 PR :https://github.com/teamterning/Terning-Server-Kotlin/pull/13
[✨feat] ktlint 설치 by leeeyubin · Pull Request #13 · teamterning/Terning-Server-Kotlin
📄 Work Description ktlint 설치했습니다. ktlint 규칙에 어긋나는 문법은 JSON 형태로 보고서 작성되게 했습니다. CI에 ktlint 검사하는 명령어 추가했습니다. 💭 Thoughts ktlint이 잡아주는 것들은 트레일링
github.com
'Develop > Server' 카테고리의 다른 글
[Server] JPA 개념부터 Spring Data JPA까지 (0) | 2025.05.05 |
---|---|
[IT 인프라] Ch4 기본 이론 (큐, 배타적 제어, 상태 저장/비저장) (0) | 2025.05.03 |
[IT 인프라] Ch3 3계층형 시스템 (웹 데이터, 가상화) (0) | 2025.04.12 |
[Cloud Native] Ch1 클라우드 네이티브 소개 (1) | 2024.06.16 |