iOS Onestore Global 프로젝트 아키텍처
개발 방식의 진화
Apple의 iOS 개발 환경은 지속적으로 발전해 왔습니다.
- 과거: Objective-C와 Xib를 사용한 전통적인 개발 방식
- 현재: 2019년 Apple이 공개한 SwiftUI를 통한 선언형 구조의 개발 방식
SwiftUI는 출시 이후 지속적인 업데이트를 통해 더욱 강력하고 유연한 개발 환경을 제공하고 있습니다.
Clean Architecture 도입
SwiftUI의 등장과 함께 다양한 아키텍처 패턴이 제시되었습니다.
Onestore Global iOS 프로젝트에서는 널리 사용되는 Clean Architecture를 채택하기로 결정했습니다.
Clean Architecture 개요
💡 Clean Architecture란, 계층형 구조를 가진 시스템 아키텍처로 하위 계층은 상위 계층에 의존성을 가지면 안 되는 구조를 뜻합니다.
- 계층 간 명확한 경계와 책임 분리
- 비즈니스 로직과 외부 프레임워크의 분리
- 테스트 용이성 증대
Clean Architecture의 이점
- 모듈화된 개발 : 시스템의 각 부분을 독립적으로 개발 및 테스트 가능
- 유연한 시스템 관리 : 특정 부분만 수정 가능하여 전체 시스템에 미치는 영향 최소화
- 장기적 유지보수성 향상 : 코드의 가독성과 구조 개선
- 기술 스택 변경 용이성 : 외부 프레임워크 교체 시 핵심 비즈니스 로직 보호
프로젝트 진행 중 발생한 문제
Clean Architecture를 도입했음에도 불구하고, 프로젝트 규모가 커지면서 다음과 같은 문제점들이 발생했습니다.
- 의존성 폭발 : 모듈 간 의존성이 급격히 증가하여 관리가 어려워짐
- 순환 참조 : 모듈 간 순환 참조로 인한 구조 분석의 어려움 발생
- 경계 모호 : 각 모듈의 경계와 정의가 불명확해져 책임 분리가 어려워짐
- 빌드 시간 증가 : 의존성 증가로 인한 빌드 성능 저하 발생
이러한 문제들은 Clean Architecture를 제대로 활용하지 못했을 때 일반적으로 발생할 수 있는 이슈들입니다.
팀 내에서도 개발 파트가 다양해지면서 이러한 문제점들이 더욱 두드러지게 나타났습니다.
Tuist 도입을 통한 개선
위 문제들을 해결하기 위해 Tuist를 도입하기로 결정했습니다.
Tuist란?
Tuist는 Modular Architecture를 기반으로 Xcode 프로젝트 생성과 유지관리를 편리하게 하는 CLI 도구입니다.
Modular Architecture란 재사용성과 확장성을 고려하여 최소한의 의존성을 가지고 독립적으로 기능할 수 있는 구조를 이야기합니다.
- 주요 장점
- .xcodeproj 파일의 git conflict 방지
- 모듈 구성 간소화로 복잡도 감소
- 빌드 속도 개선
Tuist 도입 효과
-
모듈화 개선
- 명확한 모듈 경계 설정으로 의존성 관리 용이
- 각 모듈의 책임과 역할이 더욱 명확해짐
Tuist로 정리된 모듈 관계도
-
빌드 성능 향상
- 중앙집중식 의존성 관리로 빌드 시간 단축
- 불필요한 의존성 제거로 컴파일 시간 감소
1분 35초 → 31초 단축
-
협업 효율성 증대
- 프로젝트 파일 충돌 감소로 팀 작업 효율성 향상
- 모듈 단위의 개발로 병렬 작업 가능성 증가
-
유지보수성 개선
- 모듈 단위의 개발로 코드 관리 및 테스트 용이성 증가
- 독립적인 모듈 업데이트 및 교체 가능
Tuist 도입을 통해 Clean Architecture의 장점을 최대한 활용하면서도, 기존에 발생했던 문제점들을 효과적으로 해결할 수 있었습니다.
이는 프로젝트의 확장성과 유지보수성을 크게 향상시켰습니다.
결론
Modular Architecture와 Tuist의 도입은 Onestore Global 프로젝트에 다음과 같은 이점을 제공했습니다.
- 📊 높은 테스트 커버리지 : 모듈화된 구조로 단위 테스트 작성 용이
- 🔧 효율적인 유지보수 : 명확한 모듈 경계로 코드 수정 및 업데이트 간소화
- 🚀 빠른 기능 개발 및 배포: 독립적인 모듈 개발로 개발 속도 향상
- 🛠 기술 부채 감소 : 체계적인 구조로 인한 코드 품질 향상
이러한 개선을 통해 장기적으로 프로젝트의 품질과 개발 생산성이 크게 향상되었습니다.
또한, 팀원들의 협업 효율성도 증가하여 더욱 효과적인 프로젝트 관리가 가능해졌습니다.
앞으로도 지속적인 아키텍처 개선과 최신 기술 도입을 통해 Onestore Global 프로젝트의 경쟁력을 유지하고, 사용자에게 더 나은 서비스를 제공할 수 있을 것으로 기대됩니다.