목차
- 모듈화란?
- 모듈화를 왜 해야할까?
- 모듈화를 하게되면?
- Tuist
매주 아티클 스터디를 진행하면서 이번엔 어떤 주제를 할까 고민하다가 iOS 진영에서 가장 핫한 토픽 중 하나인 모듈화에 대해 이야기하고자 합니다. 파고들면 파고들수록 어려운 주제이지만 이번 포스팅에선 최대한 가볍게 풀어봅시다!
모듈화란?
모듈(Module)
소프트웨어 설계에서 기능단위로 분해하고 추상화되어 재사용 및 공유 가능한 수준으로 만들어진 단위
모듈화(Modularization)
소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법
모듈화를 왜 해야할까?
개발 리소스 증가
프로젝트가 성장하면서 개발자가 늘어나고 기능이 많아질수록 코드량이 늘어납니다.
클라이언트 개발에서는 개발 과정에서 로컬 빌드를 수도 없이 하기 때문에, 빌드 시간이 굉장히 중요한데 늘어난 코드들에 의해 빌드 시간 즉, 개발 시간 증가로 이어집니다. 또한 아무리 개발 규칙을 잘 정한다 하더라도 개발 요구사항에 따른 변수에 의해 코드들의 결합도가 증가하기 마련입니다. 결과적으로 유지보수 비용이 증가하고 개발 스트레스가 증가합니다.
모듈화를 하게되면?
1. 빌드 속도 개선
위 예시는 제가 하고 있는 프로젝트의 빌드 시간을 측정한 예시입니다. 앱 전체를 빌드하는 경우 51.7초가 걸리는 반면, 하나의 기능을 가진 Feature를 단일로 빌드하면 32.7초로
약 40% 가까이 빌드 속도를 개선할 수 있었습니다.
2. 프리뷰
클라이언트 개발을 하다보면 UI를 만들기 위해 코드 작성, 빌드, UI확인 과정을 반복하게 됩니다.
이 문제를 해결하기 위해 XCode15부터 프리뷰 기능을 지원하는데, 프로젝트 사이즈가 커지면 프리뷰가 동작하지 않아 규모가 있는 프로젝트에선 활용하기 어려웠습니다.😨 모듈화를 하게 되면 빌드 범위를 작게 나누어 지기 때문에 다시 활용할 수 있었습니다.
3. 데모 앱
기능 동작을 테스트 하기 위해 앱 전체를 빌드하면, 원하는 기능이 있는 곳까지 여러 뎁스를 거쳐 테스트를 해야 했습니다. 각 View(Controller) 또는 기능이 있는 모듈들을 모듈화를 통해 느슨한 결합 상태로 만들어 놓으면, 레고를 조립하듯 모듈을 조립해 데모앱을 만들 수 있습니다.
이러한 데모앱을 통해 디자이너나 테스터들한테 빠르게 배포하고 피드백을 받을 수 있습니다.
4. 코드 안정성 & 개발 생산성
- 모듈이 물리적으로 분리되므로 아키텍쳐를 강제할 수 있습니다.
- 휴먼 에러 또는 개발 기한에 쫓겨 편한 방향으로 개발하느라 기술 부채가 쌓이는 것을 방지할 수 있고, 문제 발생 시 분석이 수월해집니다.
- 모듈별 의존성이 낮아지면서 코드를 작성할 때 고려해야 하는 범위가 좁아지게 되고, 개발 생산성이 향상됩니다.
- 코드 리뷰 시 관련 모듈만 검토가 가능해 리뷰어의 피로도를 줄일 수 있습니다.
- 용도와 목적에 맞는 코드 배치로 이해가 쉬운 프로젝트 구성을 만들 수 있습니다.
Tuist
Tuist는 XcodeGen과 더불어 Xcode 프로젝트 파일의 생성 및 관리할 수 있는 도구로 모듈을 생성하고 관리하기에 적합합니다.
Swift 파일로 관리
YML이나 JSON으로 관리하는 XcodeGen과 달리 Tuist는 Project.swift 라는 Swift 파일로 관리하여 iOS 개발자라면 쉽게 적응할 수 있습니다.
손쉬운 모듈 생성
모듈이나 타겟, 의존성 등을 반환하는 템플릿 함수를 작성하여 편의성과 가독성을 높이고 손쉽게 모듈을 생성하고 의존성을 관리할 수 있습니다.
프로젝트 컨플릭트 방지
tuist generate
명령어를 실행시키면 Project.swift 에 작성한 구성대로 프로젝트 파일을 생성시켜주기 때문에, Github에 .xcodeproj
, .xcworkspace
를 올릴 필요가 없어집니다.
마무리
지금까지 iOS에서의 모듈화에 대해 간단히 알아봤습니다. Tuist 사용법이나, 라이브러리와 프레임워크, 아키텍쳐 등 자세한 내용들은 여기에 담기엔 너무 길어질 것 같아 별개의 아티클로 작성해 보겠습니다!
참고링크
https://www.slideshare.net/slideshow/ios-modular-architecture-with-tuist-251323915/251323915
https://tech.kakaobank.com/posts/2308-ios-modular-architecture-kwdc2023/
https://hyperconnect.github.io/2022/04/19/ios-modularization.html
'iOS' 카테고리의 다른 글
Swift 6.0 접근제어자 Access Control (0) | 2024.07.02 |
---|---|
Swift 메모리 관점에서의 Image (4) | 2024.06.18 |
SwiftData 알아보기 (1) | 2024.05.24 |
InjectionIII 라이브러리를 적용하면서 마주한 이슈들 (0) | 2024.05.02 |
Swift 찍먹하기 (1) | 2024.04.23 |