Case 01 · TMA / Micro Feature
레이어 대신 피처로 나누기
전편은 Domain / Data / Presentation 레이어로 모듈을 나눴습니다. 그래서 검색 기능 하나를 고치려면 세 모듈을 동시에 열어야 했습니다. 전편 README에 적어 둔 한계(모듈이 계속 커지고, 테스트를 잘게 나누기 어려움)가 이 프로젝트의 출발점입니다.
레이어 대신 피처 단위로 모듈을 나눴습니다. 검색과 관련된 코드는 FeatureSearch 하나에 모두 들어갑니다. 레이어 구분은 피처 안에 그대로 두고, 피처끼리는 Interface로만 주고받습니다.
피처끼리는 Interface로만 의존하고, 구현체는 App에서만 import할 수 있습니다.
기능 하나를 고칠 때 모듈 하나만 열면 됩니다.
FeatureProfile/Project.swift
let project = Project.module( name: ModulePaths.Feature.FeatureProfile.rawValue, targets: [ .interface( module: .feature(.FeatureProfile), dependencies: [.shared(target: .SharedKit)] ), .implements( module: .feature(.FeatureProfile), dependencies: [ .feature(target: .FeatureProfile, type: .interface), .shared(target: .SharedKit), .core(target: .CoreNetwork), .core(target: .CoreDesignSystem), // 유일한 피처 간 의존 - Interface에만 .feature(target: .FeatureAuth, type: .interface) ] ), .testing(/* Stub 공개 */), .tests(/* Testing 재사용 */), .demo(/* 단독 실행 앱 */) ] )