잡동사니/GPT가 알려주는
[GPT가 알려주는] IVI(HMI) 기반 멀티앱 UI 소프트웨어 아키텍처 설계
heylo
2025. 7. 3. 15:21
✅ 홈화면 앱 구성 정리
📦 트랙터 관련 앱
- 트랙터 설정
- 트랙터 관리
- 트랙터 정보
📦 미디어 관련 앱
- 라디오
- 미디어 (USB 등)
📦 기타 설정 앱
- 네트워크
- 모니터 설정
✅ 목표
- 이들을 각각 독립적인 앱으로 개발 (APK 단위)
- 다만, 언어 설정, 밝기, 사운드 설정 등은 공통이므로
앱 간 설정 동기화가 필요함
✅ 전체 S/W 아키텍처 설계 방안
1. 앱 구조 (디렉터리/모듈)
/apps
├─ tractor-settings
├─ tractor-management
├─ tractor-info
├─ radio
├─ media
├─ network
├─ monitor-settings
└─ launcher (메인화면)
각각 독립된 Android 앱으로 구성 (AndroidManifest.xml 포함)
2. 공통 설정 관리 방식
항목 | 설계 방안 |
언어, 단위, 밝기, 시간 | RoomDB + ContentProvider 이용하여 공유 |
실시간 동기화 | BroadcastReceiver 또는 ContentObserver 사용 |
설정 변경 시 | ContentProvider 업데이트 → 모든 앱에 브로드캐스트 |
3. 런처 앱(Home UI) 역할
- 각 앱을 Intent 호출로 실행
- 예시:
val intent = Intent()
intent.setClassName("com.lsmtron.radio", "com.lsmtron.radio.RadioMainActivity")
startActivity(intent)
- 앱 상태(예: "미디어 연결됨")를 아이콘 상태로 표현할 수 있음 → ContentProvider 통해 폴링하거나 Broadcast 수신
4. 공통 라이브러리 모듈 (선택)
- common-ui, common-utils, common-settings 등 Android library module로 분리
- 각 앱에서 공통 컴포넌트 재사용 가능
5. 소프트웨어 설계서 주요 항목
항목 | 내용 |
📌 앱 구성 | APK별 기능 설명 및 Launch 방식 |
📌 공통 설정 | DB 스키마 (MonitorSettingsEntity), ContentProvider URI 명세 |
📌 설정 동기화 | BroadcastReceiver 등록 예시, 설정 변경 시 처리 순서 |
📌 실행 시나리오 | 예: Launcher → Media → 언어 변경 → 모든 앱 locale 반영 |
📌 에러 처리 | 설정 값 미적용 시 fallback, Provider 접근 실패 시 디폴트값 적용 등 |
✅ 실제 구성 예시
// 모니터 설정 앱: 언어 변경
val values = ContentValues().apply { put("language", "en") }
contentResolver.update(Uri.parse("content://com.lsmtron.settings.provider/monitor_settings"), values, null, null)
val intent = Intent("com.lsmtron.LANGUAGE_CHANGED")
intent.putExtra("language", "en")
context.sendBroadcast(intent)
// 다른 앱 (예: 라디오 앱)
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val lang = intent.getStringExtra("language")
setAppLocale(lang, context)
recreate() // 혹은 리소스 재적용
}
}
✅ 결론
🔧 L사의 트랙터 UI처럼 여러 앱이 통합된 시스템에서는:
- 앱은 각각 독립 APK로 나누고
- 설정은 공통 DB + ContentProvider로 공유
- 실시간 반영은 Broadcast로 처리
- 공통 유틸/컴포넌트는 라이브러리 모듈로 분리
필요하면 이 구조에 맞춰:
- 전체 모듈 디렉터리 트리 구조
- ContentProvider + Room 예시
- Launcher → App 실행 흐름도
- 각 앱의 Application 클래스 패턴
등도 도와줄 수 있어.
실제 구현 예제 필요해? 😎