-
Tuist Clean Architecture 적용기 - 2iOS 2025. 2. 25. 15:03
저번 게시물에서 Tuist의 기초에 대해 다뤘다면 지금은 그걸 토대로 Clean Architecture를 적용하는 과정동안 고민하면서 적용 시켰던 과정을 끄적여 보겠습니다.
우선 간단하게 Clean Architecture는 시스템을 계층화 하여 보수성과 확장성을 높이는것을 목표로 하고 의존성 역전 원칙을 중심으로 비즈니스 로직을 외부 프레임 워크나 UI로 부터 독립적으로 유지하는 것입니다.
독립적, 보수성, 확장성이 Tuist와 잘 어울릴거 같습니다.
우선 제가 생각한 구조는 위 그림과 같습니다.
Clean Architecture에서는 Domain Layer는 Data Layer와 Presentation Layer만 보고 있어야 하고 Domain은 어떠한 의존성도 가지고 있으면 안됩니다. 또한 의존성 주입을 위해서 외부 즉 Coordinator에서 그 의존성을 가져야 한다고 생각했습니다.
그래서 가장 내부 UserDomain과 LoginDomain을 작성해 보겠습니다.
우선 이런식으로 디렉토리 구조를 잡았습니다.
App - 시작점이 되는 메인
Coordinator - DI가 일어나고, 화면 이동을 통제하는 모듈
LoginData - Login에 관한 Data API, DB관련 모듈
LoginDomain - Login에 관한 비즈니스 로직 모듈
LoginPresentation - Login UI 모듈
ThirdParty - 공통으로 쓰는 모듈(snapkit, network 관련 ..)
UserData - User에 관한 Data API, DB관련 모듈
UserDomain - User에 관한 비즈니스 로직 모듈
UserPresentation - User UI 모듈
우선 전체 적으로 사용할 플러그인의 모습은 아래와 같습니다.
import ProjectDescription // Tuist project 내부에서 전역으로 사용할 기능 정리 let myPlugin = Plugin(name: "MyPlugin")
위는 Plugin.swift 코드 입니다.
그리고 같은 경로에 ProjectDescriptionHelpers 폴더 안에 swift파일 코드는 아래와 같습니다.
Dependency+Project.swift InfoPlist.swift Settings.swift 위처럼 전역으로 써줄 settings, infoplist, dependency등을 설정해주고 이제 의존성이 없는 도메인 두개 UserDomain, LoginDomain을 작성하겠습니다.
UserDomain/Project.swift, LoginDomain/Project.swift 다음은 User의 Presentation, Data 그리고 Login의 Presentation, Data를 작성하겠습니다.
UserPresentation/Project.swift, UserData/Project.swift LoginPresentation/Project.swift, LoginData/Project.swift 그리고 이제 모든걸 알고 있는 coordinator를 작성하겠습니다.
Coordinator/Project.swift 마지막으로 App을 작성해 줍니다.
App/Project.swift 이런식으로 작성하고 모든 Dependency 구조를 보고 싶으면 해당 Root경로 터미널에서 아래와 같이 작성해 주면 됩니다.
tuist graph
graph 위 처럼 Dependency를 확인해볼수 있습니다.
음 보면서 Coordinator를 아직 잘 모르고 DI를 어디서 해줄지 고민 많이 했습니다 아직 저기가 맞는지는 잘 모르겠지만
아직두 고민되네여
'iOS' 카테고리의 다른 글
[iOS] Coordinator with Clean Architecture DiContainer (0) 2025.03.06 Tuist Clean Architecture 적용기 - 1 (0) 2025.02.24