Kotlin Weekly

Kotlin Weekly # -369 "맥도날드의 KMM선택"

베블렌 2023. 8. 31. 21:45

8월 4주차에는

 

An update on Jetpack Compose Accompanist libraries — August 2023

 

An update on Jetpack Compose Accompanist libraries — August 2023

Here is an update on Jetpack Compose Accompanist libraries — August 2023

medium.com

Android Weekly에도 게시된 Jetpack Compose에서 일부 라이브러리의 폐지와 기능개발이 complete 되어 더이상의 업데이트가 없다는 글도 있었습니다.

 

 

 

하지만 저는 현재 크로스플랫폼에 관심을 더 가지고있어

맥도날드의 KMM 선택과 관련된 글을 작성하겠습니다.

 

https://medium.com/mcdonalds-technical-blog/mobile-multiplatform-development-at-mcdonalds-3b72c8d44ebc

 

Mobile multiplatform development at McDonald’s

The adoption of a responsive, native user interface for the Global Mobile App is enabling McDonald’s to build a codebase that can be shared…

medium.com

 

맥도날드에서 Global Mobile App codebases의 코드량을 줄이기위해 많은 노력을 해왔는데

Web기반 솔루션은 수준이하의 결과를 사용자에게 제공했습니다.

 

성능 문제에 대한 해결책은 Native로 개발하는 것이지만, 이로 인해 두개의 플랫폼 모두 동일한 비즈니스 로직의 구현이 필요했고, 새로운 기능이 추가될때마다 개발팀들은 많은 자원을 사용했습니다.

 

따라서 맥도날드의 개발팀은 플랫폼을 최신상태로 유지한체 비즈니스 로직을 2번 개발하는 것을 피할수 있는

responsive한 Native UI 제공 솔루션이 필요했습니다.

 

 

 

KMM(Kotlin Multipartform Mobile) 이란?

 

Kotlin Multiplatform Mobile( KMM )은 Kotlin 언어를 기반으로 한 멀티 플랫폼 개발 프레임 워크입니다. KMM은 기존에 출시되었던 크로스 플랫폼 언어 flutter, React-Native 와는 크로스 플랫폼 개발을 도와주는 점에서 동일합니다. 다만, 개발도구와 언어의 사용에서 기존 플랫폼 개발 언어를 사용, 동시에 네이티브 프로그래밍의 유연성과 이점을 유지한다는 차이점이 있습니다.

 

 

위 글에서 제공한 KMM의 장점으로는

 

  • 1. 단일 코드베이스 제공
  • 2. 두 플랫폼에 대한 unit tests를 한곳에서 처리해 테스트 부담 감소
  • 3. 라이브러리 내의 native simulation, emulation, hardware 를 통해 데이터베이스 및 네트워킹 테스트 가능

 

KMM의 통합과제로는

 

  • 1. iOS 개발자들이 kotlin 언어에 대한 지식이 필요하다. But, swift와 유사한 점이 많아 학습 곡선이 그리 크지 않다.
  • 2. 특정 라이브러리에 대한 Kotlin 버전이나 대응 버전이 없을수 있다. But, expect/actual code paradigm을 통해 플랫폼별 코드로 해결 가능하다.

    * expect/actual 패러다임 : Kotlin의 멀티플랫폼 프로젝트(KMM)에서 사용되는 코드 공유 전략
    ## 추후 작성, 참고글 : https://discuss.kotlinlang.org/t/purpose-of-expect-actual/19221/2

  • 3. 일반적으로 사용되는 타사 라이브러리의 Kotlin 버전을 사용할 경우 기능 누락이 가능하다. But, KMM의 성장에 따라 해결될 수 있는 문제다.
  • 4.코루틴을 이용한 비동기 메서드 호출을 사용하는 라이브러리의 경우, 이전 Kotlin 메모리 모델의 문제로인한 충돌이 있을수있다. But 대부분의 경우 최신 버전의 Kotlin으로 업데이트하면 문제를 방지할 수 있다.

 

Enterprise 애플리케이션을 위한 KMM

 

KMM의 도입 여부를 결정할 때, 개발 단계와 애플리케이션의 설계 방식을 고려해야 합니다.

애플리케이션이 종속성 주입 중심(아마도 DI프레임워크인 Hilt, Dagger를 말하는듯 합니다.)에 중점을 둔다거나 clean architecture를 이용한다면, KMM을 사용하기에 적합하다고 볼 수 있습니다.

프로젝트 초기 단계에서는 KMM을 활용해 네트워킹과 데이터 저장 등의 공통 기능을 개발함으로써 중복 코드를 최소화할 수 있습니다. 이미 Mature한 프로젝트에서도 KMM을 통해 새로운 기능을 통합하게 되면, 해당 기능을 한 군데에서만 개발 및 테스트하면 되므로 각 플랫폼별 테스트에 따른 부담이 크게 감소합니다.

 


맥도날드가 KMM을 사용하는 방식

 

  • 맥도날드의 경우 고유한 요구사항과 구성을 가진 많은 지역에서 서비스를 제공하고 있기 때문에, 메뉴의 구조가 각 시장 서비스의 복잡성을 반영해야합니다.
  • 현지화된 데이터와 제품을 각 플랫폼에 올바르게 표시하는 데 필요한 비즈니스 로직 외에도 파싱 및 스토리지 로직을 한 곳에서 개발할 수 있습니다.
  • 또한 현지화, 수수료, 구성 로직과 같이 메뉴 항목을 표시할때 고려할 사항이 많은데, KMM은 이러한 기능을 개발하는데 필요한 시간과 개발자들의 학습시간을 줄일 수 있습니다.
  • KMM 라이브러리의 로직과 기능을 독립적으로 유지하여 전체를 빌드하지 않고도 데이터베이스 및 비즈니스 로직에 대한 end to end testing이 가능합니다.
  • 자세한 프로세스 추가 설명은 본문의 To ensure ~ 부터와 그림을 참조

 

정리

 

글로벌기업 맥도날드에서도 사용을 시작함에 따라 Flutter와 React Native같은 기존의 크로스 플랫폼 방식의 한계를 해결하는 KMM이 자리를 차지하기 시작했다. KMM의 성장에 따라 라이브러리 호환버전문제가 해결되면 미래의 개발 트렌드가 될 수도 있는 포텐을 가지고 있을수도?
그런데 그 부분이 여전히...
다음 프로젝트는 가능하다면 KMM으로 도전해 보는 것도 좋을 것 같다.

 

 

 

참고자료 :

https://kotlinlang.org/lp/multiplatform/

 

Kotlin Multiplatform for Cross-Platform Development

Share code on your terms and for different platforms.

kotlinlang.org

 

 

 

 

http://kotlinweekly.net/

 

** Kotlin Weekly **

 

kotlinweekly.net