앱 모듈화
개요
단일 Gradle이 아닌, 여려 Gradle 모듈이 있는 프로젝트를 다중 모듈 프로젝트라고 한다. (모듈화의 결과)
배경
- 증가하는 코드의 문제
프로젝트가 진행되면서 코드베이스가 계속 증가하게 되는데, 시간이 지남에 따라 확장성, 가독성 및 전반적인 품질이 떨어지는 경우가 많다.
모듈화는 유지 관리 가능성을 개선하고 이런 문제를 방지할 수 있는 방식으로 코드베이스를 구조화 하는 방법이다.
모듈화란?
모듈화는 코드베이스를 느슨하게 결합된 독립적인 부분으로 구성하는 방법이다.
각 모듈은 독립적이며 명확한 역할을 한다.
하위 문제를 해결하기 위해 문제를 더 작고 쉬운 문제로 나누면 대형 시스템 설계와 유지보수의 복잡성이 줄어들게 된다.
모듈화의 장점
- 재사용성 - 모듈화를 사용하면 코드를 공유하고 동일한 기반을 토대로 여러 앱을 빌드할 수 있다.
- 캡슐화 - 모듈을 사용하면 코드베이스의 다른 부분에 노출할 내용을 쉽게 제어할 수 있다. 공개 인터페이스를 제외한 모든 항목을 internal 또는 private으로 표시하여 모듈 외부에서 사용하지 못하도록 할 수 있다.
- 유연성 - 코드베이스의 결합도가 낮아지기 때문에, 앱을 확장하거나 수정할 필요가 있을 때, 잘 대처 할 수 있다.
- 빌드 시간 개선 -빌드 캐시 또는 병렬 빌드와 같은 일부 Gradle 기능은 모듈성을 활용하여 빌드 성능을 개선할 수 있다.
모듈화의 단점
- 세분화가 됨 - 빌드 복잡성과 보일러플레이트 코드가 늘어남으로써 모든 모듈에서 일정량의 오버헤드가 발생한다. 또, 복잡한 빌드 구성으로 인해 모듈 간에 일관된 구성을 하기가 어렵습니다. 오버헤드가 확장성 개선에 해가 되는 경우 일부 모듈을 통합하는 것이 좋습니다.
- 대략적임 - 모듈이 너무 커지게 되면 또 하나의 모놀리식 코드가 될 수 있으며, 모듈이 제공하는 이점을 해칠 수 있음
- 복잡함 - 코드베이스가 여러 뭉치로 나누어지기 때문에 어느 곳에 어느 코드가 있는지 헷갈릴 수 있음. 프로젝트 코드베이스를 확인하고 모듈화의 정도를 생각해봐야함
높은 응집력(comprehension)과 낮은 결합력(coupling)
모듈식 코드베이스를 특징짓는 한 가지 방법은 결합력 및 응집력을 나타내보고자 하는 것다. 결합력은 모듈이 서로 종속된 정도를 측정합니다. 이 맥락에서 응집력은 단일 모듈의 요소가 기능적으로 관련된 방식을 측정한다. 일반적으로 결합력은 낮추고 응집력은 높여야 합니다.
- 결합력이 낮다는 것은 모듈이 최대한 서로 독립적이어야 한다는 의미이다. 그러면 한 모듈의 변경사항이 다른 모듈에 미치는 영향이 없거나 최소화된다. 모듈은 다른 모듈의 내부 작동을 알 수 없어야 한다.
- 응집력이 높다는 것은 모듈이 시스템 역할을 하는 코드 모음으로 구성되어야 함을 의미다. 모듈은 맡은 일이 명확히 규정되어 있고 특정 도메인 지식의 범위를 벗어나지 않아야 합니다.
- eBook 애플리케이션을 생각해보자. 동일한 모듈에 도서와 결제 관련 코드를 함께 사용하는 것은 부적절할 수 있다. 두 코드가 서로 다른 두 개의 기능 도메인이기 때문이다.
모듈화 예시
위 그림처럼 기능(feature)별로 모듈화를 해 볼 수도 있고, 클린 아키텍처 계층 (UI layer - domain layer - data layer)로 나누어 볼 수도 있을 것 같다. (각 계층 내에서도 나누어 볼 수 있을 것 같다.)
진행하는 프로젝트의 크기나 방향성에 따라서 적절한 모듈화를 진행하면 코드관리에 용이할 것이다.
'TIL' 카테고리의 다른 글
2024-01-26 (0) | 2024.01.26 |
---|---|
2024-01-18 (0) | 2024.01.18 |
2024-01-12 (1) | 2024.01.13 |
2023-12-28 (0) | 2023.12.28 |
2023-12-22 (0) | 2023.12.23 |