티스토리 뷰

01.

RxSwift + MVVM-C로 되어있는 프로젝트를 Combine, Clean Architecture, Tuist로 마이그레이션 계획을 세웠다.

RxSwift를 걷어내고 싶은 이유는 다음과 같다..


1.  ThirdParty이기 때문에 애플에서 권장하는 FirstParty인 Combine 프레임워크를 사용해보고 싶었다.

2.  이미 다른 프로젝트들에서 RxSwift(잘 사용하지는 않지만,,)를 사용해본 경험이 있어 Combine을 선택한 이유도 있다..!

3.  마지막 이유는 SwiftUI와 데이터 바인딩에 유리하다는 이야기를 듣고,, (언젠간 사용할 예정) 선택하게 되었다..

결론은 써보고 싶어서,, 이게 가장 큰 이유 ,,!
다음으로 Tuist를 적용한 이유는..!

 

1. .xcodeproj 파일로 되어있어 conflict가 나지 않는다고 하는데, 1인 개발이라서 해당 이유는 패스,,!

 

2. 모듈별로 역할과 책임을 명확히 나누고 싶어서 도입한 것이 가장 큰 이유인 것 같다..!

각 역할과 책임을 명확하게 나누고,, 거기에 맞게 모듈을 구성하고 필요할 때 import해서 사용하는 것이 깔끔하다고 생각했다. 

 

3. 마지막 이유로는 빌드 속도 개선인데 (2번과 관련)기존 RxSwift로 구현되어있는 프로젝트 파일의 빌드 속도는 4.23s이다.
음,, Tuist로 도입하여 마이그레이션을 진행했을 때, 현재는 2.12s가 나온다. 앱의 규모가 작아서 다이나믹한 차이는 없지만 추후에 업데이트를 진행하며 규모가 커진다면 크나큰 효과를 볼 수 있을 것 같다.

Tuist

Tuist를 사용하며 모듈을 나눈 기준에 대해 설명하기 앞서, 일주일동안 여러 삽질을 거쳤다.
  1. 모듈이 생성 안되는 이슈
  2. AppDelegate는 호출이 되는데 SceneDelegate는 호출이 안되는 이슈
  3. cocoapods 이슈
해결 방법은 다음과 같은데 프로젝트 폴더 경로, 생성 이름, 의존 관계가 맞는지, infoPlist가 잘 설정이 되어있는지,, 해당 부분이 모두 맞아야 잘 생성이 된당 .. 되게 까다롭다 흘글긓ㄱ

다만, 마지막 cocoapods 이슈는 해결하지 못했다.. git-lfs로 설치를 해봐도!!!!!!! NMapsMap을 SPM처럼 사용할 수 있게 해도!!!!!!!! 흠,, 해결이 되지 않았다.. 아오 !!! 

 

자 그럼 다음으로 ..! 어떻게 모듈을 나눴냐면,,! 에 앞서 모듈이란 과연 무엇일까에 대한 의문이 들었다..

모듈은 코드의 묶음 단위로 프레임워크, 라이브러리, 어플리케이션처럼 배포할 코드들의 묶음을 말한다. 즉 하나의 프레임워크는 하나의 모듈이고 우리가 Xcode로 만드는 프로젝트 역시 하나의 모듈입니다. 그리고 우리는 import를 통해 외부 모듈을 우리의 프로젝트(모듈)에서 사용할 수 있다. 

 

간단히 말하면 우리가 import해서 사용하고 있는 것들 모두 모듈이며, Xcode 프로젝트 파일 역시 모듈이다.

 

open, public 즉 접근제어자를 이해한다면 모듈의 개념은 쉽게 이해할 수 있을 것이당 ..!

 

자,, 다음으로는 모듈을 나눈 기준은 클린 아키텍처를 적용함으로 각 레이어에 맞게 만들어 줬다.

 

TripStyle, Domain, Data, Feature, Modules 다섯개의 모듈 아래 좀 더 세분화해서 설계를 진행했다. (자세한 내용은 다음 개발 일지에 !!!)

 

각 모듈의 역할과 책임을 명확히 하기 위해 많은 고민을 했고, 카카오뱅크의 tuist 도입 영상 그리고 여러 프로젝트들을 참고하여 구현하였당..

 

모듈간 의존 관계

 

개선이 필요한 부분을 살펴보면 다음 사진에서 구조 개선이 필요하당..

 

CustomView는 어느 모듈에 있어야 하나?에 대한 고민이다.

 

DSKit은 Assets, Colors, Fonts 등 말 그대로 DesignSystem에 관한 것들을 담았다.

 

BaseFeatureDependency는 현재 Coordinator를 구현하면서 Protocol과 베이스가 되는 객체들이 있다.

 

모듈 간 레이어가 BaseFeatureDependency -> DSKit -> Core 로 향한다.

 

CustomView를 만약 Core에 만들게 된다면 DSKit의 기능들을 사용할 수 없다. (Circular Dependency 발생)

 

현재는 BaseFeatureDependency에 공통으로 사용하고 있는 CustomView들이 위치하는데 구조 개선에 대한 고민이 필요한 부분이다.

 

잘가랑 ..

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함