안드로이드 앱을 설계할 때 흔히 접하게 되는 두 가지 아키텍처가 있습니다. 하나는 소프트웨어 아키텍처의 고전이라 불리는 클린 아키텍처(Clean Architecture)이고, 다른 하나는 Google이 공식적으로 권장하는 앱 아키텍처(Google App Architecture)입니다. 이 두 구조는 겉보기에 비슷해 보이지만, 그 철학과 구현 방식에서 명확한 차이가 존재합니다.
클린 아키텍쳐 vs Google의 앱 아키텍쳐
Google의 안드로이드 문서에서 소개되고 있는 앱 아키텍쳐는 클린 아키텍쳐가 아닙니다.
밥 아저씨의 클린 아키텍쳐와 Google의 앱아키텍쳐는 서로 다른 구조입니다.
클린아키텍처는 소프트웨어 시스템을 간단하게 만들기 위한 것입니다. 이 구조는 의존성 역전 원칙(Dependency Inversion Principle)을 핵심으로 하며, 전체 시스템을 계층화하고, 의존성은 항상 안쪽 계층(예: 도메인)으로만 향하게 합니다. 각 계층은 상위 계층에 대해 알지 못하고, 하위 계층에만 의존하도록 구성됩니다. 이런 방식은 테스트가 쉽고, 변경에 유연하며, 무엇보다도 비즈니스 로직을 외부 기술이나 프레임워크로부터 철저히 분리할 수 있다는 점에서 큰 장점이 있습니다.
반면, Google의 앱 아키텍처는 안드로이드 개발자들이 보다 쉽고 빠르게 앱을 개발할 수 있도록 제안된 실용적인 구조입니다. ViewModel, Repository, UseCase 등의 구성 요소를 중심으로 한 계층화된 구조를 가지고 있지만, 클린 아키텍처처럼 의존성에 대한 엄격한 규칙을 적용하지는 않습니다.
Clean Architecture 와 비슷하게 구성될 순 있지만, 단 2가지의 차이점이라고 하면 도메인 레이어의 필수 여부와 의존성의 방향의 차이입니다. 클린 아키텍처와 달리, Google의 앱 아키텍처는 Domain이 optional하고, 도메인 레이어가 데이터 레이어에 의존하고 있습니다.
실제로 google의 예제 앱에서 domain의 코드를 살펴보면 data layer의 코드를 의존해서 사용하고 있는것을 확인할 수 있습니다.

