Kotlin Multiplatform을 활용한 실시간 AI 프롬프트 향상 도구 구축하기
요약
Kotlin Multiplatform(KMP)을 사용하여 Android와 iOS 모두에서 작동하는 실시간 AI 프롬프트 향상 키보드인 'Prompt AI Keyboard'를 구축한 사례를 소개합니다. KMP를 통해 비즈니스 로직을 공유하면서도 각 플랫폼의 네이티브 키보드 API와 UI 특성을 유지하는 아키텍처를 구현했습니다.
핵심 포인트
- KMP를 활용해 비즈니스 로직과 네트워크 통신 코드를 Android/iOS 간 공유
- 플랫폼별 네이티브 키보드 확장(Keyboard Extension) API를 통한 UI 최적화
- Gemini API를 연동하여 실시간 프롬프트 구조화 및 컨텍스트 추가 기능 제공
- 키보드 환경의 제한된 리소스와 네트워크 지연 시간 문제를 해결하는 설계
모바일 앱을 구축한다는 것은 보통 두 가지 경로 중 하나를 선택하는 것을 의미합니다: 별도의 네이티브 코드베이스를 유지하거나, 완전히 공유된 솔루션을 통해 플랫폼별 특화된 경험을 희생하는 것입니다.
저의 최근 사이드 프로젝트로, 저는 Kotlin Multiplatform이 일반적인 CRUD 앱보다 더 복잡한 것 — 즉, Android와 iOS 모두를 위한 커스텀 키보드 — 을 구축하는 데 도움이 될 수 있을지 탐구하고 싶었습니다.
그 결과물은 Prompt AI Keyboard입니다. 이는 사용자가 ChatGPT, Claude, Gemini, Midjourney, 그리고 GitHub Copilot과 같은 AI 도구들을 위해 더 나은 프롬프트를 작성할 수 있도록 돕는 키보드입니다.
아이디어
AI 도구들은 강력하지만, 출력물의 품질은 종종 프롬프트가 얼마나 잘 작성되었는지에 따라 달라집니다.
저는 제가 끊임없이 프롬프트를 다시 작성하고 있다는 사실을 깨달았습니다:
- 더 많은 컨텍스트 (Context) 추가
- 원하는 형식 설명
- 목표 명확화
- 지침을 더 구조적으로 만들기
그 과정은 보통 다음과 같았습니다:
- 거친 아이디어 작성
- 프롬프트 향상 도구로 복사
- 수동으로 다시 작성
- 개선된 프롬프트를 다시 복사
저는 이러한 마찰을 제거하고, 사람들이 이미 타이핑을 하고 있는 바로 그 위치에서 프롬프트 개선 기능을 사용할 수 있게 만들고 싶었습니다.
아키텍처 개요
주요 과제는 가능한 한 많은 코드를 공유하면서 두 플랫폼 모두에서 자연스럽게 작동하는 키보드를 구축하는 것이었습니다.
아키텍처는 다음과 같이 구성됩니다:
- Kotlin Multiplatform 공유 모듈
- Android 및 iOS용 네이티브 키보드 확장 (Keyboard Extensions)
- Firebase Cloud Functions 백엔드
- Gemini API 연동
- 인앱 결제 (In-app purchase) 검증 및 사용량 추적
공유 KMP 레이어는 다음을 처리합니다:
- 프롬프트 처리 로직
- AI 요청 준비
- 데이터 모델
- 비즈니스 규칙
- 네트워크 통신
플랫폼별 코드는 다음을 처리합니다:
- 키보드 UI
- 입력 처리
- 시스템 키보드 API
- 플랫폼 생명주기 (Lifecycle) 관리
왜 Kotlin Multiplatform인가?
이와 같은 프로젝트를 위해 저는 다음을 원했습니다:
- 하나의 공유된 비즈니스 로직 레이어
- 중복 코드 감소
- 네이티브 UI 및 플랫폼 통합
- 두 플랫폼 모두에서 빠르게 반복 (Iterate) 할 수 있는 능력
KMP는 코드 공유 (Code sharing)와 네이티브 기능 사이에서 적절한 균형을 제공했습니다.
UI를 완전히 공유하는 방식과 달리, 키보드 인터페이스는 네이티브 상태를 유지합니다. Android와 iOS는 키보드 확장 (Keyboard extension) API와 사용자 기대치가 매우 다르기 때문입니다.
키보드 구축의 과제
키보드는 단순한 또 다른 모바일 화면이 아닙니다.
제가 직면했던 몇 가지 과제는 다음과 같습니다:
1. 제한된 리소스
키보드 확장 (Keyboard extensions)은 일반 애플리케이션보다 더 엄격한 제한을 받습니다.
키보드는 즉각적으로 반응해야 하므로 모든 작업은 경량 (Lightweight)이어야 합니다.
2. 플랫폼 차이
Android와 iOS는 키보드를 처리하는 방식이 매우 다릅니다.
다음과 같은 요소들이 플랫폼별 솔루션을 요구했습니다:
- 텍스트 삽입 (Text insertion)
- 키보드 생명주기 (Keyboard lifecycle)
- 권한 (Permissions)
- 백그라운드 실행 (Background execution)
- UI 제약 사항 (UI constraints)
3. 지연 시간 (Latency)
AI 기능은 네트워크 지연을 유발합니다.
사용자 경험이 빠르게 느껴지도록 만드는 것이 과제였습니다:
- 요청 페이로드 (Request payloads) 최적화
- UI 반응성 유지
- 실패 상황의 우아한 처리 (Handling failures gracefully)
- 생성 중 유용한 피드백 제공
배운 점
이 프로젝트를 구축하면서 Kotlin Multiplatform이 단순한 모델이나 유틸리티를 공유하는 데만 유용한 것이 아니라는 점을 확인했습니다.
KMP는 다음과 같은 더 복잡한 제품도 지원할 수 있습니다:
- 비즈니스 로직은 공유됨
- 플랫폼 통합은 네이티브로 유지됨
- 사용자 경험은 각 생태계에 맞게 최적화됨
가장 큰 교훈은 모바일 제품을 만드는 데 있어 가장 어려운 부분은 종종 코드 그 자체가 아니라, 플랫폼의 제한 사항을 이해하고 그에 맞춰 설계하는 것이라는 점입니다.
다음 단계는?
저는 Prompt AI Keyboard를 계속 개선하고 있으며, AI가 일상적인 워크플로 내에서 사용자에게 직접 도움을 줄 수 있는 새로운 방법들을 탐색하고 있습니다.
현재 탐색 중인 아이디어들은 다음과 같습니다:
- 더 많은 AI 기반 글쓰기 액션
- AI 모델별 더 나은 커스터마이징
- 특정 기능에 대한 오프라인 기능
- 더 많은 통합 (Integrations)
개발자분들의 피드백을 기다립니다:
- 커스텀 키보드를 만들어 본 적이 있나요?
- 이러한 유형의 프로젝트를 위해 Kotlin Multiplatform을 선택하시겠습니까?
- 키보드 내에서 직접 사용할 수 있다면 어떤 AI 기능이 유용할까요?
읽어주셔서 감사합니다!
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기