본문 바로가기
Xcode/Swift - PlayGround

PlayGround) 팀 프로젝트에서 모듈화를 해야하는 이유

by 후르륵짭짭 2024. 7. 24.
728x90
반응형

일본 어느 공항에서,,,,

안녕하세요. 후르륵짭짭입니다.

이번에는 제가 사내에서 모듈화를 사용하고 나서 왜 모듈화가 필요한지에 대한 경험을 작성해보려고 합니다.

현재 모듈화를 적용하고 이제는 프로젝트가 방대해지는 만큼 Tuist라는 프로젝트 관리 시스템을 사용하려고 중 입니다.

 

제가 아무것도 모르던 신입시절,,, (사실 팀 내에서도 모듈화를 강조하지 않았습니다.)

그냥 Main App 안 개발을 진행해오던 시절이였습니다. 사실 장점을 못 느꼈기 때문에 필요성도 없었을거라 생각합니다. 

제 부서에서 프로젝트가 늘어가고 있어서 아래와 같이 Main App 밑에 Service 폴더를 만들고 개발을 진행했습니다.

하지만 위와 같이 작접을 진행한다면 제가 지금 생각나는 것으로는 아래의 단점들이 존재 했습니다!

1) 간단한 하나의 기능을 개발하기 위해 Main App 전체를 빌드해야한다.

  • 팀 프로젝트를 한다면 앱 전체적으로 무거워 집니다. 따라서 내가 간단한 기능 하나를 검증하기 위해서 2~4분 정도의 빌드시간을 기다려야하죠 

2) 단위 테스팅 빌드시간이 너무 길다

  • 이것도 1)과 연결되는 것인데, 단위 테스트는 내가 수정한 코드가 정상작동 확인을 위한 것인데, 너무 오래거린다는 겁니다

3) 기능 단위의 분할이 어려워 관리하기 어렵다.

  • 결국 기능을 폴더 단위로 나누는것 뿐인데, 이는 어떤 폴더에 어떤 기능이 있는지 한눈에 알기 어려웠습니다

 

대략적으로 이런 단점들이 존재했었습니다.

그래서 관리차원과 빌드 속도에 답답함을 느낀 저는 아래와 같이 프로젝트를 만들기로 했습니다.

위와 같이 모든 프로젝트를 모듈별로 나누기로 했습니다.

이렇게 나누니 확실히 깔끔하고 보기 좋지 않나요?

 

대략적인 구조를 설명하자면 

무분별하게 저희 모듈을 Import 하게 된다면 추후에 코드 정리할 때 어려움이 있어서 

저희 모듈을 사용하는 특정한 공간을 만듭니다. 이 공간은 Main App과 MainFramework와 연결하게 됩니다. 

그리고 MainFramework 하위에 프로젝트별 Framework들이 존재하도록 구현 했습니다.

만약 Framework에서 공통적으로 사용해야할 기능들이 있다면 이것은 Core Framework로 관리하였습니다.

(CoreFramework 내부에는 간단한 Utitlity, Network 기능들이 포함)

마지막으로 3rd Party OpenSource Framework를 Dynamic Framework로 하여 모든 Framework가 사용 가능하게 했습니다.

 

이렇게 구성하고 나서 저는 장점을 얻었습니다.

1) 프로젝트 관리가 편하다.

-> 저 혼자 모든 기능을 구현하는 것이 아닙니다. 따라서 파일추가를 하면서 프로젝트 구성이 변경 될 수 있죠. 하지만 모듈로 구성이 되어 있다면 기능별로 독립적으로 구성되어 있기 때문에, 같은 프로젝트를 구현하는 팀원이 아니라서 컴플릭이 발생하지 않습니다. 

2) 프로젝트별 Demo앱을 만들 수 있다

-> Demo App을 만들 수 있다는 것은 큰 장점이라 생각합니다. 내가 특정 기능을 검증을 하기 위해서는 빌드라는 과정이 필수적인데, App이 크면 클수록 빌드시간이 오래걸립니다. 하지만 Demo App으로 간단하게 구현 한다면? 짧은 시간에 기능 검증을 할 수 있다는 장점이 있죠

3) 프로젝트별로 Unit Test가 가능하다.

-> 2)의 연장선에 있지만 Unit Test를 만드는데도 큰 효과를 가집니다. Main App에 대해 전체 테스팅을 할 필요가 없어지고 프로젝트별로 Unit Test를 만드니 확실히 쉽게 테스트에 구분이 가능하여 이해가 가능해집니다. 

4) 반복적인 작업을 하지 않아도 된다.

-> 기능별로 잘 모듈화를 했다면 필요한 프로젝트에서 해당 모듈을 가져다 쓴다면 불필요한 작업을 또 구현할 필요가 없어집니다. 

 

이러한 장점들을 저는 직접 느끼고나니 팀프로젝트 한해서는 모듈화가 꼭 필요한 작업이라는 것을 느꼈습니다.

하지만 물론 단점이 있죠....

일단 초기 설계 단계에서 시간적 비용이 많이 들어갑니다.

그래서 다들 어려움을 느끼게 되기도 하죠. (하지만 요즘 Tuist라는 것을 통해 편하게 구상 가능하기도 합니다.)

Main App 안에서만 개발한다면 프로젝트 관리라는게 필요없지만,,, 관리라는 작업이 들어가게 됩니다. 

복잡성이 늘어나지만 관리 측며에서는 좋은 효율을 보여줍니다. 

 

그 동안 모듈화에 대해 많이 공부하였는데, 그 만큼 빛을 본 것 같습니다.

최근에는 프로젝트가 너무 많아지니 관리 비용이 점점 커지더라구요...

그래서 Tuist를 적용하려고 합니다.

 

Tuist는 Swift 언어로 프로젝트를 쉽게 관리할 수 있게 만들어진 오픈 소스입니다.

나중에 Tuist를 적용하는 방법에 대해 작성해보도록 하겠습니다.

 

감사합니다!

728x90
반응형

댓글