02 May 2023

Contents:

iOS 애플리케이션 아키텍처 채택하기

작성일 : 2023-05-02
작성자 : 안정민

상태

  • 수락됨(Accepted)

  • RIBs 아키텍처에서의 앱의 모듈화, 확장성, 유지보수성 보다 더 높이 제공하는 새로운 아키텍처가 있다면 다시 논의합시다.

배경

프로젝트가 커짐에 따라 모듈성, 확장성, 관심사 분리, 재사용성 등의 요구사항이 필요해졌습니다. 기존 MVC, MVVM 아키텍처를 사용했지만 늘어나는 기능에 제한적인 리소스를 감안하여 더 잘 맞는 아키텍처를 고려하고 채택해야합니다.

  • 템플릿화된 파일 템플릿 제공을 통해 많은 개발자가 일관성있는 코드를 작성하길 원합니다.
  • 테스트를 작성할 수 있는 구조여야 합니다.

결정

다양한 아키텍처 패턴을 신중하게 고려하고 평가한 후 새로운 기능 개발을 위해 RIB(Router, Interactor, Builder 및 View) 아키텍처를 채택하기로 결정했습니다.

이유

기존에 사용하고 있던 MVC, MVVM 모두 좋은 아키텍처이지만 프로젝트 요구사항과 팀 전문성을 신중하게 고려한 후 다음과 같은 이유로 RIBs를 사용하기로 결정했습니다.

  • 모듈성 및 확장성: RIBs 아키텍처에서 각 화면은 독립적인 모듈로 표현되며, 각 모듈은 Router, Interactor, Builder 및 View로 구성됩니다. Router는 모듈 간의 탐색 및 흐름을 담당하고, Interactor는 비지니스 로직을 포함하고 데이터 작업을 처리하며, Builder는 Router, Interactor, View를 연결하여 모듈 생성을 합니다. 다양한 구성 요소간의 결합을 줄이고, 모듈화되고 확장 가능한 구조를 가집니다.
  • 관심사 분리 : RIBs 아키텍처는 관심사를 명확하게 분리하여 개별 구성 요소를 보다 쉽게 ​​관리하고 테스트할 수 있도록 합니다.
  • 재사용성 : 애플리케이션의 여러 부분에서 쉽게 재사용할 수 있어, 개발 시간이 단축되고 코드 재사용성이 향상됩니다.

커지고 있는 우리 프로젝트의 요구 사항에 RIBs 아키텍처가 더 적합하다고 생각합니다.

결과 및 영향

RIBs 아키텍처를 우리 프로젝트에 적용하려면 몇 가지 사항을 주의해야합니다.

  • 학습곡선 : RIBs 아키텍처를 처음 접하는 팀원인 경우 배우고 구현하는데 시간과 노력이 필요합니다.
  • 오버엔지니어링 : 기능을 구현함에 있어 너무 많은 모듈로 분해하여 기능 개발시 오버엔지니어링할 위험이 있습니다. 이로 인해 복잡하고 유지보수하기 어려운 코드가 생성될 수 있습니다.
  • SwiftUI와 호환성 : 현재 RIBs 아키텍처는 UIKit 기반으로 작성된 예제가 많습니다. 하지만 SwiftUI 기반으로 View를 작성할 때 참고할 예제 및 자료가 많지 않아 방법을 찾는데 어려울 수 있습니다.
  • 기존 코드와 호환성 : 기존 MVC, MVVM으로 작성된 기능들을 RIBs로 작성된 기능과 연결해서 작업해야하거나, 반대로 RIBs에서 MVC, MVVM으로 작성된 기능을 연결하여 작업할 때 작성할 코드가 아직 모호하여 참고 자료 및 예제가 필요합니다.

결론

RIBs 아키텍처가 프로젝트에 보다 모듈화되고 확장 가능하며 유지 관리가 용이한 솔루션을 제공할 것이라고 믿습니다. 이 아키텍처 패턴을 채택하는 데 어려움이 있을 수 있음을 인정하지만, 이점이 위험보다 더 크다고 생각합니다.