피드로 돌아가기
모듈 구조를 개선해 더 나은 뱅크샐러드 iOS 앱 개발하기
뱅크샐러드 기술블로그뱅크샐러드 기술블로그
Mobile

모듈 구조를 개선해 더 나은 뱅크샐러드 iOS 앱 개발하기

뱅크샐러드 iOS 팀이 단일 모듈 구조를 3개의 독립 모듈(Constant, SwiftExtension, DIContainer)로 분리하고 DataInterface 모듈 신규 생성으로 의존성 역전 원칙 구현

2023년 11월 22일8intermediate

Context

뱅크샐러드 iOS 프로젝트는 초기 단일 모듈 구조에서 출시 후 기능 확대에 따라 Domain, Data, UI 레이어로 모듈을 분리했으나, 시간 경과에 따라 Shared 모듈에 역할이 불명확한 공용 코드들이 과도하게 축적되었다. 이에 따라 새로운 기능을 개발할 때 필요한 기능만 사용해도 불필요한 내·외부 의존성까지 포함하게 되는 문제가 발생했다.

Technical Solution

  • 과도하게 커진 Shared 모듈의 단계적 분리: 사용하지 않는 코드 제거 및 특정 모듈 전용 코드 이동 후 Constant(전역 상수), SwiftExtension(Swift 언어 확장), DIContainer(의존성 주입) 모듈로 분리
  • Data 레이어 인터페이스 추상화: Data 모듈에서 구현체의 접근 제한자를 모듈 내부 전용으로 변경하고 외부 모듈이 명세를 통해 의존성을 주입받도록 변경
  • DataInterface 모듈 신규 생성: Domain과 Data 모듈이 모두 DataInterface 모듈의 추상화에 의존하도록 설계해 의존성 역전 원칙 구현
  • 상속 관계를 합성 관계로 전환: Data 레이어 구현체를 상속받던 사용처들을 합성 패턴으로 변경하고 의존성 주입으로 전환

Key Takeaway

코드베이스가 확대되는 단계에서 공용 모듈의 책임을 분리하고 인터페이스를 추상화하면, 새로운 기능 개발 시 기존 모듈 간 불필요한 의존성을 차단할 수 있다.


iOS 또는 모바일 프로젝트에서 공용 기능이 증가할 때 모호한 이름의 단일 공용 모듈(예: Shared, Common) 대신 기능 단위의 독립 모듈로 분리하고, 계층 간 의존성을 추상화 인터페이스로 정의하면 새로운 기능 모듈 추가 시 기존 코드 변경을 최소화할 수 있다.

원문 읽기
모듈 구조를 개선해 더 나은 뱅크샐러드 iOS 앱 개발하기 | Devpick