Skip to content

3. 프로젝트 구성 모듈의 책임에 대한 설명

Mase edited this page Jun 30, 2023 · 22 revisions

각 모듈별 책임

App

앱의 Entry Point로서 AppDelegate 또는 SceneDelegate와 같은 클래스를 가질 수 있습니다.
앱의 모든 모듈에 대한 의존성을 가질 수 있으며, 프로젝트에 필요한 모든 초기 의존성을 DI Container에 주입합니다.


Core

인증 서비스, 네트워크 서비스, 저장소 서비스 등 앱이 데이터소스와 통신하는데 필요한 핵심 기능이 포함됩니다.

  • CoreAuthentication
    • 인증 관련 로직을 처리합니다.
    • 사용자 인증에 필요한 서비스, 인증 상태 추적 등을 처리합니다.
  • CoreDIContainer
    • Core 모듈들에 대한 의존성을 관리하고, 의존성 주입을 위한 컨테이너를 제공합니다.
  • CoreEntity
    • 앱의 핵심 비즈니스 로직에 필요한 데이터 모델을 정의합니다.
  • CoreNetworkService
    • 네트워킹 관련 기능을 제공하며 API 호출 등을 담당합니다.
    • API 호출을 위한 데이터 구조인 DTO를 관리합니다.
  • CoreStorageService
    • 로컬 데이터 저장을 담당합니다.
    • 데이터베이스 또는 사용자 기본 설정 등을 다룹니다.

Feature

개별 기능 모듈로 구성되어 있으며, 각 모듈은 특정 기능을 담당합니다.
각 기능 모듈은 일반적으로 DIContainer, Coordinator, Presentation, UseCase, Repository 서브모듈로 구성됩니다.

  • DIContainer

    • Feature의 각 계층들이 자신의 의존성을 직접 관리할 수 있도록 필요한 의존성들을 제공합니다.
  • Coordinator

    • Feature의 전체적인 흐름을 관리합니다.
    • 각 화면 사이의 전환, 데이터의 흐름 등을 담당하며, 해당 기능과 관련된 모든 화면의 생명주기를 관리합니다.
  • CoordinatorInterface

    • Coordinator의 인터페이스를 정의합니다.
    • 이를 통해 의존성 역전 원칙을 준수하고, Presentation 계층에서는 이 인터페이스를 통해 Coordinator 계층과 상호작용합니다.
  • Presentation

    • 해당 기능의 UI를 구성하고, 사용자 입력을 받아 처리합니다.
    • ViewController, ViewModel를 포함합니다.
  • Repository

    • 데이터 소스와의 통신을 담당하며, 이는 로컬 데이터베이스나 원격 API 등이 될 수 있습니다.
    • CoreEntity, CoreNetworkService, CoreStorageService에 의존할 수 있습니다.
    • 데이터 소스로부터 전달된 Data 타입을 DTO로 해석하고, DataMapper를 사용해 UseCase가 사용하는 Entity로 맵핑합니다.
  • UseCase

    • Entity를 중심으로 비즈니스 로직을 캡슐화하고 Presentation 계층에 데이터를 제공합니다.
    • 필요시 Repository를 통해 데이터 소스에게 데이터를 요청하고 전달할 수 있습니다.
    • 가장 고수준에 있는 모듈이며, 외부 인프라나 데이터 소스 형태의 변경에 영향을 받지 않습니다.

Shared

모든 Feature가 공통으로 사용할 수 있는 UseCase, Repository를 제공합니다.

  • SharedDIContainer
    • Shared 모듈에서 필요한 의존성을 관리합니다.
  • SharedRepository
    • 공통적으로 사용하는 데이터 소스와의 통신을 제공합니다.
    • 모든 Feature의 UseCase 모듈에서 사용할 수 있습니다.
  • SharedUseCase
    • 공통적으로 사용하는 비즈니스 로직을 캡슐화합니다.
    • 모든 Feature의 Presentation 모듈에서 사용할 수 있습니다.

DesignSystem & DesignSystemReactive

  • DesignSystem
    • UI/UX 설계 요소를 관리합니다.
    • 텍스트 스타일, 색상, 아이콘, 이미지 등과 같은 앱 전체에서 공유되는 리소스와 컴포넌트들을 포함합니다.
  • DesignSystemReactive
    • DesignSystem의 RxSwift 반응형 확장을 제공합니다.

EntityUIMapper

CoreEntity의 데이터 모델을 UI에 적합한 형태로 매핑하는 로직을 담당합니다.
이를 통해 Domain 계층을 Presentation 계층으로부터 분리하여 두 계층간 강한 결합을 방지하는 역할을 수행합니다.


Logger

로깅 관련 기능을 담당합니다.
앱 내에서 발생하는 이벤트, 에러, 상태 등을 로깅하는 데 사용됩니다.
모든 모듈에서 의존할 수 있으므로, 다른 어떠한 모듈에 대한 의존성이 없어야합니다.


Utils

애플리케이션 전체에서 범용적으로 사용되는 유틸리티 함수나 타입을 제공합니다. Logger 모듈과 마찬가지의 이유로 다른 어떠한 모듈에 대한 의존성이 없어야합니다.




  • 프로젝트 네비게이션 바 상태로 보는 모듈 구성

작성자: Mase