시차 협업 · 빌드 인수인계

같은 Mac에서
시간대에 맞춰 이어서 작업

아시아·태평양 팀원이 코드를 커밋하면 북미 팀원이 이어받아 빌드합니다. 빌드 환경은 데이터센터에 그대로 두고, 개인 컴퓨터의 퇴근과 함께 멈추지 않습니다.

Mac 한 대를 한 고객에게만 전용으로 제공합니다. 가상 머신이 아닙니다. Apple M4 두 가지 구성, 노드 5곳, 365일 연중무휴 운영.

하루 $19.2부터. 전원, 네트워크, 냉각은 데이터센터에서 관리하며 프로젝트 파이프라인, 빌드 대기열, 릴리스 권한은 팀에서 설정합니다.

지속적 통합

커밋은 대기열에, 빌드는 밤새 계속

Xcode 빌드 머신을 사무실에서 데이터센터로 옮기세요. push할 때마다 작업이 시작되어 동료의 컴퓨터를 켜 두거나 전원에 연결해 둘 필요가 없습니다.

재현 가능한 파이프라인부터 시작

Mac에 자체 호스팅 macOS runner를 등록하고 저장소 규칙에 따라 브랜치, 테스트 대상, 산출물 경로를 설정하세요. 먼저 명령줄 빌드가 성공하는지 확인한 다음 자동 실행을 연결하면 환경 문제와 CI 설정 문제를 구분해 해결할 수 있습니다.

단일 앱의 순차 빌드라면 Push M4 S부터 시작할 수 있습니다: M4 / 16GB / 256GB SSD. 의존성과 DerivedData 캐시를 유지해 후속 작업에서 같은 디렉터리를 재사용하세요. 여러 작업이 동일한 빌드 출력에 동시에 쓰지 않도록 합니다.

365일 운영으로 데이터센터 관리와 사무실 정전에 대한 의존성은 줄일 수 있지만, 실패한 작업이 자동으로 복구되는 것은 아닙니다. runner 자동 시작, 실패 재시도, 디스크 정리, 로그 알림은 팀 파이프라인에서 별도로 설정해야 합니다.

먼저 archive를 검증한 뒤 runner에 맡기세요

아래 예시는 프로젝트 디렉터리에 App.xcworkspace와 App scheme이 있다고 가정합니다. 실행 전에 실제 이름으로 바꾸세요.

xcodebuild -version

xcodebuild \
  -workspace App.xcworkspace \
  -scheme App \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -derivedDataPath build/DerivedData \
  -archivePath build/App.xcarchive \
  archive

서명 설정은 미리 준비해야 합니다. 이 명령은 archive를 생성하며, 내보내기나 업로드까지 완료하지는 않습니다.

시차 협업

시간대에 맞춰 교대하고, 인수인계는 끊김 없이

아시아·태평양의 낮 시간에 작업을 제출하면 미국 동부 노드가 북미의 낮 시간에 빌드와 릴리스를 이어받을 수 있습니다. 노드는 주로 작업하는 사람의 위치를 기준으로 선택하고, 빌드 작업은 대기열로 넘기세요.

제출할 때 입력 정보 남기기

브랜치, commit, scheme, Xcode 버전, 빌드 매개변수를 기록하세요. 다음 담당자는 같은 commit에서 이어서 작업할 수 있어 채팅 기록을 뒤져 “방금 실행한 버전”을 추측할 필요가 없습니다.

인수인계 정보: commit 해시 + 작업 번호.

실행 시 동시성 제어

전용이라고 해서 동시 실행이 무제한인 것은 아닙니다. 같은 Mac에서는 대기열이나 뮤텍스를 설정하고, 서명 및 내보내기 단계는 순차 실행하세요. 프로젝트별로 작업 디렉터리와 캐시 키를 분리합니다.

인수인계 정보: 대기열 상태 + 로그 경로.

인수할 때 출력 확인

북미 팀원은 테스트 결과, archive, 내보내기 로그를 먼저 확인한 뒤 릴리스 승인을 진행합니다. 작업이 실패하면 상태와 오류 로그를 보존하고 캐시를 바로 지운 뒤 재실행하지 마세요.

