어쩌다보니 iOS 개발자

iOS 앱을 Android 앱으로 포팅해보자 - (1) 프로젝트 세팅 본문

AI로 앱 개발

iOS 앱을 Android 앱으로 포팅해보자 - (1) 프로젝트 세팅

엔디엘(no Dream no Life) 2025. 6. 4. 08:00

안녕하세요. 엔디엘입니다.

 

이번 시간에는 안드로이드 앱 프로젝트를 세팅해볼 시간을 가질 예정입니다.

그전에 우선 기존 iOS가 어떤 기능이 있고, 어떤 구조로 개발되어 있는지부터 파악해야겠지요?

저는 당연히 제가 개발했으니까 어느 정도는 알고 있지만, 제가 그걸 작성할 생각은 전혀 없습니다..

네.. Claude Desktop - MCP FileSystem을 이용하여 분석을 맡길 예정입니다.

 

분석 결과를 보시려면 더보기를 클릭해주세요. ↓↓↓↓↓

더보기
더보기

iOS 프로젝트 분석 결과

DriveMaker 프로젝트는 운전 경로를 생성하고 관리하는 iOS 앱입니다. 상당히 체계적으로 구성된 Swift 프로젝트네요!

🏗️ 프로젝트 구조 및 아키텍처

1. 아키텍처 패턴

  • TCA (The Composable Architecture) 사용
  • Redux 스타일의 단방향 데이터 플로우
  • State, Action, Reducer 패턴으로 상태 관리

2. 주요 기술 스택

  • 언어: Swift 5.0
  • 프레임워크: SwiftUI, MapKit, CoreLocation
  • 외부 라이브러리:
    • Composable Architecture (상태 관리)
    • Alamofire (네트워킹)
    • KeychainSwift (보안 저장)
    • KakaoSDK (카카오맵 연동)

3. 프로젝트 구조

 
DriveMaker/
├── App/                    # 앱 메인 구조
├── Assets.xcassets/        # 리소스 파일들
├── Common/                 # 공통 모듈
├── Components/             # 재사용 컴포넌트
├── Core/                   # 핵심 비즈니스 로직
│   ├── Clients/           # API, 인증 클라이언트
│   └── AppState/          # 앱 상태 관리
├── Features/              # 주요 기능들
├── Models/                # 데이터 모델
├── Screens/               # 화면별 구성
│   ├── SplashScreen/
│   ├── LoginScreen/
│   ├── MainTabScreen/
│   ├── RouteMapTab/
│   ├── RouteListTab/
│   ├── NavigationScreen/
│   └── SettingsTab/
└── Utils/                 # 유틸리티 함수들

🎯 주요 기능

1. 인증 시스템

  • Apple 로그인 지원 (AppleAuthClient.swift)
  • OAuth 기반 인증 (OAuthLoginRequest.swift)
  • JWT 토큰 관리 (TokenManager.swift)
  • Keychain을 통한 보안 저장

2. 경로 관리 시스템

  • 경로 생성 및 편집
  • 웨이포인트 관리 (RoutePointDTO)
  • 폴리라인 세그먼트 처리 (PolylineSegmentDTO)
  • 거리 및 예상 시간 계산

3. 지도 및 네비게이션

  • MapKit 기반 지도 표시
  • 앱 내 네비게이션 기능
  • 음성 안내 (TTS)
  • 카카오네비 연동

4. 탭 기반 UI

  • : 메인 대시보드
  • 경로 목록: 저장된 경로들
  • 경로 생성: 새로운 경로 만들기
  • 설정: 사용자 설정 및 계정 관리

🔧 기술적 특징

1. 상태 관리

 
swift
@Reducer
struct AppFeature {
    struct State: Equatable {
        var appStatus: AppStatus = .splash
        var splashState = SplashFeature.State()
        var loginState = LoginScreenFeature.State()
        var mainTabState = MainTabFeature.State()
    }
}

2. API 클라이언트

  • 완전한 RESTful API 지원
  • 토큰 기반 인증
  • 에러 핸들링 및 로깅
  • https://api.xxxx.xxxx 서버 사용

3. 경로 데이터 모델

 
swift
struct DriveRouteResponse: Codable, Identifiable {
    let id: Int
    let title: String
    let totalDistance: Double  // 미터 단위
    let estimatedTime: Int     // 초 단위
    let points: [RoutePointResponseDTO]
    let polylineSegments: [PolylineSegmentResponseDTO]?
}

📱 앱 플로우

  1. 스플래시 → 로그인 상태 확인
  2. 로그인/회원가입 → Apple 계정 연동
  3. 튜토리얼 → 첫 사용자 안내
  4. 메인 탭 → 경로 관리 기능들
  5. 경로 생성 → 지도에서 경로 선택
  6. 네비게이션 → 실제 길안내 실행

🎨 UI/UX 특징

  • 다크 모드 기본 설정
  • 네이티브 SwiftUI 사용
  • 탭 기반 네비게이션
  • 모달 및 네비게이션 스택 조합
  • 반응형 디자인

🚀 배포 설정

  • Bundle ID: com.xxxx.xxxxxx
  • 최소 지원 버전: iOS 17.5+
  • 타겟 디바이스: iPhone 전용
  • 버전: 1.0.0

💡 프로젝트의 강점

  1. 체계적인 아키텍처: TCA를 통한 예측 가능한 상태 관리
  2. 모듈화된 구조: 기능별로 잘 분리된 코드
  3. 완전한 API 연동: 백엔드와의 완전한 연동
  4. 사용자 경험: 직관적인 UI/UX
  5. 확장성: 새로운 기능 추가가 용이한 구조

