← Back to list

Spotless를 활용한 팀 코드 컨벤션 자동화하기

프로젝트에서 팀원 간의 코드 스타일을 일관되게 유지하는 것은 쉽지 않습니다. 특히 협업 환경에서는 들여쓰기, 공백, import 정렬 등 사소한 코드 스타일 차이로 인해 리뷰 효율이 떨어지거나 커밋 히스토리가 어지러워지기 쉽습니다.

Daegyeom · 2025-05-18 10:35 · 0 claps · 6.5 min read
#spotless #ktlint #kotlin #gradle #codeconventions
Open on Medium ↗
Wiki topics: 📱 · Mobile Development

Spotless를 활용한 팀 코드 컨벤션 자동화하기

프로젝트에서 팀원 간의 코드 스타일을 일관되게 유지하는 것은 쉽지 않습니다. 특히 협업 환경에서는 들여쓰기, 공백, import 정렬 등 사소한 코드 스타일 차이로 인해 리뷰 효율이 떨어지거나 커밋 히스토리가 어지러워지기 쉽습니다.

이 글에서는 Kotlin 프로젝트에 SpotlessKtlint를 적용하여 코드 스타일을 자동화하고, Git HookCI까지 연동하는 방법을 설명합니다. 팀의 컨벤션을 강제할 수 있는 환경을 구축해 코드 품질과 협업 효율을 함께 높이는 것이 목적입니다.

1. Ktlint란?

Ktlint는 Kotlin 공식 스타일 가이드를 기반으로 하는 코드 린터(Linter)이자 포맷터입니다. 들여쓰기, 공백, 줄 끝 개행, import 순서 등 다양한 코드 스타일 규칙을 검사하고, 일부는 자동으로 수정해줍니다.

Spotless는 Kotlin 포맷터로 Ktlint를 내부적으로 사용하며, Ktlint 설정값을 그대로 적용할 수 있습니다. 예를 들어 다음과 같은 스타일 규칙을 강제할 수 있습니다:

  • 공백과 들여쓰기 스타일 (예: indent_size 4, indent_style space)
  • 마지막 줄 개행 여부 (insert_final_newline)
  • trailing comma 허용 여부 (ij_kotlin_allow_trailing_comma)
  • 와일드카드 import 금지 등

2. Spotless란?

Spotless는 다양한 언어의 코드 포맷터를 Gradle에 통합할 수 있는 플러그인입니다. Kotlin에서는 내부적으로 Ktlint를 실행하여 포맷팅을 수행합니다.

Gradle 프로젝트에 Spotless를 적용하면 ./gradlew spotlessApply, ./gradlew spotlessCheck 명령어로 코드 스타일을 통일할 수 있으며, 빌드 시 자동으로 스타일을 점검하거나 수정할 수 있도록 구성할 수 있습니다.

3. Gradle 설정 방법

먼저 루트 build.gradle.kts에 플러그인을 추가합니다.

plugins {
    id("com.diffplug.spotless") version "6.25.0"
}

이후 subprojects 블록에서 Spotless 설정을 적용합니다.

subprojects {
    plugins.apply("com.diffplug.spotless")

    configure<com.diffplug.gradle.spotless.SpotlessExtension> {
        val commonEditorConfig = mapOf(
            "charset" to "utf-8",
            "end_of_line" to "lf",
            "insert_final_newline" to true,
            "trim_trailing_whitespace" to true,
            "indent_style" to "space",
            "indent_size" to 4,
            "ij_kotlin_allow_trailing_comma" to true,
            "ij_kotlin_allow_trailing_comma_on_call_site" to true
        )

        kotlin {
            target("**/*.kt")
            targetExclude("$buildDir/**/*.kt", "bin/**/*.kt")
            ktlint("1.5.0").editorConfigOverride(commonEditorConfig)
            indentWithSpaces()
            endWithNewline()
        }

        kotlinGradle {
            target("**/*.gradle.kts")
            ktlint("1.5.0").editorConfigOverride(commonEditorConfig)
            indentWithSpaces()
            endWithNewline()
        }

        format("misc") {
            target("**/*.yml", "**/*.yaml", "**/*.json")
            trimTrailingWhitespace()
            indentWithSpaces(4)
            endWithNewline()
        }
    }
}

