본문 바로가기
Develop/Server

[Server] Kotlin SpringBoot 프로젝트에 ktlint 적용하기

by bona.com 2025. 5. 5.

이번에 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