본문 바로가기
카테고리 없음

Android 개발자가 KMP 안건에 들어가 보니 (공통 모듈, iOS 연동, 안건 수요)

by 오오지마낭인 2026. 10. 3.

작년 여름에 소개받은 안건 설명서에 Kotlin Multiplatform이라는 단어가 있었습니다. 면담에서 KMP 경험이 있냐고 묻길래, 개인적으로 샘플 앱을 만들어 본 정도라고 솔직하게 말했습니다. 그런데도 합격했습니다. 나중에 들어보니 지원자 중에 실무 경험자가 거의 없었다고 하더군요.

들어가 보니 팀 구성이 독특했습니다. Android 개발자 두 명, iOS 개발자 두 명, 그리고 그 사이에 공통 모듈이 있었습니다. 저는 Android 담당으로 들어갔는데, 일주일쯤 지나자 iOS 개발자들이 제 자리로 질문하러 오기 시작했습니다. 공통 모듈이 Kotlin으로 되어 있으니 Kotlin 아는 사람한테 물어보는 게 빨랐던 거죠. 덕분에 점심을 제때 먹은 날이 별로 없었습니다.

Android와 iOS를 둘 다 만져 본 입장에서, KMP 현장이 실제로 어떻게 돌아가는지 적어봅니다.

 

공통 모듈

KMP에서 공통 모듈에 들어가는 건 보통 화면 아래쪽입니다. API 통신, 데이터 저장, 비즈니스 로직을 Kotlin으로 한 번 쓰고, 화면은 플랫폼별로 따로 만듭니다. 제가 있던 현장은 통신에 Ktor, 로컬 DB에 SQLDelight를 썼고, 화면은 Android가 Jetpack Compose, iOS가 SwiftUI였습니다.

처음 몇 주는 정말 편했습니다. API 응답 모델을 고치면 양쪽에 한 번에 반영되니까요. 예전 현장에서는 같은 API를 Android와 iOS가 각자 구현하다가, 한쪽만 필드 이름을 틀려서 릴리스 전날 밤에 발견한 적이 있습니다. 그런 사고가 여기서는 생기지 않았습니다.

대신 회의가 늘었습니다. 날짜 포맷 같은 사소한 것까지 공통으로 둘지 플랫폼별로 둘지 의견이 갈렸고, 플랫폼마다 구현이 달라야 하는 부분은 expect/actual로 나눠야 했습니다. 한동안은 저 논의로 오후가 통째로 날아간 적도 있었습니다.

지나고 보니 공통으로 두는 범위는 좁게 시작하는 게 맞았습니다. 처음부터 넓게 잡으면 나중에 플랫폼별 예외 처리가 계속 붙습니다. 저희 팀도 통신과 모델부터 옮기고, 안정된 뒤에 화면 로직을 조금씩 넣는 식으로 방향을 바꿨습니다.

iOS 연동

KMP 현장에서 고생을 먼저 느끼는 건 iOS 개발자들입니다. 공통 모듈은 iOS에서 프레임워크로 불러와 쓰는데, Kotlin 코드가 Objective-C를 거쳐 Swift로 넘어오면서 모양이 조금씩 어색해집니다.

제일 많이 들은 불만은 비동기 처리였습니다. Kotlin의 suspend 함수와 Flow가 Swift에서 쓰기 불편한 형태로 나오니, iOS 담당이 래퍼 코드를 계속 짜고 있었습니다. 결국 SKIE를 도입해서 Swift의 async/await와 AsyncSequence로 바로 다룰 수 있게 했는데, 그 주 금요일에 iOS 개발자가 커피를 사 왔던 게 기억납니다.

빌드 시간도 문제였습니다. 공통 모듈을 조금만 고쳐도 iOS 쪽은 Kotlin/Native 빌드를 다시 돌려야 해서, 초반에는 수정 한 번에 몇 분씩 기다렸습니다. Xcode에서 Kotlin 코드 안으로 따라 들어가며 디버깅하기도 불편합니다. 그러다 보니 공통 모듈에서 나온 버그는 Android 쪽에서 재현해서 고치는 게 팀의 암묵적인 규칙이 됐고, 그 일은 자연스럽게 제 몸이 됐습니다.

Swift 코드를 읽을 수 있었던 게 여기서 큰 도움이 됐습니다. iOS 개발자가 무엇을 불편해하는지 바로 이해할 수 있으니, 공통 모듈 API를 설계할 때부터 Swift에서 쓰기 편한 모양을 고려할 수 있었거든요. KMP 현장에서 양쪽을 다 아는 사람은 생각보다 통역 역할을 많이 하게 됩니다.

안건 수요

일본에서 KMP 안건은 아직 많지 않습니다. 에이전트 사이트에서 검색해 보면 Android나 iOS 단독 안건보다 훨씬 적게 나옵니다. 그런데 지원자는 더 적습니다. 제가 실무 경험 없이 합격한 것도 결국 그 때문이었습니다.

제가 본 KMP 안건은 대부분 Android 앱이 이미 있는 회사가 iOS 앱을 새로 만들거나, 양쪽 앱의 로직이 따로 놀아서 하나로 합치려는 경우였습니다. 어느 쪽이든 기존 Android 코드를 공통 모듈로 옮기는 작업이 들어가서, 면담에서도 KMP 자체보다 Android 경력을 더 자세히 물어봤습니다.

그래서 Android 개발자라면 비교적 쉽게 들어갈 수 있는 분야라고 생각합니다. 작은 앱 하나를 KMP로 만들어 iOS 시뮬레이터에서 돌려보기만 해도 면담에서 할 이야기가 생깁니다. 저도 그 샘플 앱 이야기를 꽤 길게 했습니다. 알고 보니 면담관도 비슷한 샘플을 만들어 본 적이 있어서, 어디서 막혔는지로 한참 이야기가 이어졌습니다.

다만 도구가 아직도 빨리 바뀝니다. 제가 들어갔을 때 쓰던 설정 중 몇 가지는 1년도 안 돼서 더 나은 방법으로 바뀌었고, 그때마다 팀에서 따라갈지 말지를 두고 또 회의를 했습니다. 피곤한 건 사실입니다. 그래도 저는 다음 안건에 KMP가 있으면 먼저 손들 생각입니다.