인수인계 정보: 산출물 위치 + 승인 결과.

접속 위치와 작업 실행 위치는 따로 고려하세요

선택 가능한 노드는 싱가포르, 도쿄, 서울, 홍콩, 미국 동부입니다. VNC 작업은 사용자 위치를 우선 고려하고, 자동 빌드는 저장소 및 의존성 소스까지의 네트워크 경로도 살펴야 합니다. 시간대는 작업 일정의 기준이지 접속 지연을 보장하지 않습니다. 대륙 간 작업이 잦다면 양쪽 팀에 맞춰 Mac을 각각 구성하고 runner 레이블을 통일할 수 있습니다.

서명 및 배포

릴리스 파이프라인을 한 대의 Mac으로 고정

App Store 배포용 archive 생성, 코드 서명, 업로드를 고정된 빌드 환경에서 처리하세요. 환경 이전을 줄이고 서명 자산을 팀원 각자의 컴퓨터에 복사하지 않아도 됩니다.

  1. 01

    툴체인 고정

    릴리스 브랜치에 Xcode 경로를 지정하고 SDK와 의존성 잠금 파일을 기록하세요. GUI에서 마지막으로 선택한 버전에 의존하지 말고 빌드 로그에 실제 사용된 툴체인을 출력합니다.

  2. 02

    서명 자산 한곳에 관리

    인증서와 프로비저닝 프로파일은 릴리스용 Mac 한곳에 보관하고, 키체인에는 최소 권한을 설정하세요. 비밀번호는 CI의 보호된 변수로 전달하고 저장소, 명령 출력, 공개 로그에는 기록하지 않습니다.

  3. 03

    archive와 내보내기 분리

    먼저 xcarchive를 보관한 뒤 팀에서 검토한 ExportOptions 설정으로 내보내세요. 업로드 단계에는 별도의 권한과 승인을 설정해 컴파일, 서명, 업로드 실패를 구분할 수 있게 합니다.

  4. 04

    배포 확인 기록 보관

    버전 번호, commit 해시, 빌드 로그를 산출물과 연결하세요. 서명 자산은 필요한 곳에서만 사용하고, 팀이 관리하는 안전한 위치에 암호화 백업을 보관해 단일 장애 지점으로 인한 손실을 방지합니다.

크로스플랫폼 프로젝트

여러 target 빌드, 메모리 여유부터 확보

Flutter와 React Native의 iOS 빌드 단계에도 macOS 툴체인이 필요합니다. 네이티브 의존성, Pods, Xcode 캐시를 Mac에 유지해 매번 임시로 환경을 구성하는 수고를 줄이세요.

Push M4 S · 순차 실행

M4 / 16GB / 256GB SSD

단일 앱의 일상적인 CI, 단일 릴리스 대기열, 크로스플랫폼 프로젝트의 안정적인 빌드 검증에 적합합니다. 빌드, 시뮬레이터, 기타 프로세스가 Mac의 메모리를 함께 사용하므로 먼저 순차 실행하고 메모리 사용량이 가장 높을 때를 확인한 뒤 작업을 늘리세요.

의존성 잠금 파일을 보관하고 브랜치별로 캐시 키를 설정하세요. 이전 산출물은 팀 자체의 아티팩트 저장소로 옮겨 로컬 디스크가 archive로 계속 차지 않도록 합니다.

Push M4 L · 다중 target 작업

M4 / 24GB / 512GB SSD

다중 target archive, Flutter / React Native 혼합 빌드, 더 많은 의존성과 툴체인을 동시에 유지해야 하는 프로젝트에 적합합니다. 24GB 메모리는 병렬 작업에 여유를 더해 주지만, 동시 실행 수는 실제 프로젝트에서 검증해야 합니다.

빌드 시간, 메모리 압력, 디스크 사용량을 각각 기록하세요. 병목이 지역 간 다운로드나 서명 잠금 대기라면 메모리를 늘려도 바로 해결되지 않으므로 캐시와 대기열부터 조정해야 합니다.

