Zum Hauptinhalt springen

🏗️ Gradle 설정

📖 Gradle이란?

Gradle은 프로젝트를 빌드하고 관리하는 도구입니다. 코드 컴파일, 테스트, 패키징을 자동화합니다.

🎯 비유로 이해하기

프로젝트 = 집 짓기
├─ 코드 = 건축 자재
├─ Gradle = 건설 관리자
│ ├─ 자재 주문 (라이브러리 다운로드)
│ ├─ 건설 순서 관리 (빌드 순서)
│ └─ 품질 검사 (테스트)
└─ build.gradle.kts = 설계도

💡 Gradle vs Maven

Gradle:
├─ 빠른 빌드 속도
├─ Kotlin DSL 지원
├─ 유연한 설정
└─ 최신 프로젝트의 표준

Maven:
├─ 오래되고 안정적
├─ XML 설정 (장황함)
└─ 레거시 프로젝트에 주로 사용

결론: Gradle 추천! ✅

🔧 Kotlin DSL vs Groovy DSL

Gradle 설정 파일은 두 가지 언어로 작성할 수 있습니다:

Groovy DSL (build.gradle):
├─ 전통적인 방식
├─ 예제가 많음
└─ 덜 엄격함

Kotlin DSL (build.gradle.kts):
├─ Kotlin으로 작성
├─ 타입 안전성
├─ IDE 자동완성 지원
├─ Kotlin 프로젝트에 더 적합
└─ 추천! ✅

📂 프로젝트 구조

Gradle 프로젝트의 기본 구조:

my-kotlin-project/
├── src/
│ ├── main/
│ │ └── kotlin/ # 메인 코드
│ │ └── Main.kt
│ └── test/
│ └── kotlin/ # 테스트 코드
│ └── MainTest.kt
├── build.gradle.kts # 빌드 설정
├── settings.gradle.kts # 프로젝트 설정
└── gradle/
└── wrapper/ # Gradle 래퍼

📝 build.gradle.kts 기본 구조

최소 설정

// build.gradle.kts

plugins {
kotlin("jvm") version "1.9.22" // Kotlin JVM 플러그인
}

group = "com.example" // 프로젝트 그룹
version = "1.0.0" // 프로젝트 버전

repositories {
mavenCentral() // 라이브러리 저장소
}

dependencies {
// Kotlin 표준 라이브러리
implementation(kotlin("stdlib"))
}

설명

plugins {
// Kotlin JVM 플러그인 추가
kotlin("jvm") version "1.9.22"
}
// → Kotlin 컴파일러 설정

repositories {
mavenCentral()
}
// → 라이브러리를 다운로드할 저장소

dependencies {
implementation(kotlin("stdlib"))
}
// → 사용할 라이브러리 목록

📦 의존성 추가하기

의존성 타입

dependencies {
// implementation: 컴파일 + 런타임
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")

// testImplementation: 테스트에만 사용
testImplementation(kotlin("test"))

// api: 다른 모듈에도 노출
api("com.google.code.gson:gson:2.10.1")

// compileOnly: 컴파일만
compileOnly("org.projectlombok:lombok:1.18.30")

// runtimeOnly: 런타임만
runtimeOnly("com.h2database:h2:2.2.224")
}

실전 예제

// build.gradle.kts

plugins {
kotlin("jvm") version "1.9.22"
application // 실행 가능한 애플리케이션
}

group = "com.example"
version = "1.0.0"

repositories {
mavenCentral()
}

dependencies {
// Kotlin
implementation(kotlin("stdlib"))

// HTTP 클라이언트
implementation("io.ktor:ktor-client-core:2.3.7")
implementation("io.ktor:ktor-client-cio:2.3.7")

// JSON 파싱
implementation("com.google.code.gson:gson:2.10.1")

// 로깅
implementation("ch.qos.logback:logback-classic:1.4.14")

// 테스트
testImplementation(kotlin("test"))
}

// 메인 클래스 지정
application {
mainClass.set("com.example.MainKt")
}

// Java 버전 설정
kotlin {
jvmToolchain(17) // Java 17 사용
}

