Vuncloud 블로그
← 개발 일기로 돌아가기

M4 클라우드 노드에서의 컴파일 및 패키징: 파이프라인을 이전했습니다

데이터센터 노트 · 2024.03.10 ·약 6분 읽기

M4 클라우드 노드 컴파일 및 패키징 속도 향상

Vuncloud의 주력 기종은 Mac mini M4입니다. Xcode를 실행하면서 Docker와 스크립트도 가끔 사용하는 저희 같은 프로젝트의 경우, CPU와 메모리의 체감 차이는 '컴파일을 기다리느냐' 아니면 '코드 작성을 계속하느냐'에 직접적으로 반영됩니다. 오래된 프로젝트의 전체 빌드를 M4 노드로 이전한 후, 클린 컴파일 시간이 약 절반으로 단축되었습니다. 절약된 것은 단순히 시간만이 아니라 방해받지 않는 몰입감이기도 합니다. 이 점은 원격 데스크탑 환경에서 특히 두드러집니다.

~50%
클린 컴파일 시간 단축
4W
M4 대기 전력 소비 (약)
3+
병렬 실행 가능한 CI 단계

클라우드 Mac은 어떤 빌드 시나리오에 적합한가요?

이전하기 전에, 저희는 일반적인 시나리오를 페인 포인트 기준으로 정리했습니다:

시나리오 주요 문제점 클라우드 Mac의 개선
iOS / macOS 프로젝트 빌드 및 배포 로컬 Xcode 버전 드리프트, 인증서 충돌 고정 사양 이미지, 잠금 파일 엄격히 정렬
CI에 Mac Runner 부재 클라우드 CI 대기 또는 Apple 하드웨어 없음 전용 노드, 야간 빌드 및 릴리스 검사
여러 팀원이 참여하는 협업 빌드 「내 환경에서는 빌드되는데 네 환경에서는 안 돼」 공유 디스크 이미지 및 의존성 캐시
호환성 테스트 (특정 시스템 버전) 여러 CLT 버전 병렬 실행 필요 다중 노드 격리, 유연한 구성 전환
향후 계획
저희는 일지에 디스크 IO, Git 호스팅 업체까지의 네트워크 지연 등 세부 사항도 기록합니다. 이러한 사항들은 기종과 마찬가지로, 주력 개발을 클라우드로 완전히 이전할 의향이 있는지에 영향을 미칩니다.

「빌드 가능」에서 「주력 작업을 클라우드에 올릴 수 있다」로

통합 빌드 환경으로 팀 커뮤니케이션 비용 절감
통합된 이미지 환경을 통해 팀원들이 언제든지 동일한 빌드 기준으로 전환할 수 있어, '환경 불일치'로 인한 커뮤니케이션 비용에서 해방됩니다

저희는 더 이상 클라우드 Mac을 단순한 원격 디스플레이로만 사용하지 않습니다. 클린 빌드 시간이 눈에 띄게 단축된 후, 팀은 더 많은 검사를 동일한 고정 환경에서 미리 처리하게 되었습니다: 단위 테스트, 정적 분석, 결과물 서명 검증 모두 디자인 리뷰와 병렬로 진행할 수 있어, '내 로컬에서는 통과했는데 동료 머신에서는 안 된다'는 커뮤니케이션 비용이 줄었습니다.

중요 사항
이미지의 Xcode 버전, 커맨드라인 도구 및 의존성 캐시는 저장소 잠금 파일과 엄격히 정렬되어야 합니다. 그렇지 않으면 속도는 올라가지만 일관성은 슬그머니 뒤처집니다.

Apple Silicon에서 링커와 Swift 컴파일러는 메모리 대역폭에 더 민감합니다. 프로젝트에 Swift Package, 혼합 컴파일 모듈 또는 대용량 Asset Catalog가 많은 경우, 클라우드에서 메모리 사양을 로컬 일상 여유분보다 약간 더 높게 설정하여 컴파일 최대치가 swap을 건드려 어렵게 절약한 CPU 이점을 다시 잃지 않도록 하는 것이 좋습니다. 저희는 내부적으로 동일한 프로젝트를 다른 노드에서 여러 번 반복 실행하여 wall time과 테일 레이턴시의 중간값을 관찰합니다.

캐시 트리오: DerivedData · CocoaPods · SPM

캐시는 빌드 속도에 가장 직접적인 영향을 미치는 요소입니다. 다음 세 디렉터리를 이미지 기준선에 추가하고 버전 번호를 붙이는 것을 권장합니다:

이미지 캐시 디렉터리 (참고)
~/Library/Developer/Xcode/DerivedData/   # Xcode 증분 컴파일 캐시
~/Library/Caches/CocoaPods/              # CocoaPods 다운로드 캐시
~/.spm-cache/ (또는 ~/.swiftpm/)           # Swift Package Manager 캐시