여러 Xcode 버전, 의존성 캐시, archive가 계속 늘어난다면 +1TB SSD 또는 +2TB SSD 옵션을 고려할 수 있습니다. 저장 공간 확장은 용량만 늘리고 통합 메모리는 늘리지 않습니다. 먼저 공간 사용 내역을 확인한 뒤 확장 여부를 결정하세요.

Apple Silicon 실험

여유 시간에 소규모 추론 작업 실행

같은 클라우드 Mac에서 로컬 모델 추론, 스크립트 검증, 소규모 테스트도 실행할 수 있습니다. 먼저 모델이 통합 메모리에 들어가는지 확인하고 릴리스 작업과 시간이 겹치지 않도록 예약하세요.

모델 파일 크기만으로 예산을 잡지 마세요

통합 메모리에는 macOS, 추론 프레임워크, 컨텍스트 캐시, 기타 프로세스도 들어갑니다. 모델 파일 크기가 필요한 실행 메모리와 같지는 않습니다. 짧은 입력으로 검증한 뒤 컨텍스트와 배치 크기를 단계적으로 늘리세요.

기록 항목: 모델 버전, 양자화 방식, 최대 메모리 사용량.

테스트 조건을 결과와 함께 기록

프레임워크 버전, 입력 샘플, 생성 매개변수를 고정한 뒤 실행 시간과 출력을 비교하세요. 16GB와 24GB 중 무엇을 선택할지는 목표 작업을 안정적으로 실행할 수 있는지에 따라 결정하며, 모델 규모나 속도를 일률적으로 단정하지 않습니다.

기록 항목: 입력 길이, 실행 매개변수, 소요 시간.

서명 및 릴리스 시간에는 실험 중단

추론과 Xcode 컴파일은 컴퓨팅 자원과 메모리를 놓고 경쟁합니다. 릴리스 중에는 실험 대기열을 중지하고, 실험 스크립트는 별도 디렉터리와 권한을 사용해 릴리스 키체인에 접근하지 않도록 하세요. 장시간 작업은 결과를 제때 저장합니다.

기록 항목: 작업 우선순위, 중지 조건, 결과 경로.

macOS와 Apple Silicon 환경이 필요한 검증 작업에 적합하며, 소규모 실험을 대규모 학습과 동일시하지 않습니다. 먼저 하루 단위로 대여해 자체 워크로드를 실행해 본 뒤 장기 이용 여부를 결정하세요.

팀 인수인계 약속

사용 목적을 실행 가능한 규칙으로 정리

아래는 작업 배치를 설명하기 위한 두 가지 역할별 사례이며, 검증된 고객 후기나 실측 접속 성능을 의미하지 않습니다.

“Fastlane을 전용 Mac에 설정해 뒀어요. 당번이 누구든 같은 빌드 기록부터 확인하니 누군가 컴퓨터를 켤 때까지 기다릴 필요가 없습니다.”
실행 규칙: 릴리스 스크립트를 저장소에 관리하고 작업 번호를 archive 및 내보내기 로그와 연결합니다.
모바일 개발 책임자 · 상황 예시
“먼저 QA 팀원의 네트워크에서 원격 데스크톱 연결을 확인한 뒤 노드를 정하겠습니다. 자동 테스트는 대기열로 돌리고, 사람이 검토해야 할 때만 데스크톱에 접속합니다.”
실행 규칙: 실제 작업 환경의 네트워크로 연결을 확인하고, 데스크톱 검토와 대량 테스트를 분리합니다.
QA 책임자 · 상황 예시

작업 방식에 맞는 구성 선택

단일 앱 순차 빌드는 16GB부터 시작하고, 다중 target 및 혼합 빌드는 24GB를 검토하세요. 주로 사용할 노드를 선택한 뒤 첫 파이프라인을 실행해 보세요.

전용 물리 Mac mini, 하루 $19.2부터. 실제 이용 가능 여부는 콘솔에 표시되는 최신 정보를 확인하세요.