[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유
2024. 5. 25. 00:01ㆍ🍏/Architecture
https://github.com/chanheki/swifty-proteins/
가장 큰 이유는 프로젝트에 모듈화를 적용해보고 싶었습니다.
기존에 있던 프로젝트에 모듈화를 해보는 것도 좋겠지만, 그렇게 하는게 더 접근이 더 어려울것 같아서 처음부터 모듈화된 프로젝트를 만들어서 개발해보고 싶었습니다.
모듈화의 큰 장점인 수평적 확장이 가능하다는 점과 단위 테스트의 용이성을 경험해보고 싶어서 개발 방향을 잡았습니다.
비교 요약
특성 | 모듈화 | 모놀리식 |
독립성 | 높은 독립성, 모듈별로 독립적인 테스트 가능 | 낮은 독립성, 모든 코드가 하나의 코드베이스에 있음 |
재사용성 | 높은 재사용성, 모듈별로 재사용 가능한 테스트 | 낮은 재사용성, 코드베이스 전체에 적용되는 테스트 |
설정 및 관리 복잡성 | 높은 설정 및 관리 복잡성 | 낮은 설정 및 관리 복잡성 |
의존성 관리 | 복잡한 의존성 관리 | 단순한 의존성 관리 |
변경 영향 | 변경의 영향이 제한적 | 변경의 영향이 큼 |
테스트 간 간섭 | 낮은 테스트 간 간섭 | 높은 테스트 간 간섭 |
스케일 문제 | 확장성 용이 | 확장성 문제 발생 |
병렬 개발 및 테스트 | 병렬 개발 및 테스트 용이 | 병렬 개발 및 테스트 어려움 |
모듈화된 프로젝트는 독립적이고 재사용 가능한 모듈을 통해 유지보수성과 확장성을 높이는 반면, 설정 및 관리가 복잡할 수 있습니다. 반면 모놀리식 프로젝트는 단일 코드베이스로 인해 관리가 단순하지만, 확장성과 병렬 개발에 어려움이 있을 수 있습니다. 프로젝트의 요구사항과 팀의 역량에 따라 적절한 아키텍처를 선택하는 것이 중요합니다.
모듈러 아키텍처를 적용하는 이유
- 유지보수성 향상:
- 각 모듈이 독립적으로 관리되기 때문에 특정 모듈에 문제가 생겼을 때 전체 시스템에 영향을 주지 않고 수정이 가능합니다.
- 재사용성 증가:
- 공통 기능을 가진 모듈을 여러 프로젝트에서 재사용할 수 있습니다. 이를 통해 개발 시간을 절약하고 코드의 일관성을 유지할 수 있습니다.
- 협업 효율성 향상:
- 팀 구성원이 서로 다른 모듈을 병렬로 개발할 수 있습니다. 모듈 간의 의존성이 명확히 정의되어 있기 때문에 충돌이 줄어듭니다.
- 확장성 개선:
- 새로운 기능을 추가하거나 기존 기능을 확장할 때, 관련 모듈만 수정하면 되므로 시스템 전체를 재작업할 필요가 없습니다.
- 테스트 용이성:
- 각 모듈이 독립적으로 테스트될 수 있기 때문에, 모듈 단위로 단위 테스트 및 통합 테스트를 수행하기 쉽습니다.
모듈러 아키텍처의 장점
- 유지보수 및 디버깅 용이:
- 모듈 간의 결합도가 낮아 각 모듈을 독립적으로 디버깅할 수 있습니다.
- 코드 품질 향상:
- 모듈화된 구조는 코드의 일관성을 유지하고, 코드 리뷰와 정적 분석 도구를 통해 품질을 높일 수 있습니다.
- 생산성 증가:
- 독립적인 모듈 개발로 인해 팀원들이 병렬로 작업할 수 있어 전체 개발 속도가 빨라집니다.
- 의존성 관리:
- 모듈 간의 의존성을 명확히 정의하여 의존성 관리가 용이해집니다. 이를 통해 의존성 충돌을 방지할 수 있습니다.
- 가독성 및 이해도 향상:
- 코드베이스가 잘 조직되어 있어 새로운 팀원이 프로젝트를 이해하고 기여하는 데 도움이 됩니다.
모듈러 아키텍처의 단점
- 초기 설계의 복잡성:
- 초기 단계에서 모듈을 정의하고 설계하는 데 많은 시간과 노력이 필요합니다.
- 오버헤드 증가:
- 모듈 간의 인터페이스와 의존성을 관리하는 데 추가적인 오버헤드가 발생할 수 있습니다.
- 성능 문제:
- 모듈 간의 데이터 전송이나 호출이 빈번할 경우 성능 저하가 발생할 수 있습니다. 특히, 네트워크나 디스크 I/O가 많은 경우 더 두드러집니다.
- 배포 및 버전 관리:
- 각 모듈의 버전을 별도로 관리해야 하므로 배포 과정이 복잡해질 수 있습니다. 여러 모듈이 동시에 업데이트될 때의 호환성 문제도 고려해야 합니다.
- 초기 학습 비용:
- 모듈러 아키텍처를 처음 접하는 개발자에게는 학습 곡선이 있을 수 있습니다.
요약
모듈러 아키텍처는 유지보수성, 재사용성, 협업 효율성, 확장성, 테스트 용이성 등의 많은 장점을 제공하지만, 초기 설계의 복잡성, 오버헤드 증가, 성능 문제, 배포 및 버전 관리의 어려움 등 몇 가지 단점도 존재합니다. 따라서, 프로젝트의 요구사항과 팀의 역량을 고려하여 모듈러 아키텍처를 적용하는 것이 중요합니다.
'🍏 > Architecture' 카테고리의 다른 글
[Clean Architecture, SwiftUI] SwiftUI를 위한 클린 아키텍처 (2) | 2024.09.07 |
---|---|
[Clean Architecture] Presentation(MVVM), Domain, Data (0) | 2024.08.30 |
[Architecture] Modular Architecture iOS 개념 정리 (0) | 2024.05.24 |
[Architecture] Matching MVVM architecture in a modular architecture (0) | 2024.05.23 |
[Architecture] Matching Cocoa-MVC architecture in a modular architecture (0) | 2024.05.22 |