Programming/Swift

tuist로 Clean Architecture 직접 설계 해서 만들어보기

ilovecoffee 2023. 7. 17. 09:00

우리 가족에게 온 천사 1명이 있어 천사가 될 때까지 보필하고, 천사를 키우느라 글 작성을 외면하였던 것에 반성하며 글을 쓴다.

 

 

Clean Architecture를 공부하며, tuist로 프로젝트 초기 세팅을 하면, 조금 더 쉽게 관리할 포인트가 있지않을까해서 작업해보았다.

iOS에는 Clean Architecture를 iOS에서 쉽게 사용할 수 있도록 Clean Swift로 된 템플릿을 작성하는 것이 있지만, Clean Architecture는 없다.

템플릿으로 만들 수도 있겠지만, 각 레이어마다 폴더가 다르게 생성되어야하는 데, 그런식으로 템플릿을 만들기엔 실력이 부족…한 탓도 있겠다.

천천히 시간을 갖고 만들어볼까 생각중이긴 하다.

Clean Architecture의 기본 트리 구조는 다음과 같다.

DI Container는 굳이 필요있을까 싶어 만들지 않았다.

 

 

기존에는 클린 아키텍쳐로 일일이 파일을 생성해서 만들었다.

이제 이 tree를 기반으로 tuist로 만들어보려고 한다.

 

 

 

Project에

Clean architecture의 기본 레이어인, Domain, Data, Presentaion Layer로 그룹을 만들어주고, 추가로 Extensions, Common 그룹을 만들어준다.

 

Common은 앱의 전반적인 관리를 할 수 있는 것으로 넣는다.(모듈로 빼는 것도 가능)

Extensions는 앱의 컴포넌트들을 추가로 확장하여 사용할 수 있는 파일들을 넣어준다.(이것도 역시 모듈로 가능)

 

Domain에는 DTO가 될 Model, 앱에서 직업 사용할 Model등을 그룹을 만들어 넣어준다.

UseCase와 Repository Interface 그룹을 만들어서 넣어준다.

Repository Interface는 Data Layer에 있는 것이 맞지만 프로토콜로 정의한 파일을 Interface에 넣어준다.

 

Data에는 Domain그룹에서 정의한 Respository 들을 구현하여 Repository 파일을 만들어 넣어준다.

그리고 Service 그룹을 추가하여, API 관련 파일들을 넣어준다.(모듈화 가능)

 

Presentation에는 화면 구성에 필요한 ViewControllrer과 ViewModel, Coordinator를 만들어준다.

디자인 패턴에는 MVVM이고, Coordinator이 들어가야하기때문에 그룹으로 생성했다.

나중에는 화면 단위로 모듈화할 수도 있기 때문에, Coordinator를 화면 단위로 분리한다.

각각 그룹에는 파일이 들어가있어야 그룹이 생성되므로, 꼭 주의하도록 한다.

 

사용할 앱을 이렇게 만들어준다.

각 그룹안에 파일이 생성되어있다면, tuist fetch를 해서 필요한 spm 패키지를 적용시키고, tuist generaste 명령어를 통해 프로젝트를 생성하도록 한다.

tuist generate를 하고 나면, 위의 tree구조와 유사하게 나오는 것을 볼 수 있다.

 

이제부터 열심히 써야겠다..