또한, 앱아키텍처에서는 모든 레이어(Data, Domain, Presentation)을 안드로이드 모듈로 만들지만, 클린아키텍처에서는 UI와 일부 Local Data모듈을 제외하고는 모두 순수 Kotlin 모듈로 생성하는 차이가 있습니다. 이로 인해 OS에 종속되지 않고만약 Android 에서 KMP(Kotlin multi platform)으로 바꾼다고 했을 때 UI 레이어만 바꾸면 되는 장점이 있습니다.
아래는 실제로 참조한 헤이딜러팀의 클린아키텍처 구조입니다.
결과적으로, Google의 앱 아키텍처는 Clean Architecture와 비슷해 보일 수 있지만, 구조적 철학이 다르기 때문에 동일한 아키텍처라고 볼 수는 없습니다. Google의 구조는 생산성과 접근성을 중시하며 실용적인 개발 환경을 제공하는 반면, 클린 아키텍처는 높은 수준의 분리와 독립성을 통해 유지보수성과 확장성을 극대화하는 데 초점을 맞춥니다.
자, 이제 아래 질문에 대해서 O/X 로 답해보시기 바랍니다.
- Presentation layer는 Domain layer를 알고있다? (O) / (X)
- Domain layer는 Data layer를 알고 있다? (O) / (X)
- Data layer는 Domain layer를 알고 있다? (O) / (X)
Google의 앱 아키텍쳐
- O
- O
- X
밥아저씨의 클린 아키텍쳐
- O
- X
- O
무엇을 써야할까?
앱 아키텍처는 개발 생산성과 유지보수성에 큰 영향을 미치기 때문에, 프로젝트의 성격에 따라 적절한 선택이 필요합니다.
클린 아키텍처와 Google의 앱 아키텍처는 각기 다른 목적과 장단점을 가지고 있기 때문에, 어느 한쪽이 항상 정답이 되는 것은 아닙니다.
Clean Architecture
장점
- 높은 유지보수성: 각 계층이 독립적이기 때문에 변경에 강합니다. UI, 데이터, 도메인을 독립적으로 테스트하고 교체할 수 있습니다.
- 테스트 용이성: 도메인 로직이 외부 의존성 없이 독립되어 있어 단위 테스트 작성이 쉬워집니다.
- 확장성과 재사용성: 도메인 계층이 독립적이므로, 웹, 데스크탑, 다른 플랫폼에서도 재사용이 가능합니다.
- 기술 변화에 유연함: 예를 들어, Room 대신 다른 DB를 쓰더라도 도메인 레이어는 변경하지 않아도 됩니다.
단점
- 학습 곡선이 있음: 계층 분리에 대한 이해가 필요하고, 구조 자체가 복잡해 보일 수 있습니다.
- 초기 개발 속도가 느릴 수 있음: 설계에 시간이 걸리며, 작은 프로젝트에는 과할 수 있습니다.
Google의 앱 아키텍처 (Recommended App Architecture)
장점
- 구현이 빠르고 직관적임: Android ViewModel, Repository 패턴 등을 중심으로 구성되어 있어 Android 개발자에게 친숙합니다.
- 문서와 샘플이 풍부함: Google 공식 문서와 샘플들이 많아 참고하기 좋습니다.
- 적은 진입장벽: Clean Architecture보다 이해하고 도입하기 쉬워, 빠르게 MVP나 소규모 앱을 만들기 적합합니다.
- 생산성 중심: 구조적으로 엄격하지 않아 유연하게 개발할 수 있습니다.
단점
- 의존성 관리가 불명확할 수 있음: 도메인 레이어가 데이터 레이어에 의존하는 경우, 계층 간 책임이 모호해질 수 있습니다.
- 확장성과 테스트 관점에서는 불리할 수 있음: 구조가 명확하지 않으면 테스트하기 어려워지고, 프로젝트가 커질수록 관리가 힘들어질 수 있습니다.
- 기술 독립성이 약함: UI나 데이터 계층의 변경이 도메인 로직에 영향을 줄 수 있습니다.
정리
Android clean architecture | Android App Architecture | |
공통점
|
관심사 분리(계층형), 단일 데이터 흐름(UDF)
|
|
Layer
|
Presentation - Domain - Data
|
UI - Domain(optional) - Data
|
의존성 방향
|
Presentation → Domain ← Data
|
UI → Domain → Data
|
Domain Layer
|
UseCase - Repository Interface -Entity
|
UseCase
|
Data Layer
|
Repository - DataSource - DataModel
|
Repository - DataSource
|
두 아키텍처의 공통점은 주로 안드로이드에서 사용하는 대부분의 아키텍처에서 사용하는 공통점이며 큰 틀에서는 비슷하게 작성할 수 있는 형태입니다.
그러나 디테일적인 측면에서 보면 여러 부분들이 다른데, 기본적으로 안드로이드 앱 아키텍처 가이드에서는 프레임워크 종속적임을 분명히 하고 있고 이에 맞는 가이드를 제공합니다. 그러나 클린 아키텍처의 경우, UI와 일부 모듈을 제외하고는 순수 Kotlin 및 Java에서 제공되는 것들로 구성할 수 있습니다.
앱 아키텍처 가이드는 좀 더 애플리케이션이라는 측면에 초점을 두어 '불필요한 코드는 굳이 작성하지 않아도 된다'는 효율성이라는 부분을 강조해 까다롭게 틀에 맞춰진 클린 아키텍처보다는 덜 정형화되어 있습니다. 그래서 실제 프로젝트를 작성할 때 클린 아키텍처보다는 앱 아키텍처 가이드를 따르는 것이 훨씬 자유도가 높다고 느낄 수 있습니다. 디테일한 부분을 살펴보면 실제로 클린 아키텍처 쪽이 훨씬 신경쓸 것이 많다는 것을 알 수 있죠.
끝.
참고자료
헤이딜러 안드로이드팀은 어떻게 일하나요?(3) — 프로젝트 구조
- 코틀린 + MVVM + Coroutine - 클린 아키텍쳐 / 멀티모듈 / DI - 디자인 시스템, 라이브러리 모듈
medium.com
Clean 과 Google Recommended Architecture 이야기
Clean 과 Google Recommended Architecture 이야기
velog.io
https://holy0823.tistory.com/4
[도토링] 안드로이드 권장 아키텍처 vs 클린 아키텍처
멘토링 애플리케이션 도토링의 안드로이드 아키텍처 설계 과정을 담아보겠다. 먼저, 아키텍처를 잘 짜야하는 이유가 무엇일까? 안드로이드 공식문서에는 이렇게 나와있다. 더보기 Android 앱은
holy0823.tistory.com
https://no-dev-nk.tistory.com/120
Android Clean Architecture 와 Android App Architecture - 3
기존에 작성했던 게시글을 이어서 작성하는 내용입니다. 1편에서는 안드로이드의 클린 아키텍처에 대해서, 2편에서는 안드로이드에서 권장하는 앱 아키텍처에 대해서 적어보았습니다. 이번
no-dev-nk.tistory.com
'Android > Architecture' 카테고리의 다른 글
[Android] MVI 패턴이란? (0) | 2025.02.28 |
---|---|
[Android] SAA(Single Activity Architecture)란? (0) | 2024.12.17 |
[Android] DTO vs DAO vs Entity (0) | 2024.12.14 |
[Android] MVVM 패턴 (0) | 2023.09.19 |
[Android] ViewModel 이란? (0) | 2023.09.19 |