KMP 위자드라는게 생겼다!

#코틀린멀티플랫폼#개발로그#서버배포#앱개발#FullStack#ComposeMultiplatform#KMP

Kotlin Multi Platform의 기본 설정을 쉽게 만들어주는 사이트가 생겼다!

https://kmp.jetbrains.com/ko-kr

원하는 타겟을 체크해서 다운로드를 누르면 기본 프로젝트 구조가 생성된다.
KMP에 대해 가볍게 볼 수 있다.

2026년 1월 14일 기준 생성되는 파일들을 설명해보자면..

당연히 제미나이, 아니 antigravity에게 폴더를 던져주고 분석해보라고 시켰다.



핵심 디렉토리 구조 설명

/composeApp (Compose Multiplatform UI)

공유 UI 코드가 위치하는 곳입니다.

src/commonMain: 모든 플랫폼(Android, Desktop, Web)에서 공통으로 사용되는 Compose UI 코드가 들어갑니다.

src/androidMain, src/iosMain, src/jvmMain: 각 플랫폼에 특화된 코드가 필요할 때 사용됩니다.

/iosApp (iOS Native App)

  • iOS 애플리케이션의 진입점입니다.

  • Kotlin Multiplatform으로 공유된 로직이나 UI를 사용하더라도, iOS 앱의 실행과 배포를 위한 Xcode 프로젝트 설정 및 Swift/SwiftUI 코드는 이곳에서 관리됩니다.

/server (Backend Server)

  • Ktor 프레임워크를 기반으로 한 서버 애플리케이션 코드가 위치합니다.

  • 클라이언트와 서버 코드를 하나의 언어(Kotlin)와 프로젝트에서 함께 관리할 수 있는 구조입니다.

/shared (Shared Logic)

  • 비즈니스 로직을 공유하기 위한 핵심 모듈입니다.

  • 데이터 모델, 네트워킹, 로컬 DB 등 UI를 제외한 순수 로직들이 이곳의 src/commonMain에 작성되어 모든 플랫폼(Android, iOS, Web, Desktop, Server)에서 재사용됩니다.

요약

이 구조는 UI는 composeApp에서, 비즈니스 로직은 shared에서 최대한 공유하고, 각 플랫폼별로 필연적인 부분(iOS 진입점, 서버 설정 등)만 별도로 분리하여 관리하는 효율적인 아키텍처입니다.



하지만, kmp, kotlin으로만 이루어진 서비스를 뭐 어떻게 온라인상에 올릴건데?!
라는 생각부터 들었다.



프로젝트(Kotlin Multiplatform + Ktor Server)를 실제 운영 환경으로 내보내기 위한 배포 전략을 각 플랫폼별로 정리해 드립니다.

1. 백엔드 서버 (/server - Ktor)

이 프로젝트의 server 모듈은 Ktor 프레임워크로 작성된 JVM 애플리케이션입니다.

배포 위치:

AWS: EC2(가상 서버)나 App Runner, ECS(컨테이너) 등에 Docker 이미지나 Jar 파일 형태로 배포합니다.

Google Cloud: Cloud Run이 가장 적합합니다. Ktor를 Docker 컨테이너로 감싸서 배포하면, 트래픽에 따라 자동으로 확장(Auto-scaling)됩니다.

Firebase/Supabase?

Firebase Hosting은 정적 파일(웹) 전용이라 Ktor 서버를 직접 올릴 순 없습니다. 다만, Cloud Run과 연결하여 서비스할 수 있습니다.

Supabase는 '서버'를 올리는 곳이라기보다, 이 Ktor 서버가 사용할 데이터베이스(PostgreSQL) & 인증(Auth) 저장소 역할을 합니다. 즉, Ktor 서버가 Supabase와 통신하는 구조가 됩니다.

2. 모바일 앱 (androidApp & iosApp)

사용자에게 앱을 전달하는 방식은 말씀하신 대로입니다.

Android:

배포: ./gradlew :composeApp:bundleRelease 명령어로 AAB(Android App Bundle) 파일을 생성합니다.

테스트: Firebase App Distribution에 업로드하여 내부 테스터들에게 배포합니다.

출시: Google Play Console을 통해 스토어에 심사 후 출시합니다.

iOS:

배포: Xcode에서 Archive를 수행하여 IPA 파일을 생성합니다.

테스트: TestFlight (Apple 공식) 또는 Firebase App Distribution을 통해 배포합니다.

출시: App Store Connect를 통해 스토어에 심사 후 출시합니다.

3. 웹 애플리케이션 (composeApp - Web)

이 프로젝트는 웹(Wasm/JS) 타겟도 포함하고 있습니다.

배포: ./gradlew :composeApp:wasmJsBrowserDistribution 등의 명령어로 HTML/JS/Wasm 정적 파일들을 생성합니다.

호스팅: 생성된 build/dist 폴더 내의 파일들을 Firebase Hosting, AWS S3 + CloudFront, Vercel 같은 정적 웹 호스팅 서비스에 업로드하면 전 세계에서 접속 가능합니다.

요약: 추천 아키텍처

가장 현대적이고 관리하기 쉬운 클라우드 구성을 추천해 드린다면 다음과 같습니다.

가장 현대적이고 관리하기 쉬운 클라우드 구성을 추천해 드린다면 다음과 같습니다.

구분 추천 서비스파일/형식

Server Google Cloud Run (Docker)Docker Image

DB/Auth Supabase (강력 추천)(SaaS)

Android Play Store / Firebase App Dist.aab / .apk

iOS App Store / TestFlight.ipa

Web Firebase Hosting html, js, wasm

이렇게 구성하면 서버 관리 부담을 최소화하면서 모든 플랫폼을 운영할 수 있습니다.


Discussion

Loading comments...