샘플 프로젝트 주소

https://github.com/kudoleh/iOS-Modular-Architecture

Modular Architecture in iOS

Modular Architecture는 소프트웨어 engineering에 있어서 가장 인기있는 주제다. monolith 애플리케이션은 점점 커지면서 유지보수가 어려워지고 별도 모듈로 분리를 해야할 필요가 있다. 요즘 Backend 개발에 있어서도 MSA(Micro Service Architecture)가 점점 필수적인 기술로 여겨지고 있는데, 이 아티클에서는 iOS에서는 그것을 어떻게 구성하는지 알아볼 것이다.

사실 이 아티클 이전에 올레 쿠돌레 형님이 쓰신 Clean Architecture + MVVM이라는 아티클이 있다. (유명한 아티클이긴해서 1년차 iOS 개발자일 때, 한 번 다 읽어보긴 했다. 그 땐 1도 못알아봤지만) 이 예제에서 처럼 앱을 독립적인 모듈(e.g. NetworkingService, TrackingService, ChatFeature, PaymentsFeature...)로 분리해서 프로젝트를 개선하는 방법을 보여준다. 모듈 분리는 팀이 이러한 모듈을 빠르고 독립적으로 작업하는 데 도움이 될 수 있다.

Clean Architecture + MVVM과 같은 좋은 아키텍처를 사용할 때 monolith 방식의 앱이 나쁘지는 않다. 그러나 앱이 하나의 어떤 단일 개체로서 매우 커질 수도 있다. 그리고 더 빠른 빌드와 프레임워크로 재사용 가능한 모듈, 분리된 모듈을 만들어 사람들이 별도의 cross-functional team(밴드나 스쿼드 조직)에서 쉽게 작업할 수 있도록 해야한다.

큰 회사들은 보통 앱을 수십개의 모듈로 분리한다. 저자는 하나의 Monolith앱을 12개의 모듈로 분할했고, 새로운 기능을 추가할 때 항상 새 모듈을 만든다고 한다.

이것을 Modular Architecture라고 부르고 다른 플랫폼(안드로이드, RN, Flutter 등)에도 적용할 수 있는 기술이다. 이 아키텍처에서 앱은 Shared 및 Core 모듈에 의존하는 완전히 독립적인 기능 모듈로 분리된다.

https://tech.olx.com/modular-architecture-in-ios-c1a1e3bff8e9

https://tech.olx.com/modular-architecture-in-ios-c1a1e3bff8e9

이 아티클에서는 monoith 방식으로 구현된 앱을 Networking Service와 영화 검색 기능이라는 격리된 모듈로 분리하는 방법을 보여준다. Networking Service 모듈은 앱 내에서 구성되고 영화 검색 기능에 삽입된다.

그리고 아티클의 마지막에서는 모든 모듈에 자체 Clean Architecture + MVVM, 도메인 및 DIContaine r가 있는 큰 크기로 확장할 수 있는 방법을 볼 수 있다. 마치 아래의 그림처럼!

https://tech.olx.com/modular-architecture-in-ios-c1a1e3bff8e9 - Scaled Modular Architecture

https://tech.olx.com/modular-architecture-in-ios-c1a1e3bff8e9 - Scaled Modular Architecture

참고: 위 그래프에 대한 자세한 설명은 앞으로 나올 How Modular Architecture Scale 섹션에 나와 있다.