재사용 가능한 빌드 아키텍처

각 배포 파이프라인에서 클라우드 Mac의 역할을 확인하세요

아래 워크플로는 고객 사례가 아니며, 검증되지 않은 성능을 보장하지 않습니다. 트리거, 전용 물리 머신에서 실행되는 작업, 서명 책임, 로그 위치와 아티팩트 전달 경로를 구분해 팀의 저장소와 권한 체계에 맞게 적용할 수 있도록 구성했습니다.

워크플로 5개 빌드, 배포, 실험 작업 포함
전용 노드 1대 작업 부하를 대기열에 따라 순차 실행
경계 4가지 코드, 자격 증명, 로그, 아티팩트를 각각 관리
BUILD PASSPORT iOS Release / Main
RUN-042
01
코드 커밋 저장소 이벤트가 작업 실행을 트리거
접수됨
02
종속 항목 및 캐시 잠금 파일에 따라 복원하고 캐시 적중 기록
완료
03
Xcode Archive 전용 물리 머신에서 아카이브 실행
실행 중
04
검증 및 인계 서명을 확인한 뒤 관리되는 아티팩트 내보내기
대기 중
배치 대기열 MAIN → RELEASE → HOTFIX 작업마다 별도의 작업 디렉터리 사용
서명 상태 확인 설정 일치 민감한 자료는 팀에서 직접 관리
예시 활용 방법

책임 범위를 먼저 정한 뒤 자동화 단계를 적용하세요

참조 아키텍처는 작업 흐름만 설명합니다. 저장소 권한, 서명 자료, 개발자 계정, 배포 승인, 아티팩트 보관 기간은 사용하는 팀에서 정해야 합니다.

재현 가능한 환경

Xcode, Command Line Tools, 종속 항목 잠금 파일과 정리 명령을 고정하세요. 버전을 바꿔야 한다면 별도의 작업 디렉터리에서 먼저 검증한 뒤 운영 대기열에 적용하세요.

버전 및 잠금 파일

자격 증명을 저장소에 넣지 않기

토큰, 인증서, 프로비저닝 프로파일은 통제된 방식으로 주입하세요. 로그에는 문제 해결에 필요한 정보만 남기고, 출력 전에 경로, 토큰, 비공개 저장소 주소를 제거하세요.

최소 권한

아티팩트 전달 경로 명확히 하기

Archive, 내보낸 패키지, 심볼 파일, 테스트 보고서는 각각 이름을 지정하고 커밋 식별자를 포함하세요. 인계가 끝나면 팀 정책에 따라 노드의 임시 사본을 정리하세요.

통제된 내보내기
앱 자동 패키징

커밋부터 검토 가능한 아티팩트까지 5단계 인계

이 파이프라인에서는 CDNMac M4를 self-hosted runner로 등록하고, 저장소 이벤트로 작업을 시작해 최종 아티팩트를 팀 검토 또는 후속 배포 시스템으로 전달할 수 있습니다.

01
코드 커밋 트리거: 개발자 또는 병합 절차

메인 브랜치 또는 릴리스 태그가 대기열을 시작합니다. 작업은 먼저 커밋 해시, 브랜치, 트리거한 사용자, 대상 Scheme을 기록하며 민감한 변수를 로그에 출력하지 않습니다.

전용 물리 머신의 격리된 작업 디렉터리
02
종속 항목 복원 트리거: 실행 스크립트

잠금 파일에 따라 Swift Package, CocoaPods 또는 기타 종속 항목을 복원합니다. 캐시 키에는 잠금 파일 요약과 도구 버전을 포함해 이전 캐시가 다른 버전에서 잘못 사용되지 않도록 합니다.

버전 관리 캐시 디렉터리 및 종속 항목 로그
03
Xcode Archive 트리거: 빌드 작업

명시한 workspace, scheme, configuration, destination으로 아카이브를 실행합니다. 실패하면 종료 코드, 주요 로그, 결과 번들을 보관합니다.

커밋 식별자가 포함된 Archive 디렉터리
04
서명 확인 트리거: 릴리스 작업