4. 주요 명령어

Spotless 설정 후에는 다음 명령어를 통해 코드 스타일을 적용하거나 검사할 수 있습니다.

  • ./gradlew spotlessApply: 코드 자동 포맷을 수행합니다. 지정된 스타일 규칙에 따라 파일이 수정됩니다.
  • ./gradlew spotlessCheck: 코드 스타일 위반 여부만 검사합니다. CI 환경에서 PR을 통과시키기 위한 검증용으로 사용됩니다.

5. Git pre-commit hook 적용

코드를 커밋하기 전에 자동으로 포맷을 적용하려면 Git pre-commit hook을 설정하는 것이 좋습니다. hook을 통해 포맷팅되지 않은 코드가 커밋되는 것을 사전에 방지할 수 있으며, 팀의 코드 컨벤션을 강제하는 데 효과적입니다.

A. scripts/pre-commit.sh

#!/bin/sh

PROJECT_ROOT=$(git rev-parse --show-toplevel)
stagedFiles=$(git diff --staged --name-only)

echo "Running spotlessApply. Formatting code..."
cd "$PROJECT_ROOT" && ./gradlew spotlessApply

if [ $? -ne 0 ]; then
  echo "Spotless apply failed!"
  exit 1
fi

for file in $stagedFiles; do
  if test -f "$file"; then
    git add "$file"
  fi
done

이 스크립트는 커밋 직전에 spotlessApply를 실행하여 코드 스타일을 자동으로 정리하고, 포맷된 파일을 다시 staging 영역에 반영합니다.

B. scripts/install-git-hooks.sh

#!/bin/sh

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"

echo "Installing Git hooks..."
cp "$PROJECT_ROOT/scripts/pre-commit" "$PROJECT_ROOT/.git/hooks/pre-commit"
chmod +x "$PROJECT_ROOT/.git/hooks/pre-commit"
echo "Git hooks installed."

이 스크립트는 위의 pre-commit 스크립트를 Git 훅 디렉토리인 .git/hooks에 복사하여, 커밋 시 자동으로 실행되도록 등록하는 역할을 합니다.

sh scripts/install-git-hooks.sh

pre-commit.sh/install-git-hooks.sh 스크립트 파일 작성이 완료되셨으면, sh scripts/install-git-hooks.sh명령으로 Git pre-commit hook을 적용할 수 있습니다.

7. CI 연동

CI 환경에서는 ./gradlew spotlessCheck를 실행하여 코드 스타일이 올바른지 검사할 수 있습니다.

정리

Kotlin 프로젝트에서 Spotless와 Ktlint를 활용하면 코드 스타일을 자동화하여 팀 컨벤션을 강제할 수 있습니다. 이를 통해 코드 리뷰에서 불필요한 스타일 지적을 줄이고, 변경 이력도 깔끔하게 유지할 수 있습니다.

  1. Gradle에 Spotless 설정을 추가하고 Ktlint를 연동합니다.
  2. Git pre-commit 훅을 설정하여 커밋 전 자동 포맷을 적용합니다.
  3. CI에서 spotlessCheck를 실행하여 스타일 위반을 사전에 차단합니다.

이와 같은 설정을 통해 코드의 일관성과 협업 효율성을 동시에 높일 수 있으며, 실무에 즉시 적용 가능한 표준으로 자리잡을 수 있습니다.


메타데이터
post_id
971341b7e407
slug
spotless를-활용한-팀-코드-컨벤션-자동화하기-971341b7e407
url
https://medium.com/@rlaeorua369/spotless%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%8C%80-%EC%BD%94%EB%93%9C-%EC%BB%A8%EB%B2%A4%EC%85%98-%EC%9E%90%EB%8F%99%ED%99%94%ED%95%98%EA%B8%B0-971341b7e407
canonical_url
https://medium.com/@rlaeorua369/spotless%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%8C%80-%EC%BD%94%EB%93%9C-%EC%BB%A8%EB%B2%A4%EC%85%98-%EC%9E%90%EB%8F%99%ED%99%94%ED%95%98%EA%B8%B0-971341b7e407
author_url
https://medium.com/@rlaeorua369
status
ok
fetched_at
2026-07-19 20:28:21