안녕하세요. 후르륵짭짭입니다.
사내 프로젝트를 하면서 일부를
KMM(Kotlin Multiplatform Moblie)를 하게 됐는데,
그 작업을 하면서 느낀 경험을 적어보려고 합니다.
** KMM이란 **
http://labs.brandi.co.kr/2021/11/02/jangsc.html
여기에 아주 친절하게 적혀 있는데,
간단하게, Pure한 Kotlin(java 코드와 Dependency가 걸려있지 않는,,, )을
IOS에서 Objc로 변형해서 FrameWork로 사용할 수 있게 해주는 것이다.
그래서 Android와 IOS개발자가 비즈니스 로직 부분에 대해서는 공통으로 개발 할 수 있게 되는 일을 만들 수 있다!
** Kotlin 라이브러리 적용하기 **
일단 안드로이드 개발자가 코드를 빌드해서 건내주면
Xcode에서는 간단하게 적용 할 수 있습니다.
1. 라이브러리를 추가
Frameworks, Libraries, and Embedded에서 " + "을 눌러서 추가 해줍니다.
2. 이런 오류가 발생 할 겁니다.
3. Build Setting에서 valid를 검색해서 No -> Yes로 변경 해줍니다.
4. Build Setting에서 Search Path를 라이브러리가 있는 곳으로 설정해줍니다.
** KMM의 장점 **
1. 자원 절약!
일단 가장 큰 장점은 확실히 IOS 개발자의 역할이 줄어 듭니다.
로직적인 하나의 복잡한 기능을 만들 때 IOS 개발자와 Android 개발자 모두 이해해야하는데,
안드로이드 개발자가 개발하고 IOS개발자는 오직 해당 함수만 호출해서 적용해주면 됩니다.
2. 간단한 라이브러리 적용
Cocoa pod 방식으로 KMM을 만들 수 있지만 위에 처럼 단순히 라이브러리로 뽑아서
파일만 교체 해주는 방법은 정말 간단하고 쉽게 라이브러리를 적용할 수 있습니다.
** KMM의 단점 **
1. 눈물나는 디버깅 작업
정말,,, IOS에서는 디버깅 하는게 쉽지 않습니다.
안드로이드에서는 런타임시 잘 되는 것이 IOS는 디버깅이 되지 않습니다.
그냥 해당 함수에서 죽는 정도만 알고,,, Kotlin의 깊은 내용까지는 알기 쉽지 않습니다.
그래서 IOS에서 주는 로그로만 판단해야합니다....
코틀린 어느 부분에서 죽는지 짐작하기 쉽지 않습니다...
2. Thread에 너무 취약
정말 이거 심각합니다!
Kotlin 객체는 생성 시점의 Thread에서만 사용해야지 죽지 않습니다.
즉, 다른 Thread에서 해당 객체에 접근하면 죽습니다.
그래서 안드로이드 개발자가 ThreadLocal, Syncronize 등 다양한 작업을 해줘야합니다.
그래도 안되면 객체를 주입해주는 방식으로 해주던지, 다양한 방식으로 해결을 해야합니다.
** 총평 **
모든 비즈니스 로직을 KMM을 사용하는 것은 오히려 비용이 더 많이 들 것 같습니다.
따라서 특정 모듈만 KMM 작업하는 것을 추천합니다.
정말 Input을 주면 Output만 내주는 그런 모듈만 적용하는 것이 바람직 하다고 생각합니다.
자원을 생각해서,,, 모든 비즈니스 로직을 KMM으로 해야지 생각하다간 안드로이드 개발자와 IOS 개발자 모두
디버깅에 잡혀서 아무것도 못 할 수 있습니다.
그래서 이 KMM이 혁신이긴 한데,,, 최고다라고 말하기는 쉽지 않습니다.
오히려 자원을 생각해서 프로젝트를 멀티 플랫폼을 생각한다면 React Native나 플러터를 추천드립니다.
댓글