iOSDC Japan 2020: 신기능 개발에서부터 모듈 분리를 시작해보자

원제 : 新規機能開発からモジュール分割を始めてみる

@izm256

최근의 모바일 앱은 1개의 어플리케이션 안에서 다양한 기능을 갖는 것이 일반적입니다.
기능이 늘어남으로 인해 코드 베이스는 거디해지고 빌드 시간의 증가, 설계가 점점 복잡해집니다.

여기서 Multi-module을 사용하는 것으로 diff를 기준으로한 빌드로 빌드 시간을 단축시키는 것이 가능합니다.

하지만, 오랜기간 운용해온 서비스에 멀티 모듈을 도입하려고 하더라도
어디부터 모듈을 분리하는 것이 적절한 것인지 모르고
기존 코드가 강하게 연결되어 있으면 모듈의 분리가 어려운 것처럼
도입시키기 위해서는 여러가지 장벽이 존재합니다.

신기능 개발을 모듈으로써 분리시키는 것으로 멀티모듈화를 시작했습니다.

본 세션에서는 7년 이상 서비스된 앱의 신기능 개발에서 멀티모듈화를 시작하면서 느꼈던 메리트, 디메리트 그리고 앞으로의 전망에 대해서 이야기합니다.
// 원문
最近のモバイルアプリは、1つのアプリ内で多彩な機能を持つものが一般的となってきています。
機能が増えることによってコードベースは肥大化し、ビルド時間の増加や設計の複雑化へと繋がります。

そこでマルチモジュールを採用することで、差分ビルドによるビルド時間の短縮や、モジュール間が疎結合となることでより堅牢な設計への期待が高まります。

しかしながら、長年運用しているサービスにマルチモジュールを導入しようとしても、
どこからモジュールを切り出して良いのか分からない、
既存コードの結合度が高くモジュールへの分割が難しいなど、
導入への障壁が様々考えられます。

また、サービス運営をしていく上で新規機能の開発を止めることも許されず、リファクタだけに工数を割くことも容易ではありません。

そこで我々は、新規開発する機能をモジュールとして切り出すことでマルチモジュール化への第一歩を踏み出すということを実践しました。
このトークでは、7年以上続くアプリの新規機能開発からマルチモジュール化を実践していく中で感じたメリット、デメリットや今後の展望についてお話します。

Mutli-module 의 등장이유

  • 1개의 앱의 기능이 다양 = Super Applicaiton
  • 기능이 다양해지고 코드의 양이 늘어난다.
    • 설계가 복잡해지고, 효율이 점점 나빠진다.

Multi-module의 장점

  • 한 가지를 수정했을 때의 영향범위가 줄어든다.
  • 빌드 시간의 단축이 가능하다.



  • 결국 앱을 개발하다보면 점점 ,,,, 위의 사진처럼 복잡해진다.
  • 모듈화를 진행할려면 어디부터 해야할까?
  • 신 기능부터 모듈을 나눠봅시다 !

신기능 개발에서부터 시작하는 모듈화

  1. 요건의 정리
  2. 해야할 Task를 정하기
  3. input/output 을 정의
  4. Framework의 작성 (+ target의 추가)
  5. 개발 : public, open으로 설정하기

1. 요건의 정리

  • 독립된 새로운 화면이면 모듈을 분리하기 쉽다.

5. 개발

  • 외부 Framework을 특정한 모듈에서 사용할 때, main target 설정을 주의 !
    • SPM 은 사용되는 Module에만 넣어도 된다
      • Static Libarary는 여러 Module에서 사용하기 위해서는 Dynamic에 넣어서 경유하는 것이 좋다.

Merit & De-merit

Merit

  • 전체 Project에서 공통화 해야할 부분이 보이기 시작한다.
    • 별도의 Module로 빼야하는지 등. 어떻게 공통화 해야할지 판단하기 쉽다.
  • 기존 코드의 리팩토링이 가능하다
  • 영향범위의 축소

De-merit

  • Project file의 conflict ………..
    • XcodeGen 을 미리 도입하고 모듈화를 진행하는 것이 좋다 ! !!!!!!!!!
  • 기능단위 / 레이어단위, 어느 것을 기준으로 모듈을 나눌 것인지 잘 생각해야한다.
  • 모듈이 나눠져서 어디에 코드가 있는지 찾기 힘든 경우가 있다




앞으로 생각해야 할 부분

  • XcodeGen의 도입 (필수)
  • 기존 기능의 모듈 분리
  • Objective-c 등의 오래된 코드의 리팩토링
  • 앞으로 신기능은 모듈로 분리시킬 것인가
  • Dynamic framework가 늘어났을 때의 대책

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중