Bundle Identifier, 팀, 인증서 유효성, 프로비저닝 프로파일의 일치 여부를 확인합니다. 개발자 계정과 서명 자산은 항상 사용자 팀에서 관리합니다.

검토 체크리스트, 평문 자격 증명은 출력하지 않음
05
아티팩트 보관 트리거: 인계 스크립트

설치 패키지, 심볼 파일, 빌드 요약과 체크섬을 내보낸 뒤 팀이 관리하는 저장 위치에 복사합니다. 인계가 확인되면 임시 디렉터리를 정리합니다.

통제된 저장소 및 팀 검토 대기열
멀티 브랜치 대기열

전용 물리 머신 한 대에서 세 가지 브랜치를 규칙에 따라 대기열에 추가

전용 리소스라고 해서 모든 작업을 병렬로 실행할 수 있는 것은 아닙니다. CDNMac M4 한 대를 사용할 때는 우선순위, 작업 디렉터리, 정리 범위를 명확히 해 릴리스 작업과 일상 검증이 서로 영향을 주지 않게 하는 것이 좋습니다.

MAIN 지속적 검증

메인 브랜치

병합 후 단위 테스트, 정적 검사, 기본 Archive를 실행합니다. 캐시는 재사용할 수 있지만 DerivedData는 프로젝트와 Xcode 버전별로 격리합니다.

우선순위
보통
작업 디렉터리
work/main
종료 시 정리
추적되지 않는 파일 삭제
RELEASE 배포 후보

릴리스 브랜치

대기열에 들어가면 같은 저장소의 불필요한 작업을 일시 중지하고, 별도의 서명 확인 및 내보내기 설정을 사용합니다. 아티팩트 요약은 팀에서 검토해야 합니다.

우선순위
높음
작업 디렉터리
work/release
종료 시 정리
임시 키체인 삭제
HOTFIX 수동 승인

핫픽스 브랜치

책임자가 확인한 뒤 대기열에 추가합니다. 문제 해결에 필요한 캐시만 복원하고, 빌드가 끝나면 임시 변수를 정리한 뒤 롤백 기준을 기록합니다.

우선순위
수동 확인
작업 디렉터리
work/hotfix
종료 시 정리
대기열 및 기준 상태 복원
대기열 정책

릴리스 작업은 아티팩트를 작성 중인 작업을 선점하지 않습니다. 실패한 작업은 로그를 수집한 뒤 작업 디렉터리를 해제하고, 모든 작업이 끝나면 멱등성 있는 정리 절차를 실행합니다.

MAIN RELEASE HOTFIX CLEAN
FLUTTER IOS

크로스 플랫폼 종속 항목과 Xcode 단계를 나눠 기록하세요

Flutter iOS의 대기 시간은 종속 항목 복원, CocoaPods, Xcode 빌드에 분산되는 경우가 많습니다. 단계를 나누면 캐시가 효과적인지, 어느 계층에서 실패했는지 파악할 수 있습니다.

단계별 경계

각 단계에서 별도의 로그와 종료 코드를 출력합니다. 앞 단계가 통과한 경우에만 다음 단계가 그 결과물을 읽게 해 종속 항목 문제를 Xcode 컴파일 문제로 오인하지 않도록 합니다.

  • Flutter SDK 버전과 프로젝트 요구 사항을 먼저 확인합니다.
  • 잠금 파일 요약을 캐시 키에 포함합니다.
  • Pods 캐시와 Dart 캐시는 별도로 무효화합니다.
  • 내보낸 패키지와 심볼 파일을 따로 인계합니다.
01
종속 항목 복원

프로젝트 종속 항목을 복원하고 SDK 버전과 잠금 파일 요약을 기록합니다.

캐시: Dart 패키지 디렉터리
02
CocoaPods

Podfile.lock에 따라 iOS 네이티브 종속 항목을 설치하고, 일치하지 않는 Pods는 재사용하지 않습니다.

로그: Pods 설치 출력
03
Xcode 빌드

명시한 workspace, scheme, configuration으로 Archive를 실행합니다.

아티팩트: Archive 및 결과 번들
04
아티팩트 내보내기

서명을 확인한 뒤 아티팩트를 내보내고 커밋 식별자와 체크섬을 생성합니다.

