Mash-Up 동아리 활동이 슬슬 시작되면서 프로젝트 팀 구성은 아직 되지 않았지만 스터디가 개설되었다. 나는 두가지의 스터디에 참여하게 되었는데 Tuist를 활용한 모듈화 스터디와 TCA 이렇게 두가지를 선택했다.

다른 동료들은 어떻게 모듈화를 해 나가는지, TCA를 공부할때 혼자 공부하니 잘 되지 않았던 것을 이번 기회에 둘 다 얻어가고싶어 신청하게 되었다.
먼저 오늘은 본격적인 모듈화 스터디가 시작되기 전에 어떤 방식으로 모듈화가 이뤄지는지, 모듈화 아키텍처가 왜 필요한지, 강점은 무엇인지 등 아주 기초적인 개념 정리를 하기 위해 블로그를 작성하게 되었다.
그럼 이제 하나하나 기초부터 알아보자
모듈화 아키텍처란?
모듈화 아키텍처는 애플리케이션의 기능과 책임을 여러 독립된 모듈로 분리하여 개발하는 설계 방식이다. 각 모듈은 자체적인 기능을 수행하며, 인터페이스를 통해 다른 모듈과 통신하게 된다. 이 방식은 복잡한 앱을 작고 관리하기 쉬운 단위로 분해하면서 전체 시스템의 유지보수 및 확장성 그리고 재사용성을 크게 향상시킬 수 있는 특징을 가진 아키텍처 구조이다.
그렇다면 이 모듈화 아키텍처가 필요한 이유는 무엇일까?
모듈화 아키텍처가 필요한 이유
사례들을 많이 찾아보니 주로 앱 사이즈가 점점 커져 관리하기 어려워지는 단계에 이른 대기업 혹은 많은 기능 구현이 되어있는 앱에서 점진적으로 이 아키텍처를 도입하는 것을 찾아볼 수 있었다.
먼저 찾아볼 수 있는 내용은 바로
- 코드의 유지보수성 향상
책임분리를 통해 각 모듈이 명확한 역할을 갖게 되기 때문에 어떤 문제가 발생했을 때 문제가 발생한 모듈만 집중적으로 분석하고 수정할 수 있는 형태가 된다.
또한, 독립적으로 테스트가 가능해지면서 모듈 단위 테스트를 할 수 있게 되어 빠르게 오류를 찾아내고 수정할 수 있게 된다.
- 빌드 및 배포 효율성
아까 말했듯 대기업 등 규모가 있는 앱의 경우엔 앱 자체 사이즈가 매우 크기 때문에 한번 빌드를 할때 30분정도 소요되는 등 문제가 있다는 글을 볼 수 있었다. 코드 변경이 발생하면 전체 앱을 다시 빌드할 필요가 없이 수정된 모듈만 빌드할 수 있게 되기 때문에 전체 코드를 빌드하는 것 보다 더욱 시간이 절약되는 효과가 있다.
뿐 만 아니라 특정 기능이나 모듈만 별도로 업데이트하거나 배포할 수 있어서 전체 시스템에 영향을 주지 않고 빠른 릴리즈가 가능하게 된다.
- 코드 재사용과 확장성
모듈화된 코드는 다른 프로젝트에서도 쉽게 import해 사용 할 수 있기 때문에 재사용성이 높아진다. 예를들어 공통으로 사용하는 로직이나 UI 컴포넌트들을 별도 모듈로 분리하면 여러 프로젝트에서 사용할 수 있게 된다.
그리고 시스템이 커지더라도 모듈 간 경계를 명확하게 하여 새로운 기능 추가나 기존 기능 개선 시 충돌을 최소화 할 수 있게 된다.
- 협업 효율성
여러 개발자가 동시에 작업할 때 모듈 단위로 업무를 분리하면 코드 충돌을 줄이고 협업 효율을 높일 수 있다. 또한 각 모듈을 독립된 라이브러리나 패키지로 관리하면, Git과 같은 버전 관리 시스템에서 충돌이나 병합 문제가 줄어드는 특징이 있다.
모듈화 아키텍처의 구성 요소
그렇다면 이 모듈화 아키텍처는 주로 어떤 구성 요소를 가진 상태로 분류하여 프로젝트를 관리하게 되는걸까 Clean Architecture의 개념을 활용해 구성 요소에 대해서 알아보자.
Domain 레이어
Entity, UseCase, Protocol 등 앱의 비즈니스 로직과 핵심 개념을 정의한다. 다른 레이어나 UI에 의존하지 않도록 설계해 순수한 비즈니스 로직만 포함하도록 구성한다.
Data 레이어
네트워크 통신, 데이터베이스 연동, 캐싱 등 실제 Repository 구현체들을 해당 레이어에 구성하도록 구현한다. 도메인과 분리되어 있으며, 구체적인 구현 방법은 자유롭게 변경이 가능하다는 점!
Presentation 레이어
사용자 인터페이스와 상호 작용을 담당하며 도메인의 UseCase를 활용해 사용자에 필요한 데이터를 가공하고 표시하는 역할을 담당한다!
Shared/Utility 모듈
여러 모듈에서 공통적으로 사용하는 기능 (로깅, 에러 핸들링, 공통 UI 컴포넌트)을 제공하는 역할을 담당한다. 재사용성이 매우 높기 때문에 여러 앱이나 모듈 간의 공통 로직을 이곳에서 관리하도록 구성한다.
그렇다면 이렇게 모듈화 아키텍처에 대해서 기초적인 내용을 알아보았는데 현재 진행하고 있는 프로젝트에 이 모듈화 아키텍처를 도입해 보고 싶다면 어떤 방식으로 접근 하면 좋을까
모듈화 아키텍처 도입의 접근 방법
이 모듈화 아키텍처는 처음부터 전면적으로 도입하기 보다는 점진적으로 전환하는 편이 좋은 것 같다 ( 아직 사용하기 미숙하다는 기준 ) 점진적으로 전환하는 방향에 대해 설명하면
- 핵심 도메인부터 분리하기
순수한 비즈니스 로직을 담은 Domain 레이어 부터, Swift Package를 통해 분리한다. 이렇게 하면 UI 나 외부 라이브러리의 영향을 받지 않는 순수 로직을 독립적으로 관리할 수 있게 된다. - 데이터 레이어 분리하기
네트워크, 데이터 베이스, 캐싱 등이 구현되어 있는 구현체를 별도의 모듈로 분리한다! 이때 도메인 레이어에 정의 된 인터페이스(프로토콜)를 구현하여 의존성 역전을 구현해야한다. - 프레젠테이션 레이어 분리하기
View와 ViewModel 등 UI 관련 코드를 별도의 모듈로 분리한다. 이렇게 하면 UI 관련 변경이 도메인이나 데이터 레이어에 영향을 주지 않고 독립적으로 관리할 수 있게 된다.
이러한 과정을 토대로 현재 내가 진행하고 있는 DepsChat 프로젝트에 점진적으로 도입을 해보려고 한다. 프로젝트를 통해 점진적으로 모듈화를 도입한 과정을 스터디에서 발표해야지 🙂
오늘은 정말 모듈화 아키텍처에 대한 기초 개념에 대해서만 알아보았다. 다음 시간부터는 실제 진행하고 있는 프로젝트를 통해 어떤 방식으로 모듈화 아키텍처로 전환하는지 기록으로 남길 예정!

오늘은 여기까지!!
'◽️ Programming > T I L' 카테고리의 다른 글
단방향 데이터 흐름이 왜 좋은데!? (0) | 2025.04.03 |
---|---|
모듈화 아키텍처를 적용해 재사용성 높히기 (0) | 2025.03.27 |
Moya를 활용해서 API 호출해 챗봇 기능 구현하기 (0) | 2025.03.17 |
WebSocket과 Starstream에 대해서 알아보자. (0) | 2025.02.17 |
fastlane를 활용한 CI/CD 환경 세팅하기 (0) | 2025.02.05 |