2026년 현재, 많은 기업들이 안드로이드 개발 표준을 Jetpack Compose와 UDF(단방향 데이터 흐름)로 강력히 밀고 있습니다. 안드로이드 개발자에게 MVVM 패턴은 이미 익숙한 패턴입니다. 하지만 Jetpack Compose를 사용하기 시작하면서, 우리가 알던 MVVM의 모습이 조금씩 변하고 있습니다. 최근에는 "이게 MVVM이야? 아니면 MVI야?"라는 말이 나올 정도로 두 패턴의 경계가 모호해지고 있죠. 이번 블로그에서는 왜 이런 변화가 일어나고 있는지 구글의 권장사항과 함께 작성해 보겠습니다!
1. XML에서 Compose로
구글이 XML에서 Compose를 도입한 가장 큰 이유는 '상태와 UI의 일치' 때문입니다.
❌ XML의 한계 (명령형)
XML 방식은 개발자가 findViewById나 데이터 바인딩을 통해 UI 요소에 직접 명령을 내려 상태를 바꿔야 했습니다. 이 과정에서 상태 업데이트가 하나라도 누락되면, 실제 데이터와 화면이 다르게 보이는 위험이 존재했습니다. 즉, UI와 로직이 분리되어 있기 때문에 데이터를 동기화하기 어려운 단점이 있었죠.
⭕ Compose의 선택 (선언형)
Compose는 상태가 바뀌면 알아서 변경된 부분만 다시 그립니다. 현재 상태가 무엇인지 선언만 하며, 이 방식을 Recomposition이라고도 하죠! 또한, UI와 로직이 모두 코틀린으로 작성되어 있기 때문에 가독성이 높고 재사용성이 뛰어난 장점이 존재합니다.
이러한 특성 때문에 "상태를 어떻게 관리하느냐"가 아키텍처의 핵심이 되었습니다.
2. MVI 패턴이란?
MVI 패턴이란 단일 상태(State)를 중심으로 단방향 데이터 흐름을 가지는 아키텍처 패턴입니다.
구성 요소
- View (UI): State를 관찰해서 UI 렌더링 ex) Activity, Fragment, Compose UI 등
- Intent: 사용자의 행동 ex) 버튼 클릭, 새로고침 등
- Model: 화면을 그리기 위한 하나의 상태(State)
View는 상태를 그리기만 하고 모든 데이터 변화는 Intent → Model(Reducer) → View로 흘러갑니다.
MVI 패턴은 단일 상태이기 때문에 디버깅이 쉽고, 상태 변경을 쉽게 추적할 수 있는 장점이 있습니다.
따라서 Compose와 함께 쓰일 때 더 좋은 패턴입니다.
3. MVVM이 MVI를 닮아가는 과정
우리가 흔히 쓰던 MVVM이 현대 안드로이드 개발 환경(Compose + UDF)에서 변해가는 과정은 크게 두 가지입니다.
👤 여러 상태 → 단일 상태 (State Consolidation)
- 과거 MVVM: isLoading, error 등 각각 별개의 State를 StateFlow로 관리합니다.
- 현대 MVVM: 모든 상태를 하나의 UiState 데이터 클래스로 묶어서 관리합니다.
이 모습은 MVI 패턴의 단일 원천 상태(Single Source of Truth)와 유사합니다.
🗣 직접 호출 → 의도 전달
- 과거 MVVM: UI에서 함수를 사용하여 ViewModel의 기능을 직접 명령합니다.
ex) 점원이 주방에 들어가서 "냉장고 열어서 고기 꺼내고 불 켜서 구우세요"라고 요리사에게 일일이 명령
- 현대 MVVM: 사용자의 행동을 하나의 Event로 정의하여 ViewModel에 전달합니다.
ex) "1번 테이블 주문 들어왔습니다"라는 주문서 한 장만 요리사에게 전달
이 모습은 단방향 데이터 흐름(UDF) 및 MVI의 Intent와 유사합니다.
4. 결국 중요한 건 패턴보다 UDF
구글은 UDF 원칙을 매우 강력하게 권장합니다.
그렇다고 MVVM 패턴을 버리고 MVI 패턴을 써라! 라고 직접적으로 명시한 것도 아닙니다.
구글이 권장하는 "UDF 원칙을 잘 지킨 MVVM"을 구현하다 보면, 자연스럽게 MVI 구조와 닮아가게 되는 것입니다.
이러한 패턴 간의 경계가 모호하기 때문에 UDF+MVVM을 그냥 MVI라고 부르는 개발자들이 많아진 것입니다.
Android 아키텍처 권장사항 | App architecture | Android Developers
Android 아키텍처 권장사항 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는 여러 아키텍처 권장사항을 설명합니다. 앱의 품질과 견고성, 확장
developer.android.com
Compose UI 아키텍처 | Jetpack Compose | Android Developers
이 문서에서는 Jetpack Compose의 단방향 데이터 흐름 (UDF) 패턴을 설명하고, 상태가 아래로 흐르고 이벤트가 위로 흐르는 방식과 이벤트 및 상태 홀더를 구현하고 ViewModel을 사용하여 UI 상태를 효과
developer.android.com
저는 UDF 원칙만 잘 지킨다면, MVVM이나 MVI나 상관 없다고 생각합니다.
기존 코드가 있고, 단순 CRUD 화면이라면 계속 해서 MVVM 패턴을 사용하면 되고,
Compose를 사용 중이고, 이벤트가 많은 화면이라면 MVI 패턴을 적용하면 됩니다.
이 흐름을 이해하고 실무에 적용한다면, 현대 안드로이드 개발자로서 확실한 경쟁력을 가질 수 있을 것입니다!
'IT 기술' 카테고리의 다른 글
| DX를 넘어 AX로: 현대차와 넷플릭스로 알아보는 AX 성공 사례 (0) | 2026.01.18 |
|---|---|
| AI Assistant 활용과 검증: 생산성을 넘어 신뢰성으로 (0) | 2026.01.11 |