전달 위치: 팀 관리 저장소

캐시 적중은 해당 디렉터리와 키를 재사용할 수 있다는 뜻일 뿐, 전체 빌드가 반드시 빨라진다는 의미는 아닙니다. Flutter, CocoaPods, Xcode 또는 잠금 파일을 업그레이드한 뒤에는 캐시 범위를 다시 확인하세요.

TESTFLIGHT 배포

빌드 아티팩트를 팀에서 검토한 뒤 배포 절차 진행

클라우드 Mac은 빌드 아티팩트를 생성하고 확인하지만 팀의 배포 승인을 대신하지 않습니다. 개발자 계정, 서명 자산, 버전 정보와 배포 여부는 사용자가 관리합니다.

  1. 01

    배포 후보 생성

    릴리스 브랜치에서 Archive와 내보내기를 완료하고 커밋 해시, 버전 번호, 빌드 번호, 심볼 파일, 체크섬을 함께 제공합니다.

  2. 02

    팀 검토

    담당자가 변경 범위, 서명 일치 여부, 개인정보 자료, 권한 사용 목적, 테스트 결과를 확인합니다. 검토를 통과하지 못하면 해당 커밋으로 돌아가 다시 빌드합니다.

  3. 03

    배포 절차 진행

    검토가 끝나면 팀에서 관리하는 릴리스 작업이 제한된 자격 증명으로 업로드를 처리합니다. 저장소나 일반 빌드 로그에는 민감한 자료를 보관하지 않습니다.

  4. 04

    인계 결과 기록

    아티팩트 식별자, 검토 결과, 필요한 로그를 보관합니다. 인계가 끝나면 노드의 임시 내보내기 파일과 임시 자격 증명을 정리합니다.

CDNMac 노드 담당 빌드, 아카이브, 서명 일치 확인, 아티팩트 내보내기
사용자 팀 담당 계정 관리, 서명 자산, 배포 승인, 배포 자료 및 규정 준수 검토
APPLE SILICON AI 실험

모델 호환성을 확인하고 처리량을 보장하는 표현은 피하세요

CDNMac M4는 M4, 16GB RAM, 256GB SSD를 제공합니다. 로컬 모델 호환성 확인과 프로토타입 테스트에 적합하지만, 먼저 모델, 컨텍스트, 데이터, 메모리 요구 사항을 확인해야 합니다.

A

데이터 준비

실험에 필요한 데이터만 동기화하고 출처와 버전을 기록합니다. 민감한 데이터는 먼저 비식별화하고 원본, 중간 처리 데이터, 결과를 각각 다른 디렉터리에 보관합니다.

입력
버전 관리된 샘플
롤백 지점
읽기 전용 원본 데이터 사본
B

실행 환경 확인

macOS, 런타임, 프레임워크, 모델 형식을 기록합니다. 먼저 소량의 샘플로 로드, 추론, 메모리 사용량을 확인한 뒤 실험 범위를 넓힐지 결정합니다.

확인 항목
버전 및 여유 메모리
롤백 지점
고정된 종속 항목 목록
C

결과 내보내기

실험 매개변수, 결과 요약, 필요한 로그를 출력하고 보고서에 민감한 데이터 전체를 포함하지 않습니다. 대여 기간이 끝나기 전에 필요한 결과를 통제된 저장소로 복사합니다.

출력
매개변수, 요약, 로그
제한 사항
특정 처리량을 보장하지 않음
구성 확인

모델, 컨텍스트, 중간 데이터가 16GB RAM에서 안정적으로 작동하지 않거나 목록에 없는 칩 및 메모리 구성이 필요하다면 먼저 서비스 팀에 문의하세요. 프로토타입 테스트 통과를 프로덕션 용량 검증으로 간주해서는 안 됩니다.

실험 구성 문의
팀 회고용 표현

워크플로의 가치를 검증 가능한 엔지니어링 사실로 설명하세요

아래는 내부 회고에 활용할 수 있는 역할별 표현 예시이며, 특정 고객의 평가나 평점 또는 기업 추천을 의미하지 않습니다.

