
핵심요약
뱅크샐러드 iOS 프로젝트의 모듈 구조 개선 과정을 다루며, 과도하게 커진 공용 코드 모듈을 분리하고 의존성 역전 원칙을 적용하여 더욱 유연한 아키텍처를 구축한 사례를 소개합니다.
뱅크샐러드 iOS 모듈 구조 개선: 유연하고 확장 가능한 아키텍처 구축
기존 모듈 구조의 문제점과 개선 필요성
- 초기 단일 모듈에서 기능 확장으로 인한 코드 복잡도 증가 및 무분별한 의존성 문제 발생.
Shared라는 모호한 이름의 거대 공용 코드 모듈이 비대해져 불필요한 내부/외부 코드 의존성 유발.Data레이어가 자체 인터페이스를 소유하여 향후 통신 방식(REST, gRPC)이나 데이터 출처(캐시, 서버)에 따른 모듈 분리 시 의존성 역전 원칙 위배 및 모듈 간 불필요한 의존 문제 예상.
거대 Shared 모듈의 효율적 분리 전략
Live Activity기능 도입을 계기로 SwiftUI/SwiftConcurrency 기반의 새로운 모듈이 기존 공용 코드의 최소 부분만 필요로 하는 상황 발생.- 사용하지 않는 코드 제거 및 특정 모듈 코드 이전을 통해 유효 코드만 남기는 준비 작업 수행.
- 독립 가능한 기능 식별 후,
Constant,SwiftExtension,DIContainer와 같은 명확한 목적의 소규모 모듈로 분리하여 의존성 경량화. - 최종적으로
Shared모듈을 완전히 제거하고 각 기능의 독립성을 강화하는 것을 목표로 지속적인 분리 진행.
의존성 역전 원칙(DIP)을 통한 Data 레이어 유연성 확보
- 클린 아키텍처 적용으로
Domain과Data레이어를 분리했으나,Data레이어가 **인터페이스(명세)**를 함께 소유하는 구조적 한계 노출. Data모듈 내 구현체의 접근 제한자 변경 및 합성(Composition) 방식을 활용하여 구현체에 대한 직접적인 의존성 제거.DataInterface라는 추상화된 별도 모듈을 생성하여 명세를 이동시키고,Domain및Data모듈이DataInterface에만 의존하도록 재설계.- 이로써
Data모듈 분할 시 발생할 수 있는 모듈 간 불필요한 의존성 문제를 해결하고, 유연하고 확장 가능한 아키텍처 기반 마련.