🧪 테스트 설정

기본 테스트 설정

// build.gradle.kts

dependencies {
// Kotlin 테스트 라이브러리
testImplementation(kotlin("test"))

// JUnit 5
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
}

tasks.test {
useJUnitPlatform() // JUnit 5 사용
}

테스트 코드 예제

// src/test/kotlin/CalculatorTest.kt

import kotlin.test.Test
import kotlin.test.assertEquals

class CalculatorTest {
@Test
fun `2 더하기 3은 5`() {
val result = 2 + 3
assertEquals(5, result)
}
}

🚀 유용한 Gradle 명령어

# 빌드
./gradlew build

# 테스트
./gradlew test

# 실행
./gradlew run

# 클린 (빌드 파일 삭제)
./gradlew clean

# 의존성 확인
./gradlew dependencies

# 작업 목록 보기
./gradlew tasks

📋 settings.gradle.kts

프로젝트 이름과 모듈 설정:

// settings.gradle.kts

rootProject.name = "my-kotlin-project"

// 멀티 모듈 프로젝트인 경우
// include("module1", "module2")

🎨 고급 설정

1. 컴파일 옵션

// build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "17" // Java 17 타겟
freeCompilerArgs = listOf("-Xjsr305=strict")
}
}

2. JAR 파일 생성

// build.gradle.kts

tasks.jar {
manifest {
attributes(
"Main-Class" to "com.example.MainKt"
)
}

// 의존성 포함 (Fat JAR)
from(configurations.runtimeClasspath.get().map {
if (it.isDirectory) it else zipTree(it)
})

duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

3. 코드 스타일 체크

// build.gradle.kts

plugins {
kotlin("jvm") version "1.9.22"
id("org.jlleitschuh.gradle.ktlint") version "11.6.1"
}

ktlint {
version.set("1.0.1")
debug.set(false)
verbose.set(true)
android.set(false)
}

🔍 Gradle Wrapper

Gradle Wrapper란?

Gradle Wrapper:
├─ 프로젝트에 포함된 Gradle
├─ 버전 통일 보장
├─ 별도 설치 불필요
└─ gradlew / gradlew.bat 사용

사용법

# Linux / macOS
./gradlew build

# Windows
gradlew.bat build

Wrapper 업데이트

./gradlew wrapper --gradle-version=8.5

💡 실전 팁

1. 빌드 속도 향상

// gradle.properties 파일 생성

# 병렬 빌드
org.gradle.parallel=true

# 데몬 사용
org.gradle.daemon=true

# 메모리 설정
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m

2. 캐시 활용

# 빌드 캐시 활성화
./gradlew build --build-cache

3. 오프라인 모드

# 인터넷 없이 빌드
./gradlew build --offline

🤔 자주 묻는 질문

Q1. Gradle과 Maven 중 뭘 써야 하나요?

A: Kotlin 프로젝트라면 무조건 Gradle!

Gradle 장점:
├─ Kotlin DSL 지원
├─ 빠른 빌드 속도
├─ 유연한 설정
└─ Kotlin 생태계의 표준

Q2. build.gradle.kts가 안 보여요

A: IntelliJ에서 Gradle 프로젝트로 열어야 합니다.

해결:
1. File → Open
2. build.gradle.kts 파일이 있는 폴더 선택
3. "Open as Project" 선택
4. Gradle 동기화 대기

Q3. 의존성을 어떻게 찾나요?

A: Maven Central에서 검색!

방법:
1. https://mvnrepository.com/ 접속
2. 라이브러리 이름 검색
3. "Gradle (Kotlin)" 탭 선택
4. 코드 복사

🎬 마치며

Gradle은 복잡해 보이지만, 기본만 알면 충분합니다!

핵심 정리:
✅ build.gradle.kts - 빌드 설정 파일
✅ dependencies - 라이브러리 추가
✅ ./gradlew build - 빌드 명령어
✅ Kotlin DSL 사용

다음 단계: 첫 프로젝트로 실제 Kotlin 프로젝트를 만들어봅시다!