Kotlin Multiplatform(KMP)으로 크로스 플랫폼 개발을 시작하려는 개발자들을 위한 실전 가이드입니다. 2025년 7월 현재 기준으로 최신 정보를 담았습니다.
Kotlin Multiplatform은 단일 코드베이스로 여러 플랫폼(Android, iOS, Desktop, Web)을 타겟팅할 수 있는 기술입니다. 비즈니스 로직은 물론 Compose Multiplatform을 통해 UI까지 공유할 수 있습니다.
중요: 2025년부터 Android Studio에 KMP 프로젝트 생성이 완전히 통합되었습니다. 별도의 웹 마법사나 템플릿을 사용할 필요가 없습니다.
Settings → Languages & Frameworks → Kotlin에서 Enable K2 mode
체크박스를 선택해야 합니다.
웹 브라우저에서 빠르게 프로젝트를 생성하고 싶다면 Kotlin Multiplatform Wizard를 사용할 수 있습니다:
이 방법은 IDE를 열지 않고도 웹에서 빠르게 프로젝트 템플릿을 생성할 수 있어 편리합니다. 특히 다양한 설정 조합을 미리 확인하고 싶을 때 유용합니다.
프로젝트/
├── composeApp/ # 멀티플랫폼 공통 모듈
│ └── src/
│ ├── commonMain/ # 모든 플랫폼 공통 코드
│ ├── androidMain/ # Android 전용 코드
│ ├── iosMain/ # iOS 전용 코드
│ ├── desktopMain/ # Desktop 전용 코드
│ └── wasmJsMain/ # Web 전용 코드
├── iosApp/ # iOS 앱 프로젝트 (Xcode)
├── server/ # 서버 모듈 (선택사항)
└── gradle/ # Gradle 설정 파일들
플랫폼별 구현이 필요한 경우 expect/actual 메커니즘을 사용합니다:
// commonMain에서 선언
expect fun getPlatformName(): String
// androidMain에서 구현
actual fun getPlatformName(): String = "Android"
// iosMain에서 구현
actual fun getPlatformName(): String = "iOS"
// desktopMain에서 구현
actual fun getPlatformName(): String = "Desktop"
주의: commonMain은 직접 실행하는 것이 아닙니다. 각 플랫폼을 실행할 때 commonMain의 코드가 자동으로 포함되어 빌드됩니다.
composeApp
iosApp
composeApp [desktop]
composeApp [wasmJs]
오류: Signing for "iosApp" requires a development team. Select a development team in the Signing & Capabilities editor.
이 오류는 iOS 앱을 실행하려면 Apple Developer 계정이 필요하기 때문에 발생합니다. 해결 방법:
iosApp/iosApp.xcworkspace
파일 선택Xcode에서 설정하면 project.pbxproj
파일에 자동으로 Team ID가 저장되어, Android Studio에서도 별도 설정 없이 바로 실행할 수 있습니다.
팁: 무료 Apple ID로도 개발 및 테스트가 가능합니다. 개인 개발자 계정 없이도 시뮬레이터와 실제 기기에서 자유롭게 테스트할 수 있습니다.
composeApp/build.gradle.kts
파일에서:
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
// 네비게이션
implementation("cafe.adriel.voyager:voyager-navigator:1.0.0")
// 네트워크
implementation("io.ktor:ktor-client-core:2.3.7")
// 직렬화
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}
}
val androidMain by getting {
dependencies {
implementation("io.ktor:ktor-client-android:2.3.7")
}
}
val iosMain by getting {
dependencies {
implementation("io.ktor:ktor-client-darwin:2.3.7")
}
}
}
}
composeApp/src/commonMain/kotlin/App.kt
:
@Composable
fun App() {
MaterialTheme {
var count by remember { mutableStateOf(0) }
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "You clicked $count times on ${getPlatformName()}",
style = MaterialTheme.typography.headlineMedium
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = { count++ }) {
Text("Click me!")
}
}
}
}
Settings → Build, Execution, Deployment → Build Tools → Gradle에서 Gradle JDK를 JDK 11 이상으로 설정
local.properties
파일에 다음 추가:
sdk.dir=/Users/username/Library/Android/sdk
Xcode를 실행하고 업데이트가 있는지 확인. 필요시 iOS 시뮬레이터 다운로드
KMP는 2025년 현재 안정적인 크로스 플랫폼 솔루션으로 자리잡았습니다. 특히 Android Studio의 완전한 통합과 Compose Multiplatform의 iOS 안정화로 실제 프로덕션에서 사용하기에 충분히 성숙했습니다.
처음 시작할 때는 복잡해 보일 수 있지만, 한 번 환경을 구성하고 나면 매우 효율적인 개발이 가능합니다. 특히 비즈니스 로직뿐만 아니라 UI까지 공유할 수 있다는 점은 개발 생산성을 크게 향상시킵니다.
추가 리소스: