Android - KMM (Kotlin MultiPlatform Mobile)

Park Suyong·2022년 4월 4일
0

Android Dev

목록 보기
6/7

KMM (Kotlin Multiplatform Mobile)

KMM은 JetBrains에서 제공하는 모바일 크로스 플랫폼 SDK 이다. KMM을 통해 iOS 및 AOS 어플리케이션에서 모두 동일한 비즈니스 로직을 사용할 수 있다. KMM은 Kotlin의 멀티 플랫폼 기능을 사용하며, 2020년 8월에 알파 버전으로 출시 되었다.

코틀린 멀티플랫폼

정의

KMM(Kotlin Multiplatform Mobile)은 크로스 플랫폼 모바일 앱 생성을 단순화할 수 있도록 설계된 SDK 이다. 기존에 크로스 플랫폼 언어로 존재했던 Flutter, React Native 와는 크로스 플랫폼 개발을 돕는다는 점에서 동일하나, 기존 플랫폼 언어를 그대로 사용할 수 있다는 점에서 큰 차이를 보이게 된다.

AOS 및 iOS는 공통점이 많다. 특히 데이터 관리, 분석, 인증 등의 비즈니스 로직은 동일한 경우가 다반사다. 하지만, UI 측면에서는 많은 차이점을 보일 수 있다. 이러한 이유로 플랫폼 간 어플리케이션의 일부는 공유하되 다른 부분은 완전히 분리한 상태로 유지하는 것이 일반적이다.

KMM을 사용한다면 이 부분에서 유연성을 확보함과 동시에 네이티브 프로그래밍의 이점을 유지할 수 있다. AOS와 iOS의 공통 로직을 사용하고 필요한 경우 플랫폼 별로 코드를 작성하여 앱을 구현하면 된다.

특징

Android Studio에서 KMM plugin을 추가하면 KMM 프로젝트를 생성할 수 있다.

프로젝트는 3가지 모듈로 구분할 수 있다.

  • androidApp
    • AOS 앱에 대한 모든 기본 코드를 포함한다.
  • iosApp
    • iOS 앱에 대한 모든 기본 코드를 포함한다.
  • shared
    • AOS 및 iOS 플랫폼 모두에서 사용할 모든 공유 코드를 포함한다. 비즈니스 로직이 주로 여기에 포함된다.
    • commonMain
      • 각 플랫폼이 순수하게 공유하는 로직이 담긴 부분이다. 순수 Kotlin으로 작성한다.
    • androidMain
      • Android 플랫폼에 특화된 로직이 담기는 부분이다. Android 프레임워크에 접근할 수 있다.
    • iosMain
      • iOS 플랫폼에 특화된 로직이 담기는 부분이다. iOS 프레임워크에 접근할 수 있다.
    • commonMain에 작성되는 로직 중에서 플랫폼 의존적인 코드가 발생하게 될 경우 expect 키워드를 통해 commonMain에 정의하고, androidMain 혹은 iosMain 영역에 actual 키워드를 통해 구현하면 된다. (Android의 경우 SharedPreference가 있을 수 있겠다.)
    • shared 영역은 순수 Kotlin 영역으로, KMM을 지원하는 라이브러리를 사용해서 코드를 작성해야 한다. 예를 들어, Ktor, kotlinx.serialization, SQLDelight, Koin 등이 있다.

장점

크로스 플랫폼의 장점을 갖고 있다. 다른 모바일 플랫폼에 대한 동일한 코드를 작성하고 유지보수 하는 시간이 줄어들게 된다. 여기에, KMM을 사용하게 되면 네이티브 프로그래밍의 이점과 유연성을 동시에 가져갈 수 있다. 따라서, Flutter나 React Native의 크로스 플랫폼으로 인한 장점과 동시에 Kotlin 네이티브 프로그래밍의 장점을 동시에 갖게 되는 것이다.

또한, KMM은 개별 플랫폼 영역에서 각 플랫폼 의존적인 코드를 작성하게 되기 때문에 플랫폼에 따른 성능 이슈는 발생하지 않는다.

단점

iOS 개발자가 공통 영역의 코드를 확인하기 위해서는 Kotlin 코드를 확인할 줄 알아야 한다. 개별적으로 플랫폼 개발자가 있어야만 개발이 가능하다. 또한, KMM은 아직 알파 버전이기 때문에, 그 안정성이 크게 검증되었다고 보기 어렵다.

참고

1. Native App 개발의 이점
  • Seamless Performance & Fast Operating Speed (원활한 성능과 빠른 처리 속도)

    • 앱 개발자는 기본적으로 모든 디바이스에서 개발한 앱이 정상적으로 동작하는지 확인해야 한다. 이를 위해서는 AOS, iOS 플랫폼 각각에 의존적인 API 등을 사용해야 함을 말한다. 다만, 네이티브 개발을 진행하고 있는 경우 이는 이미 해당되는 요소이다. 따라서, 이로 인한 문제가 발생하지 않으며 성능이 원활하고 빠르다.
  • Great UI/UX (뛰어난 UI/UX)

    • 하나의 OS를 위한 앱을 디자인하는 경우, 기술적인 관점에서 그래픽의 크기, 장치의 요구 사항 등에 따라 변경할 필요가 없어지므로 UI/UX에서 여러 이점을 얻을 수 있다. 또한, OS 고유의 사용자 친화적인 디자인 요소를 사용할 수 있게 된다. 이를 통해 사용자는 직관적인 인터페이스를 사용할 수 있게 된다.
  • Better Security and Reliability (더 나은 보안과 안정성)

    • 기본 응용 프로그램은 OS에 의해 잘 보호되게 된다.
  • Up-to-Date SDK (최신 SDK 지원)

    • Google과 Apple은 최신 SDK를 지속적으로 관리, 유지한다. SDK는 업데이트할 때마다 빠르게 수정 및 개선된다. 이를 통해 네이티브 개발자는 버그 수를 최소화 시키고 향상된 안정성을 보장할 수 있다.
  • Easy to Launch in the App Stores (앱 스토어에 앱을 등록하고 시작하는 과정이 용이함)

    • 앱스토어에 앱을 등록할 때 앱은 거부될 수 있다. 이런 상황을 피하기 위해서는 각 플랫폼의 가이드라인을 준수해야 한다. 네이티브 앱은 코드가 기본적으로 가이드라인을 준수하기 때문에 비교적 앱을 출시하는 데 용이하다.
  • Hardware Features (하드웨어 기능)

    • 네이티브 앱은 카메라, GPS, 마이크 등에 대해 전체 액세스 권한을 갖게 된다. 따라서, 사용자에게 더욱 고급 기능을 개발해 제공할 수 있다.
  • Access to the Pool of Expertise (전문 지식 풀에 대한 접근)

    • 크로스 플랫폼 앱에 비해 네이티브 앱은 커뮤니티 등이 더욱 활성화 되어 있다. 따라서, 그 만큼 전문 지식을 가진 사람 또한 많다. 결론적으로 개발 과정에서 많은 도움을 받을 수 있으며, 개발 속도는 빨라지고 오류 가능성은 낮아지게 된다.
  • Scalability (확장성)

    • 확장성이란, 앱의 성장을 관리할 수 있는 가능성이다. 즉, 증가된 트래픽, 사용자 및 새로운 기능 구현 등이 포함되게 된다. 앱의 아키텍쳐를 통해 코드를 크게 변경하지 않고도 더 많은 트래픽을 확보할 수 있다. 하지만 크로스 플랫폼 앱은 AOS, iOS 사용자를 모두 지원해야 한다. 따라서, 고품질 성능과 사용자 증가에 따른 충돌을 배제해야 하기 때문에 확장이 더욱 복잡해지게 된다. 하지만 네이티브 앱은 각각의 플랫폼에만 초점을 맞추게 되므로 데이터 흐름을 분할할 수 있는 기회가 더 많기 때문에 작업이 더욱 쉽다.
  • Advanced Customization (고급 사용자 정의)

    • 개발자는 각각의 플랫폼에만 최적화 시키면 되기 때문에 각 플랫폼에 고도화된 맞춤형 앱을 개발할 수 있다.

References

알파 버전으로 전환되는 Kotlin Multiplatform Mobile

KMM(Kotlin Multiplatform Mobile)

네이티브 모바일 앱 개발의 이점

profile
Android Developer

0개의 댓글