안녕하세요.
기존 애플리케이션의 빌드 프로세스를 최적화하는 과정에서 Kakao iOS SDK를 살펴보게 되었습니다. 그런데 몇몇 SDK 구성 요소들이 사전 빌드된 XCFramework 형태로 Git 리포지토리에 직접 포함되어 배포되고 있음을 확인했습니다. Swift Package Manager(SPM)을 지원하고 있다는 점은 매우 반가운 일이지만, 현재의 방식은 몇 가지 문제를 안고 있어 개선이 필요하다고 생각됩니다.
현재 배포 방식에 대한 우려
-
대용량 바이너리 파일에 Git을 비효율적으로 사용
- Git은 대용량 바이너리 파일을 효율적으로 저장하도록 설계되지 않았습니다. Git은 주로 텍스트 파일의 차이를 관리하는 방식으로 작동하며, 이는 바이너리 파일에는 적합하지 않습니다. 심지어
$ git clone --depth 1
명령어로 얕은 복제를 하더라도, 전체 리포지토리의 이력을 포함한 바이너리 객체를 다운로드해야 합니다. - 이로 인해 리포지토리 크기가 커지면서 CI/CD 파이프라인과 개발자들의 로컬 환경 모두에 부담을 주게 됩니다.
- Git은 대용량 바이너리 파일을 효율적으로 저장하도록 설계되지 않았습니다. Git은 주로 텍스트 파일의 차이를 관리하는 방식으로 작동하며, 이는 바이너리 파일에는 적합하지 않습니다. 심지어
-
SPM의 BinaryTarget 기능을 제대로 활용하지 못함
- SPM은
Package.swift
파일 내에서binaryTarget
기능을 제공하며, 이를 통해 사전 빌드된 바이너리를 외부 서버에 호스팅하고 필요할 때만 다운로드할 수 있습니다. 이 방법은 매우 효율적일 뿐만 아니라 Industry-Standards라고 할 수 있습니다. - 예를 들어, Firebase iOS SDK는
binaryTarget
을 사용하여 주요 구성 요소를 CDN을 통해 배포합니다:
이 방법은 리포지토리 크기를 크게 줄이고 효율적인 다운로드를 가능하게 합니다.// https://github.com/firebase/firebase-ios-sdk/blob/52d9152e5ac3ae6d2fefc872a3a6c1697d26d3e7/Package.swift#L304 .binaryTarget( name: "FirebaseAnalytics", url: "https://dl.google.com/firebase/ios/swiftpm/11.7.0/FirebaseAnalytics.zip", checksum: "ce1f4aba4f9e831f06eb77a4cbaf0bd021e0859197ee3100c5035b7037074793" ),
- SPM은
개선 제안
카카오의 명성과 생태계의 중요성을 고려할 때, 아래와 같은 변경사항을 통해 업계 모범 사례를 따르고 Kakao SDK의 개발자 채택률을 높일 수 있을 것이라고 생각합니다:
- 사전 빌드된 XCFramework를 CDN 또는 유사한 서비스에 호스팅하세요.
Package.swift
파일을 업데이트하여 CDN에서 호스팅된 바이너리를 가리키는binaryTarget
항목을 추가하세요.- 대용량 바이너리 파일을 제거하여 Git 리포지토리의 이력을 정리하고, 전체 사용자에게 리포지토리 크기를 줄이는 작업도 고려하세요.
이러한 변경은 구현이 간단하면서도 SDK의 품질과 유지보수성을 크게 향상시킬 것입니다. 또한, SPM을 의존하는 개발자들에게 Kakao SDK를 더 매력적으로 보이게 할 것입니다.
감사합니다.