Designing for Productivity in a Large-Scale iOS Application
Medium
# 큰 스케일의 iOS 앱 생산성 높이기 🧱 대부분의 iOS 개발자는 자신이 구현한 앱이 처음으로 기기에 돌아가는 짜릿하고 즐거운 기억이 있을 것입니다. 프로그램이 살아있는 하나의 앱이 되고, 많은 사람들의 일상 일부가 될 때도 기쁨과 뿌듯함을 느낄 수 있지요. 그러나 더 많은 사람이 쓰는, 큰 스케일의 앱이 되어갈수록 개발 환경과 생산성을 떨어지기 쉽습니다. Airbnb팀이 무거워진 iOS 앱의 생산성을 높인 경험을 블로그로 잘 정리해주어 공유합니다. 정답은 아니지만, 도전과 선택의 과정에서 배울 점이 있는 것 같습니다. <Airbnb 앱의 큰 스케일> • 2010년 6월 16일 에어비엔비의 첫 커밋이 만들어진 후, first-party만으로 150만 라인의 앱이 되었습니다. 현재 75명의 iOS 개발자가 에어비엔비 앱을 만들고 있고, 62개의 언어로 거의 대부분의 나라에서 서비스 되고 있습니다. • Airbnb의 스케일이라면 코드 조직화는 매우 큰 도전입니다. 그러나 Airbnb팀은 큰 스케일의 생산성을 높이기 위해 기쁜 마음으로 여러 실험과 시도를 했습니다. 어느 정도 충분한 해결 상태가 되었고, Airbnb팀은 이 'Airbnb way'의 일관성에 많은 도움을 받고 있습니다. • 최근까지도 Airbnb의 코드는 위계와 카테고리 없이, 'lib/'이라는 디렉토리 아래 모두 모여 있었습니다. 이런 구조에서는 엔지니어는 general한 패턴을 찾기 어렵고, 비슷한 역할을 하는 기능이 중복되기 쉬웠습니다. 또한 중복이 많으면 일의 효율이 더 떨어지기 쉬웠습니다. 게다가 Xcode가 모든 코드를 에디터에 로딩하는 것만으로 1~2분이 소요되었습니다. <Modern Build System 도입> • Xcode의 빌드 시스템을 살펴봤을 때, 빌드 아티팩트의 network caches와 빌드 그래프의 query interface 그리고 디펜던시를 추가하는 방식을 개선 할 수 있다고 생각했습니다. Facebook의 Buck 빌드 시스템은 우리의 이런 요구사항을 충족했습니다. 우리 팀은 2016년 말부터 진지하게 논의했고, 2017년에 연구했으며, 2019년에 완전히 Buck 빌드 시스템을 따르게 되었습니다. • Buck는 공식 문서가 부족하지만, Buck에서 많은 이점을 얻고 있습니다. 이제 Xcode 프로젝트를 직접 관리하지 않고, declarative한 Buck파일을 사용합니다. 개발자는 여전히 Xcode에서 개발하지만, 이는 Buck의 build graph가 지정해준 곳에서 특정 기능만 개발하는 형식입니다. • 이 'Buck-based Xcode workspace'는 Buck의 캐시를 사용하여 로컬 빌드 타임을 효과적으로 줄입니다. 개발팀은 특정 기능을 각각의 Xcode workspace로 분리하여 개발할 수 있고, Buck를 통해 하나의 큰 앱으로 통합됩니다. <Module Types 디자인 설계> • 위계가 없고 검색이 힘든 코드를 개선하고자 organizational structure를 만들기 시작했고, 결과적으로 Module types이 되었습니다. 모든 Module은 'Module type' 이라고 불리는 semetic하게 의미있는 그룹에 속합니다. 현재는 12개의 Module type이 있습니다. • Module type이 iOS 개발의 기본 개념이라 생각하여, Module type에 대해여 정확한 문서를 만들었습니다. 이 문서는 내부 개발 포털에서 모든 개발자가 볼 수 있고, 소스 컨트롤으로 버전도 관리됩니다. 간결한 문단으로 모듈의 목적과 활용방식을 설명합니다. 개발자는 Module type을 기본으로 정확하고 합리적인 멘탈모델을 빠르게 만들 수 있습니다. • Module type은 Buck Build System과 시너지를 내기도 합니다. Module type은 Buck의 visibility rules를 strick하게 정의하여, 모듈간의 dependencies도 관리합니다. 각각의 모듈은 자신의 visibility 레벨을 넘어가는 모듈에 접근할 수 없습니다. ⟪참고⟫ - Facebook, https://buck.build/ - Airbnb, https://github.com/airbnb/BuckSample
2021년 11월 1일 오후 2:06