“대기열이 우리 팀만 사용하는지, 실패했을 때 문제를 찾을 수 있는 로그가 남는지가 더 중요합니다. 막연히 빌드 속도를 이야기하기보다 작업 디렉터리와 아티팩트 전달 경로를 명확히 하는 편이 유용합니다.”

모바일 팀 책임자

“브랜치 작업이 같은 물리 머신을 공유할 때는 우선순위, 캐시 키, 정리 정책을 제대로 설계해야 합니다. 전용 리소스는 격리를 위한 기반일 뿐이고, 파이프라인은 여전히 우리가 정의해야 합니다.”

CI 플랫폼 엔지니어

“다른 시간대에서 연결할 때는 원격 액세스, 백그라운드 빌드, 아티팩트 내보내기가 서로 독립적으로 작동하길 바랍니다. 그래야 현지 네트워크가 잠시 불안정해도 실행 중인 빌드 작업에 영향을 주지 않습니다.”

인디 개발자
워크플로 적용

준비 항목, 환경 변수, 실패 시 롤백 지점

적용을 시작하기 전에 최소한으로 실행 가능한 버전을 만드세요. 환경 변수 이름은 팀 규칙에 맞게 바꿀 수 있지만, 민감한 값은 저장소에 커밋하거나 빌드 로그에 직접 출력해서는 안 됩니다.

5가지 참조 워크플로 구현 체크리스트
워크플로 준비 항목 환경 변수 목록 실패 시 롤백 지점
앱 자동 패키징 저장소 액세스, Xcode 버전, Scheme, 종속 항목 잠금 파일, 내보내기 설정 REPO_REF
BUILD_SCHEME
EXPORT_PATH
결과 번들과 커밋 식별자를 보관하고 임시 키체인을 정리한 뒤, 이전에 빌드에 성공한 커밋으로 돌아갑니다.
멀티 브랜치 빌드 브랜치 우선순위, 별도 작업 디렉터리, 동시 실행 제한, 멱등성 있는 정리 스크립트 BRANCH_NAME
RUN_PRIORITY
WORK_ROOT
후속 대기열을 중지하고 현재 로그를 저장한 뒤, 작업 트리를 깨끗한 상태로 복원하고 대기열 순서를 되돌립니다.
Flutter iOS Flutter 버전, Podfile.lock, Xcode workspace, 캐시 키 규칙 FLUTTER_ROOT
PODS_CACHE_KEY
IOS_SCHEME
단계별로 캐시를 무효화하고 재사용 가능한 로그는 유지한 뒤, 가장 최근에 통과한 단계부터 다시 실행합니다.
TestFlight 배포 배포 승인, 버전 정보, 서명 일치 여부, 아티팩트 검증, 팀 관리 자격 증명 RELEASE_VERSION
BUILD_NUMBER
ARTIFACT_PATH
배포 작업을 중지하고 임시 자격 증명을 폐기한 뒤, 검토 체크리스트로 돌아가 배포 후보를 다시 생성합니다.
AI 실험 모델 형식, 소량 데이터, 런타임 버전, 메모리 모니터링, 내보내기 디렉터리 MODEL_PATH
DATASET_PATH
RESULT_PATH
매개변수 목록과 결과 요약을 보관하고 고정된 종속 항목을 복원한 뒤, 읽기 전용 원본 데이터 사본으로 돌아갑니다.
01 최소 작업부터 실행

저장소 하나, Scheme 하나, 출력 대상 하나만 사용해 노드에서 전체 작업을 완료할 수 있는지 확인합니다.

02 민감한 변수 연결

통제된 방식으로 최소 권한 자격 증명을 주입하고 로그 마스킹, 만료, 교체 절차를 확인합니다.

03 마지막으로 대기열 확장

브랜치를 추가하기 전에 우선순위, 시간 제한, 실패한 작업 정리, 작업 디렉터리 정리 규칙을 설정합니다.

참조 워크플로를 전용 클라우드 Mac 한 대에 적용하세요

먼저 대여 기간과 노드를 선택한 뒤 가이드에 따라 연결, Xcode 환경, 저장소 권한, 첫 Archive를 확인하세요. 실제 사용 가능 상태와 전달 정보는 콘솔에 실시간으로 표시되는 내용을 기준으로 합니다.