-
Notifications
You must be signed in to change notification settings - Fork 1
3. 프로젝트 구성 모듈의 책임에 대한 설명
앱의 Entry Point로서 AppDelegate 또는 SceneDelegate와 같은 클래스를 가질 수 있습니다.
앱의 모든 모듈에 대한 의존성을 가질 수 있으며, 프로젝트에 필요한 모든 초기 의존성을 DI Container에 주입합니다.
인증 서비스, 네트워크 서비스, 저장소 서비스 등 앱이 외부 DataSource와 통신하는데 필요한 핵심 기능이 포함됩니다.
- CoreAuthentication
- 인증 관련 로직을 처리합니다.
- 사용자 인증에 필요한 서비스, 인증 상태 추적 등을 처리합니다.
- CoreDIContainer
- Core 모듈들에 대한 의존성을 관리하고, 의존성 주입을 위한 컨테이너를 제공합니다.
- CoreEntity
- 앱의 핵심 비즈니스 로직에 필요한 데이터 모델을 정의합니다.
- CoreNetworkService
- 네트워킹 관련 기능을 제공하며 API 호출 등을 담당합니다.
- API 호출을 위한 데이터 구조인 DTO를 관리합니다.
- CoreStorageService
- 로컬 데이터 저장을 담당합니다.
- 데이터베이스 또는 사용자 기본 설정 등을 다룹니다.
화면 개발 단위의 모듈 모음으로 구성되어 있으며, 모듈마다 특정 기능을 담당합니다.
일반적으로 DIContainer, Coordinator, Presentation, UseCase, Repository 형태의 서브모듈로 구성됩니다.
-
DIContainer
- Feature의 각 계층들이 자신의 의존성을 직접 관리할 수 있도록 필요한 의존성들을 제공합니다.
-
Coordinator
- Feature의 전체적인 흐름을 관리합니다.
- 각 화면 사이의 전환, 데이터의 흐름 등을 담당하며, 해당 기능과 관련된 모든 화면의 생명주기를 관리합니다.
-
CoordinatorInterface
- Coordinator의 인터페이스를 정의합니다.
- 이를 통해 의존성 역전 원칙을 준수하고, Presentation 계층에서는 이 인터페이스를 통해 Coordinator 계층과 상호작용합니다.
-
Presentation
- Feauture에 맞는 UI를 구성하고, 사용자 입력을 받아 처리합니다.
- ViewController, ViewModel를 포함합니다.
-
Repository
- DataSource와의 통신을 담당하며, 이는 로컬 데이터베이스나 원격 API 등이 될 수 있습니다.
- CoreEntity, CoreNetworkService, CoreStorageService에 의존할 수 있습니다.
- DataSource로부터 전달된 Data 타입을 DTO로 해석하고, DataMapper를 사용해 UseCase가 사용하는 Entity로 맵핑합니다.
-
UseCase
- Entity를 중심으로 비즈니스 로직을 캡슐화하고 Presentation 계층에 데이터를 제공합니다.
- 필요시 Repository를 통해 DataSource에게 데이터를 요청하고 전달할 수 있습니다.
- 가장 고수준에 있는 모듈이며, 외부 인프라나 DataSource 형태의 변경에 영향을 받지 않습니다.
모든 Feature가 공통으로 사용할 수 있는 UseCase, Repository를 제공합니다.
- SharedDIContainer
- Shared 모듈에서 필요한 의존성을 관리합니다.
- SharedRepository
- 공통적으로 사용하는 DataSource와의 통신을 제공합니다.
- 모든 Feature의 UseCase 모듈에서 사용할 수 있습니다.
- SharedUseCase
- 공통적으로 사용하는 비즈니스 로직을 캡슐화합니다.
- 모든 Feature의 Presentation 모듈에서 사용할 수 있습니다.
- DesignSystem
- UI/UX 설계 요소를 관리합니다.
- 텍스트 스타일, 색상, 아이콘, 이미지 등과 같은 앱 전체에서 공유되는 리소스와 컴포넌트들을 포함합니다.
- DesignSystemReactive
- DesignSystem의 RxSwift 반응형 확장을 제공합니다.
CoreEntity의 데이터 모델을 UI에 적합한 형태로 매핑하는 로직을 담당합니다.
이를 통해 Domain 계층을 Presentation 계층으로부터 분리하여 두 계층간 강한 결합을 방지하는 역할을 수행합니다.
로깅 관련 기능을 담당합니다.
앱 내에서 발생하는 이벤트, 에러, 상태 등을 로깅하는 데 사용됩니다.
모든 모듈에서 의존할 수 있으므로, 다른 어떠한 모듈에 대한 의존성이 없어야합니다.
애플리케이션 전체에서 범용적으로 사용되는 유틸리티 함수나 타입을 제공합니다.
Logger 모듈과 마찬가지의 이유로 다른 어떠한 모듈에 대한 의존성이 없어야합니다.
작성자: Mase