[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유

2024. 5. 25. 00:01🍏/Architecture

https://github.com/chanheki/swifty-proteins/

가장 큰 이유는 프로젝트에 모듈화를 적용해보고 싶었습니다.

기존에 있던 프로젝트에 모듈화를 해보는 것도 좋겠지만, 그렇게 하는게 더 접근이 더 어려울것 같아서 처음부터 모듈화된 프로젝트를 만들어서 개발해보고 싶었습니다. 

모듈화의 큰 장점인 수평적 확장이 가능하다는 점과 단위 테스트의 용이성을 경험해보고 싶어서 개발 방향을 잡았습니다.

비교 요약

특성 모듈화 모놀리식
독립성 높은 독립성, 모듈별로 독립적인 테스트 가능 낮은 독립성, 모든 코드가 하나의 코드베이스에 있음
재사용성 높은 재사용성, 모듈별로 재사용 가능한 테스트 낮은 재사용성, 코드베이스 전체에 적용되는 테스트
설정 및 관리 복잡성 높은 설정 및 관리 복잡성 낮은 설정 및 관리 복잡성
의존성 관리 복잡한 의존성 관리 단순한 의존성 관리
변경 영향 변경의 영향이 제한적 변경의 영향이 큼
테스트 간 간섭 낮은 테스트 간 간섭 높은 테스트 간 간섭
스케일 문제 확장성 용이 확장성 문제 발생
병렬 개발 및 테스트 병렬 개발 및 테스트 용이 병렬 개발 및 테스트 어려움

모듈화된 프로젝트는 독립적이고 재사용 가능한 모듈을 통해 유지보수성과 확장성을 높이는 반면, 설정 및 관리가 복잡할 수 있습니다. 반면 모놀리식 프로젝트는 단일 코드베이스로 인해 관리가 단순하지만, 확장성과 병렬 개발에 어려움이 있을 수 있습니다. 프로젝트의 요구사항과 팀의 역량에 따라 적절한 아키텍처를 선택하는 것이 중요합니다.


모듈러 아키텍처를 적용하는 이유

  1. 유지보수성 향상:
    • 각 모듈이 독립적으로 관리되기 때문에 특정 모듈에 문제가 생겼을 때 전체 시스템에 영향을 주지 않고 수정이 가능합니다.
  2. 재사용성 증가:
    • 공통 기능을 가진 모듈을 여러 프로젝트에서 재사용할 수 있습니다. 이를 통해 개발 시간을 절약하고 코드의 일관성을 유지할 수 있습니다.
  3. 협업 효율성 향상:
    • 팀 구성원이 서로 다른 모듈을 병렬로 개발할 수 있습니다. 모듈 간의 의존성이 명확히 정의되어 있기 때문에 충돌이 줄어듭니다.
  4. 확장성 개선:
    • 새로운 기능을 추가하거나 기존 기능을 확장할 때, 관련 모듈만 수정하면 되므로 시스템 전체를 재작업할 필요가 없습니다.
  5. 테스트 용이성:
    • 각 모듈이 독립적으로 테스트될 수 있기 때문에, 모듈 단위로 단위 테스트 및 통합 테스트를 수행하기 쉽습니다.

모듈러 아키텍처의 장점

  1. 유지보수 및 디버깅 용이:
    • 모듈 간의 결합도가 낮아 각 모듈을 독립적으로 디버깅할 수 있습니다.
  2. 코드 품질 향상:
    • 모듈화된 구조는 코드의 일관성을 유지하고, 코드 리뷰와 정적 분석 도구를 통해 품질을 높일 수 있습니다.
  3. 생산성 증가:
    • 독립적인 모듈 개발로 인해 팀원들이 병렬로 작업할 수 있어 전체 개발 속도가 빨라집니다.
  4. 의존성 관리:
    • 모듈 간의 의존성을 명확히 정의하여 의존성 관리가 용이해집니다. 이를 통해 의존성 충돌을 방지할 수 있습니다.
  5. 가독성 및 이해도 향상:
    • 코드베이스가 잘 조직되어 있어 새로운 팀원이 프로젝트를 이해하고 기여하는 데 도움이 됩니다.

모듈러 아키텍처의 단점

  1. 초기 설계의 복잡성:
    • 초기 단계에서 모듈을 정의하고 설계하는 데 많은 시간과 노력이 필요합니다.
  2. 오버헤드 증가:
    • 모듈 간의 인터페이스와 의존성을 관리하는 데 추가적인 오버헤드가 발생할 수 있습니다.
  3. 성능 문제:
    • 모듈 간의 데이터 전송이나 호출이 빈번할 경우 성능 저하가 발생할 수 있습니다. 특히, 네트워크나 디스크 I/O가 많은 경우 더 두드러집니다.
  4. 배포 및 버전 관리:
    • 각 모듈의 버전을 별도로 관리해야 하므로 배포 과정이 복잡해질 수 있습니다. 여러 모듈이 동시에 업데이트될 때의 호환성 문제도 고려해야 합니다.
  5. 초기 학습 비용:
    • 모듈러 아키텍처를 처음 접하는 개발자에게는 학습 곡선이 있을 수 있습니다.

요약

모듈러 아키텍처는 유지보수성, 재사용성, 협업 효율성, 확장성, 테스트 용이성 등의 많은 장점을 제공하지만, 초기 설계의 복잡성, 오버헤드 증가, 성능 문제, 배포 및 버전 관리의 어려움 등 몇 가지 단점도 존재합니다. 따라서, 프로젝트의 요구사항과 팀의 역량을 고려하여 모듈러 아키텍처를 적용하는 것이 중요합니다.