빌드 최적화를 위해 모듈화의 필요성을 인지하고, 각 피처에 대한 데모 프로젝트를 구성했습니다.

모듈화하는 과정에서 겪은 어려움은 다음과 같습니다:

  1. A 피처의 화면에서 B 피처의 화면을 표시해야 할 때 의존성 설정에 어려움

A 피처에서 B 피처 전체 모듈을 import하면 의존성이 비효율적으로 형성되어 각 피처의 모듈을 분리하기로 결정했습니다. 각 피처에는 interface 모듈을 생성하여 다른 피처에 주입하는 방식을 채택했습니다. A 피처의 Coordinator에서 delegate를 정의하고, B 피처의 화면을 표시하는 이벤트가 발생하면 delegate에서 함수를 호출합니다. B 피처에서는 A 피처의 interface 모듈을 import하고 A 피처의 Coordinator에서 정의된 delegate를 준수하여 화면을 표시하는 방식으로 문제를 해결할 수 있었습니다.

  1. 가장 상위 모듈인 Domain 모듈을 분리하면 Entity 수정이 다른 피처에 영향을 미칠 수 있음

처음에는 각 피처마다 Entity를 만드는 방식을 채용했으나, 공유되는 Entity가 많아지고 변경 사항이 공통적으로 적용되어 문제가 발생했습니다. 따라서 Domain 모듈을 다시 구성하기로 결정했습니다.

모듈화를 통해 빌드 시간을 2.5초에서 1.5초로 약 40% 단축할 수 있었습니다.

모듈화된 Graph는 다음과 같습니다.

Untitled

WorkSpace

여러 프로젝트를 통합 관리를 위한 WorkSpace

파라미터로 앱 이름(Falling) 및 워크 스페이스로 결합될 프로젝트 파일 경로 설정(Projects/*)

Projects

WorkSpace에 통합 관리할 프로젝트들의 집합