이 프로젝트는 실제 출시 가능한 수준의 완성도를 가진 드라이브 경로 관리 앱으로 보입니다! 혹시 특정 부분에 대해 더 자세히 알고 싶으시거나, 개선점이나 문제점에 대해 논의하고 싶으시다면 말씀해 주세요.

 

제 기준에는 꽤 상세하게 잘 분석해준 것 같습니다. 어떤 프로젝트인지 대략적으로 한번에 파악이 되네요.

 

그럼 이제 안드로이드 프로젝트를 생성하고 세팅해보겠습니다.

  1. 우선 안드로이드 앱 기본 프로젝트를 생성했습니다.
  2. iOS 앱 프로젝트 기반으로 안드로이드 앱 개발을 하려고 하는데, 앱 개발 체크리스트를 정해달라고 Claude에게 요청하기.

제가 앞서 글을 작성할 때 모든 플랫폼을 개발하기 전에 앱 개발 체크리스트를 보고 개발 정책을 정해놓고 개발을 진행하면 된다고 말씀드렸습니다. 그래서 저는 기존 iOS 프로젝트를 안드로이드로 그대로 포팅이 문제없이 잘 되는 안드로이드 앱 개발 체크리스트를 작성해달라고 요청했습니다.

 

결과 보러가기 ↓↓↓↓↓

더보기
더보기

🚗 DriveMaker Android 포팅 체크리스트 (확정)

1. 📋 프로젝트 정의 및 기획

프로젝트 목표 설정

  • iOS 기출시 앱의 안드로이드 버전 개발
  • 기존 사용자 데이터 호환성 유지 (동일 API 서버)
  • 안드로이드 사용자층 확장

비즈니스 모델

  • iOS와 동일한 무료 모델
  • Google Play 정책 준수
  • 기존 사용자 계정 연동 지원

2. 🛠️ 기술 스택 및 플랫폼 선정

플랫폼 전략

  • 네이티브 안드로이드 (Kotlin + Jetpack Compose)
  • 최소 지원 버전: Android 7.0 (API 24)
  • 타겟 SDK: Android 14 (API 34)

개발 환경

  • Android Studio Hedgehog 이상
  • Gradle Kotlin DSL
  • ktlint + detekt

3. 🏗️ 아키텍처 및 설계 패턴

아키텍처 선정

  • MVIKotlin + Clean Architecture
  • 멀티모듈 구조 (iOS Feature 구조 대응)
 
app/
├── app/                    # 메인 앱 모듈
├── core/
│   ├── common/            # 공통 유틸
│   ├── network/           # 네트워크 모듈
│   ├── database/          # 데이터베이스
│   └── design-system/     # 디자인 시스템
├── feature/
│   ├── auth/              # 인증 (로그인/회원가입)
│   ├── route-map/         # 경로 생성
│   ├── route-list/        # 경로 목록
│   ├── route-detail/      # 경로 상세
│   ├── navigation/        # 네비게이션
│   └── settings/          # 설정
└── shared/                # 공유 모델

의존성 주입

  • Hilt

4. 🧠 상태 관리 및 데이터 흐름

상태 관리

  • MVIKotlin (TCA 스타일 구현)
  • Kotlin Flow + StateFlow
  • 단방향 데이터 플로우

5. 🧭 네비게이션 및 라우팅

네비게이션

  • Navigation Component with Compose
  • Bottom Navigation (메인 탭)
  • 딥링킹 지원 (xxxx:// 스키마)

6. 💾 데이터 저장 및 관리

로컬 저장소

  • Room Database (경로 데이터)
  • EncryptedSharedPreferences (토큰 저장)
  • Preferences DataStore (설정값)

7. 🌐 네트워크 통신 및 API

API 통신

  • Retrofit + OkHttp
  • 동일한 서버 엔드포인트 (https://api.xxxx.xxxx)
  • JWT 토큰 인증 (iOS와 동일)

8. ⚡ 비동기 처리

비동기 처리

  • Kotlin Coroutines
  • WorkManager (백그라운드 작업)

9. 🎨 UI/UX 설계

디자인 시스템

  • Material Design 3 적용
  • 라이트 모드 전용 (다크모드 미지원)
  • iOS 디자인 참고한 커스텀 컴포넌트

10. 🗺️ 지도 및 네비게이션

지도 서비스

  • Google Maps SDK for Android
  • Google Directions API
  • Google Places API (주소 검색)

11. 🔐 인증 시스템

인증 방식 (둘 다 지원)

  • Google Sign-In (주요 인증)
  • Kakao Login SDK (iOS와 동일)

12. 🧪 테스트 전략

테스트 도구

  • JUnit 5 + Truth (단위 테스트)
  • Espresso + Compose Testing (UI 테스트)
  • Mockk (모킹)

13. 📦 배포 및 DevOps

배포 전략

  • Google Play Console 배포
  • 기존 GitHub Actions 확장 (iOS + Android)
  • Fastlane 안드로이드 버전
  • iOS 출시 후 안드로이드 순차 출시

14. 📊 모니터링

분석 도구

  • Firebase Analytics (iOS와 동일)
  • Firebase Crashlytics
  • Play Console 분석

 

iOS와 비슷한 MVI라는 아키텍처를 사용한다고 하는군요;;; 잘 모르지만 이렇게 결과가 나왔습니다!

다음 시간에는 바로!! Claude에게 포팅을 요청해보도록 하겠습니다.

Comments