거대한 iOS앱의 생산성을 위해 바꾼 것들-2
이전글
https://admd13.tistory.com/432
우리가 채택한 솔루션
우리는 위에서 언급했던 문제를 해결하기 위해 수년에 걸쳐 많은 솔루션을 조사하고 구현했습니다. 이 글에는 대규모에서 효율적으로 작동했던 가장 큰 세가지 솔루션을 소개하겠습니다. 우리가 고민한 솔루션으로 빠르게 성장하는 중소규모 iOS팀에도 적용될 수 있다고 기대합니다.
1)최신 빌드 시스템 적용
Xcode는 에어비앤비 iOS엔지니어가 선호하는 IDE입니다. 하지만 iOS개발자의 생산성을 향상시킬 수 있는 다른 빌드 시스템도 확인하기로 했습니다. 아티팩트의 네트워크 캐시, 빌드 그래프에 대한 쿼리 인터페이스, 사용자 정의 단계를 종속성으로 추가하는 방법이 눈에 띄었습니다. 우리는 이러한 기능이 최신 빌드 시스템의 핵심이라고 믿습니다.
Facebook의 Buck빌드 시스템은 이런 요구사항을 만족했습니다. 우리는 2016년 말부터 Buck에 대해 진지하게 논의하기 시작했고 2017년부터 본격적으로 평가를 시작했습니다. 2019년 우리는 Buck의 선언적 빌드 시스템으로 완전히 전환했습니다. 공개문서가 아직 많이 부족하다는 점을 알지만 Buck으로 부터 큰 이점을 얻었습니다. 따라서 우리의 Buck 설정을 Github 레퍼지토리에 공유했습니다.
이번 변화의 일환으로 수동으로 관리되는 Xcode프로젝트를 제거하고, 각 모듈의 코드에 인접한 선언적Buck파일을 사용하기로 했습니다. Buck파일은 Starlark라는 언어를 사용해 정의되었고, Bazel이라는 최신의 인기 빌드 시스템과 상호 운용이 가능합니다. 아래는 에어비앤비의 모듈 구조입니다.
에어비앤비의 인프라팀은 엔지니어들을 직접 방문하여 개발경험을 강화하는 접근방식을 취했습니다. 따라서 iOS엔지니어들은 Buck에 정의된 빌드 그래프로부터 생성된 Xcode 워크스페이스에서 개발을 이어나가고 있습니다.
처음에는 에어비앤비 iOS애플리케이션의 명령줄 Buck빌드만이 Buck HTTP 캐시의 이점을 누릴 수 있었습니다. 앱스토어 빌드를 위해 개발 속도를 늦추지 않고 모든 PR을 성공적으로 검증할 수 있었기 때문에 이것만으로 큰 개선을 달성한 것이었습니다. 그러나 Xcode 로컬 빌드는 생성된 워크스페이스가 표준 Xcode 빌드시스템을 계속 사용하므로 캐시에서 아티팩트를 가져올 수 없었습니다.
우리는 엔지니어의 원활한 반복작업을 위해 최신 빌드 시스템을 계속 활용해 왔습니다. Buck 빌드 시스템을 사용하여 내부적으로 애플리케이션을 빌드하는 Xcode 워크스페이스를 생성할 수 있도록 하는데 성공했습니다.
Buck기반의 Xcode 워크스페이스는 Buck의 캐시를 활용하여 로컬 빌드 속도를 향상시켰습니다. Xcode의 시작 시간을 단축하기 위해 전체 코드베이스의 일부만 사용하여 Xcode 워크스페이스를 생성할 수도 있게 되었습니다. 전체 애플리케이션은 Buck으로 끊임없이 빌드되고 Xcode는 짧은 시간 안에 개발을 시작할 수 있도록 준비됩니다
2) 모듈 유형 설계
다음글
https://admd13.tistory.com/434
원문
'🍎iOS프로그래밍 > 오늘의 공부' 카테고리의 다른 글
에어비앤비 - 거대한 iOS앱의 생산성을 위해 바꾼 것들(4) (0) | 2023.09.01 |
---|---|
에어비앤비 - 거대한 iOS앱의 생산성을 위해 바꾼 것들(3) (0) | 2023.08.31 |
에어비앤비 - 거대한 iOS앱의 생산성을 위해 바꾼 것들(1) (0) | 2023.08.30 |
[Swift] COW(Copy-On-Write) (0) | 2023.02.24 |
Swift - 아이폰 키보드를 내리는 여러 방법 (0) | 2022.10.04 |
댓글