🏗️ 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 프로젝트를 만들어봅시다!