# 일상적인 반복 작업 시 현재 세션에 필요한 차분만 동기화
# 진정한 콜드 스타트는 이미지 메이저 버전 업그레이드 시 일괄 처리

일상적인 반복 작업 시 현재 세션에 필요한 차분만 동기화하고, 진정한 콜드 스타트는 이미지 메이저 버전 업그레이드 시 일괄 처리하면 속도를 유지하면서 출구 대역폭 낭비도 줄일 수 있습니다.

점진적 이전 권장 사항
중소 규모 팀은 한 번에 전체 팀원을 클라우드로 이전할 필요가 없습니다. 더 안정적인 방법은 야간 빌드, 출시 전 회귀 테스트, 특정 시스템 마이너 버전이 필요한 호환성 테스트를 먼저 클라우드로 이전하는 것입니다. 이렇게 하면 하드웨어 이점을 누리면서도 개인 로컬 리듬을 방해하지 않습니다.

모니터링, 롤백과 '새벽에 전화를 받을 수 있는 사람'

클라우드 빌드는 단순히 몇 분의 wall time 문제가 아니라, 실패 시 빠르게 원인을 파악할 수 있는지의 문제이기도 합니다. 저희는 대표적인 장애를 네 가지로 분류하고, 해당 알림 임계값과 온콜 매뉴얼을 별도로 작성합니다:

  • 이미지 드리프트— Xcode 버전 또는 CLT가 자동으로 업데이트됨
  • 의존성 해석 타임아웃— SPM / CocoaPods 원격 가져오기 타임아웃
  • 서명 인증서 만료— 배포 인증서 또는 Provisioning Profile 만료
  • 원격 Git 접근 불가— 서브모듈 DNS 해석 지연이 컴파일 지연으로 오인됨

팀이 여러 지역에 걸쳐 협업하는 경우, '가장 최근에 성공한 야간 빌드 결과물 해시'와 '실패 로그 일부'를 읽기 전용 채널에 자동 동기화하여 아침에 상호 동기화하는 비용을 줄이는 것을 권장합니다. 이렇게 하면 특정 팀원이 휴가 중이더라도, 다른 팀원이 환경 문제인지 코드 회귀인지 판단할 수 있습니다.

롤백 전략으로는 전체 디스크를 백업하는 것에 그치지 말고, '이전 버전에서 사용 가능했던 Xcode + CLT + CocoaPods 조합'의 소형 이미지를 보존해 두는 것이 전체 사용자 홈 디렉터리를 보존하는 것보다 더 가볍고 복구도 빠릅니다. 또한 야간 빌드 파이프라인에서 '서브모듈 가져오기 소요 시간'을 별도로 측정하세요. DNS와 Git 핸드셰이크 시간을 컴파일 단계에서 분리하면, resolver 구성을 변경해야 하는지 아니면 서브모듈을 내부 네트워크에 미러링해야 하는지 더 쉽게 판단할 수 있습니다. 이러한 지표들이 트렌드 그래프를 형성하면 M4 노드의 CPU 사용률과 대조하여 머신을 추가해야 하는지 아니면 네트워크를 수정해야 하는지 판단할 수 있습니다.

M4 Mac mini에서는 모든 것이 더 원활합니다

이 글의 모든 빌드 시나리오는 macOS에서 즉시 사용할 수 있습니다. Xcode, 터미널, Docker, Homebrew를 기본 지원하며, WSL 설정이나 드라이버 호환성 처리가 필요 없습니다. Mac mini M4는 Apple Silicon의 통합 메모리 아키텍처를 통해 링커와 Swift 컴파일러가 병렬 처리 능력을 충분히 발휘할 수 있습니다. 약4W의 초저 대기 전력 소비로 하루 종일 조용히 실행될 수 있어, 빌드 노드로서 이상적인 선택입니다.

동일 가격대의 Windows 호스트와 비교했을 때, Mac mini M4는 성능, 에너지 효율성 및 시스템 안정성에서 전면적으로 우위에 있습니다. macOS의 극도로 낮은 크래시율은 장기간 무인 운영에 적합하며, Gatekeeper와 SIP 보안 메커니즘으로 바이러스 위험이 Windows 플랫폼보다 훨씬 낮습니다. 소형 크기와 무음 설계로 장기 운영 비용을 더욱 절감할 수 있습니다.

빌드 파이프라인을 안정적이고 고성능 하드웨어로 이전할 계획이라면,Mac mini M4는 현재 시장에서 가장 비용 대비 성능이 뛰어난 시작점입니다——지금 바로 플랜 알아보기, 지금부터 CI의 기다림에 작별을 고하세요.

한정 특별 할인

단순한 Mac 한 대가 아닌, 클라우드 위의 개발 기지

전용 컴퓨팅 파워 · 글로벌 노드 · 월간 구독 · 하드웨어 구매 불필요

홈으로 돌아가기
한정 할인 클릭하여 플랜 보기