본문 바로가기

크로스 플랫폼

KMP 개발환경 구축

1. 개발 환경 구축 (Setup)

먼저 필요한 도구들을 설치해야 합니다. iOS 개발을 포함한다면 macOS 환경이 필수입니다.

  • IDE: Android Studio (Otter 버전 이상 권장) 또는 IntelliJ IDEA.
  • 플러그인: IDE 내 Settings > Plugins에서 Kotlin Multiplatform 플러그인을 설치하세요.
  • Xcode: iOS 앱 빌드 및 시뮬레이터 실행을 위해 최신 버전의 Xcode가 필요합니다.
  • JDK: Java 17 이상의 JDK를 설치하세요.

2. 프로젝트 생성하기

가장 빠르고 표준적인 방법은 JetBrains에서 제공하는 KMP Wizard를 사용하는 것입니다.

  1. Kotlin Multiplatform Wizard 사이트에 접속합니다.
  2. 프로젝트 정보 입력: 이름과 패키지 명(ID)을 정합니다.
  3. 플랫폼 선택: Android, iOS는 기본이며 필요에 따라 Desktop, Web, Server를 추가합니다.
  4. UI 공유 방식 선택: * Compose Multiplatform: UI 코드까지 공유하고 싶을 때 (강력 추천)
    • Native UI: 안드로이드는 Jetpack Compose, iOS는 SwiftUI로 따로 짜고 로직만 공유할 때
  5. Download 버튼을 눌러 프로젝트를 받고, Android Studio에서 엽니다.

저는 궁극적으로 BFF 서버도 만들고 싶어서 이렇게 설정했습니다.

그리고 스튜디오에서 다운받은 프로젝트를 열면 아래와 같이 됩니다.

뭔가 열심히 다운로드 중이네요 ㅎㅎ

OS는 Swift와 Xcode라는 완전히 다른 생태계를 사용하기 때문에 별도의 iosApp 폴더(Xcode 프로젝트)가 외부로 노출되어 있습니다. 반면, 안드로이드는 Kotlin이 기본 언어이고 빌드 시스템(Gradle)도 KMP와 동일합니다.

따라서 안드로이드 앱의 실행부(Entry Point)는 별도의 최상위 폴더가 아니라 composeApp 모듈 안에 포함되는 형식을 취합니다.\

폴더 구조 상세 분석

안드로이드 스튜디오의 Project 뷰(Android 뷰 아님)에서 composeApp 폴더를 확장해 보세요.

  • composeApp/src/commonMain: 안드로이드와 iOS가 **공동으로 사용하는 UI(Compose)**와 로직이 들어있습니다.
  • composeApp/src/androidMain: 여기가 바로 안드로이드 전용 폴더입니다. 안드로이드 SDK(Context, Intent 등)가 필요한 코드는 여기에 작성합니다. AndroidManifest.xml 파일도 보통 이 근처에 위치합니다.
  • composeApp/src/iosMain: iOS 전용 Kotlin 코드가 들어가는 곳입니다.

3. 왜 iosApp만 밖으로 나와 있나요?

  • iOS: Kotlin 코드를 프레임워크로 말아서 SwiftUI가 호출하는 방식입니다. 그래서 실제 iPhone 앱을 돌리는 "껍데기"인 iosApp 폴더(Xcode 프로젝트)가 따로 필요합니다.
  • Android: composeApp 자체가 안드로이드 앱의 성격을 동시에 가집니다. build.gradle.kts 파일에 plugins { id("com.android.application") }이 포함되어 있다면, 그 모듈이 곧 안드로이드 앱이 됩니다.

Android Build하면 나오는 화면!

 

iOS 빌드는 위에 iOS APP을 XCode로 열어서 빌드하면 됩니다.

위에 내용은 New Project 기반으로 설명드린 프로젝트 빌드 방법이고요. 

서버 빌드는 아래파일을 찾아서 Run을 눌러주면 됩니다.

서버도 잘 떴네요.

 

기존 프로젝트에 추가하는 방식은 좀 다릅니다. 해당 내용은 추 후 포스팅 하도록하겠습니다.

Android에 New Module로 Kotlin Multiplatform Shared Module 를 추가해주면 됩니다. iOS의 경우 컴파일하고 연결의 작업이 필요합니다.


Discover KMP Library

https://klibs.io/?_gl=1*3tntuw*_gcl_au*NDAzMzI2OTYuMTc3MTY1MjE2MQ..*FPAU*NDAzMzI2OTYuMTc3MTY1MjE2MQ..*_ga*MTAzOTU0OTgwNC4xNzcxNjUyMTYx*_ga_9J976DJZ68*czE3NzE2NTIxNTgkbzEkZzEkdDE3NzE2NTI1NjEkajYwJGwwJGgw&_cl=MTsxOzE7aTRGNkpiY1pObzY3QzNuWEY4N0NzdTZBVzN2ZFF1TWx0a2hXMWNBRThNWWxsbXJaYWhOWmRwaUwwYVlWdFh2Tzs=

반응형

'크로스 플랫폼' 카테고리의 다른 글

코틀린 멀티플랫폼 (KMP)  (1) 2026.02.18
Flutter는 무엇인가?  (0) 2020.03.26