-
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, CoordinatorInterface, Presentation, Repository, UseCase 형태의 서브모듈로 구성됩니다.
모든 Feature가 반드시 위 형태의 서브모듈 구조를 따를 필요는 없으며, 필요한 계층만 선택적으로 구성할 수도 있습니다.
예를 들어 별도의 비즈니스 로직 없이 화면 출력만 있는 Feature라면, UseCase와 Repository 등은 구성하지 않아도 됩니다.
-
DIContainer
- Feature의 각 계층들이 자신의 의존성을 직접 관리할 수 있도록 필요한 의존성들을 제공합니다.
-
Coordinator
- 각 화면 사이의 전환, 데이터의 흐름 등을 담당하며, 해당 기능과 관련된 모든 화면의 생명주기를 관리합니다.
-
CoordinatorInterface
- Coordinator의 인터페이스를 정의합니다.
- 이를 통해 의존성 역전 원칙을 준수하며, Presentation 계층과 Coordinator 계층의 의존성 순환을 방지합니다.
- Presentation 계층에서는 이 인터페이스를 통해 Coordinator 계층과 상호작용합니다.
-
Presentation
- Feature에 맞는 UI를 구성하고, 사용자 입력을 받아 처리합니다.
- ViewController, ViewModel을 포함합니다.
-
Repository
- DataSource와의 통신을 담당하며, 이는 로컬 데이터베이스나 원격 API 등이 될 수 있습니다.
- CoreEntity, CoreNetworkService, CoreStorageService에 의존할 수 있습니다.
- DataSource로부터 전달된 Data 타입을 DTO로 decode하고, 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 계층을 UI 관련 의존성으로부터 분리, 강한 결합을 방지하는 역할을 수행합니다.
로깅 관련 기능을 담당합니다.
앱 내에서 발생하는 이벤트, 에러, 상태 등을 로깅하는 데 사용됩니다.
모든 모듈에서 의존할 수 있으므로, 다른 어떠한 모듈에 대한 의존성이 없어야합니다.
프로젝트 전반에 범용적으로 사용되는 유틸리티 함수나 타입을 제공합니다.
Logger 모듈과 마찬가지의 이유로 다른 어떠한 모듈에 대한 의존성이 없어야합니다.
작성자: Mase