Bazel 공식 문서는 원격 캐시를 액션 캐시와 콘텐츠 주소 저장소라는 두 구성 요소로 설명합니다. (원격 캐시 구성 설명)
적합: 원격 Mac에서 먼저 같은 iOS 빌드를 재현하고, 그 뒤에 원격 캐시를 연결하려는 팀에 적합합니다.
부적합: Mac 도구 체인이나 빌드 결과가 아직 재현되지 않는데 캐시만으로 빌드 오류와 성능 문제를 해결하려는 경우에는 적합하지 않습니다.
유지 중인 iOS Bazel 규칙을 다른 Mac과 CI에서도 안정적으로 쓰려는 개발자와 빌드 엔지니어를 위한 안내입니다.
기준선 기록부터 캐시 적중 확인, 서명 검증과 CI 적용까지 순서대로 진행합니다.
00원격 Mac에서 기준 빌드를 재현합니다
원격 캐시를 켜기 전에 캐시 없이도 통과하는 기준 빌드를 확보해야 합니다. 그래야 원격 Mac의 도구 체인 문제와 캐시 설정 문제를 분리할 수 있습니다. 로컬에서 성공했다는 사실만으로 원격 Mac에서도 같은 조건이 갖춰졌다고 볼 수는 없습니다.
기준선은 프로젝트가 실제로 사용하는 빌드 대상과 명령으로 만듭니다. 성공 여부뿐 아니라 테스트 결과, 생성된 산출물, 실패 로그도 보관합니다. 나중에 캐시 적중 여부나 산출물 차이를 확인할 때 비교 기준이 됩니다.
| 기록할 항목 | 확인 방법 | 남길 근거 |
|---|---|---|
| Bazel 및 Apple 플랫폼 규칙 | 프로젝트의 잠금 파일과 설정에서 사용 중인 항목을 확인합니다. | 버전 선언과 규칙 설정 |
| Xcode와 SDK | xcode-select -p, xcodebuild -version, xcrun --sdk iphoneos --show-sdk-version 결과를 기록합니다. 명령의 용도는 Apple의 Xcode 명령줄 도구 참고 자료에서 확인할 수 있습니다. |
명령 출력과 선택된 개발자 디렉터리 |
| 대상과 빌드 인자 | 프로젝트의 실제 빌드 명령과 .bazelrc 설정을 확인합니다. |
명령 전체와 적용된 설정 |
| 빌드·테스트 결과 | 동일한 코드 상태에서 빌드와 관련 테스트를 실행합니다. | 로그, 종료 결과, 산출물 확인 기록 |
Apple 도구가 올바르게 선택되지 않았다면 원격 캐시를 설정하지 말고 먼저 바로잡습니다. 명령줄 도구의 설치와 Xcode 선택은 Apple의 명령줄 도구 설치 안내를 기준으로 점검합니다. Xcode와 SDK의 실제 선택 결과를 기록하지 않은 채 “같은 환경”이라고 판단하면 안 됩니다.
원격 Mac 개발 환경의 도구 체인과 셸 구성을 함께 정리하려면 원격 개발 환경 구성 안내를 참고해 필요한 접속·운영 항목을 분리해 기록합니다. 프로젝트 잠금 파일에 선언된 규칙과 실제 설치된 도구가 일치하는지도 대조합니다. Apple 플랫폼 규칙의 변경 사항은 rules_apple 공식 저장소의 문서와 변경 내역으로 확인합니다.
01도구 체인 차이를 제거한 뒤 캐시를 연결합니다
원격 Mac에서 기준 빌드가 실패한다면 캐시 문제로 분류하지 않습니다. 우선 로컬 Mac과 원격 Mac의 Xcode 선택 경로, SDK, Bazel 설정, 빌드 인자, 환경 변수를 비교합니다. 차이가 발견되면 수정 후 캐시를 사용하지 않은 상태로 기준 빌드를 다시 실행합니다.
차이가 없는 것처럼 보여도 선택된 Xcode 경로와 실제 명령 출력은 각각 확인해야 합니다. 설치되어 있는 Xcode와 현재 명령줄에서 선택된 Xcode가 다를 수 있기 때문입니다. Apple 도구의 선택과 설치 절차를 확인할 때는 앞서 제시한 명령줄 도구 참고 자료와 설치 안내를 함께 사용합니다.
| 설정 항목 | 결정할 내용 | 검증할 근거 |
|---|---|---|
| 캐시 주소와 방식 | 프로젝트에서 사용할 캐시 주소와 연결 방식을 정합니다. | Bazel 설정과 연결 시험 결과 |
| 읽기 권한 | 개발자와 CI 중 어떤 주체가 결과를 읽을지 정합니다. | 역할별 설정 검토와 읽기 로그 |
| 쓰기 권한 | 어떤 통제된 작업만 결과를 기록할지 정합니다. | CI 권한 설정과 쓰기 결과 |
| 캐시 대상 | 공유해도 되는 빌드 결과와 제외할 대상을 검토합니다. | 빌드 규칙과 팀의 보안 검토 |
| 인증 정보 | 비밀 정보의 저장 위치와 로그 노출 여부를 확인합니다. | 저장소 밖의 비밀 관리 설정과 로그 점검 |
Bazel은 원격 캐시를 설정하는 방식과 읽기·쓰기 동작을 문서화하고 있습니다. 실제 설정은 프로젝트의 Bazel 버전과 캐시 백엔드가 지원하는 인증 방식에 맞춰야 하므로 Bazel 원격 캐시 문서를 대조합니다. 설정 파일이나 명령줄에 인증 비밀을 직접 넣는 방식은 피하고, CI에서 해당 값이 로그에 출력되지 않는지 확인합니다.
읽기와 쓰기는 같은 권한으로 묶지 않는 편이 안전합니다. 읽기 권한은 넓게 부여하더라도, 캐시에 결과를 기록하는 주체는 검토된 CI 작업 등으로 제한하고 그 설정 근거를 남기세요.
02두 Mac에서 실제 캐시 적중을 검증합니다
캐시 연결을 마쳤다면 첫 번째 Mac에서 기준 빌드를 수행해 결과를 기록합니다. 이어 두 번째 Mac에서 같은 저장소 상태, 도구 체인, 빌드 대상과 인자로 같은 작업을 실행합니다. 두 번째 빌드가 성공했다는 것만으로는 캐시 적중이 확인되지 않습니다. Bazel 출력과 로그에서 원격 캐시 읽기 또는 적중을 확인해야 합니다.
이 과정에서 소스 코드만 같고 빌드 인자나 환경 변수가 다른 경우를 놓치기 쉽습니다. 두 Mac의 실행 명령과 설정을 기록하고 비교해야 적중하지 않은 원인을 좁힐 수 있습니다. 문제가 있다면 네트워크 연결과 캐시 주소, 인증, 도구 체인과 입력 조건을 차례로 확인한 뒤 같은 시험을 다시 실행합니다.
- [ ] 두 Mac에서 같은 코드 상태와 대상 명령을 사용했습니다.
- [ ] 선택된 Xcode와 SDK, Bazel 설정, 주요 환경 변수를 각각 기록했습니다.
- [ ] 첫 번째 Mac의 캐시 쓰기 결과를 로그에서 확인했습니다.
- [ ] 두 번째 Mac의 캐시 읽기 또는 적중 근거를 로그에서 확인했습니다.
- [ ] 적중하지 않았을 때 설정을 비교하고 수정 후 같은 시험을 반복했습니다.
- [ ] 빌드 산출물과 테스트 결과를 별도로 대조했습니다.
적중하지 않았을 때는 캐시 서버가 정상이라고 가정하거나 빌드가 성공했다는 이유만으로 검증을 끝내지 않습니다. Bazel의 원격 캐시 문제 해결 안내에 따라 캐시 읽기 정보와 관련 로그를 살피고, 양쪽 Mac의 빌드 입력 조건을 대조합니다.
03캐시와 원격 실행, 서명을 서로 다른 기준으로 판정합니다
원격 캐시는 조건에 맞는 빌드 결과를 재사용합니다. 원격 실행은 빌드 작업 자체를 원격 환경에서 실행하도록 보내는 별도 기능입니다. 따라서 원격 캐시 적중이 확인되어도 해당 작업이 원격에서 실행됐다고 볼 수 없고, 원격 실행이 성공해도 최종 앱의 서명과 배포 가능성이 확인된 것은 아닙니다.
Bazel 문서도 캐싱과 실행 기능을 구분합니다. 작업을 원격으로 보내려는 경우에는 원격 실행 개요를 따로 살펴보고, Apple 도구 체인과 프로젝트의 규칙이 해당 방식에 적합한지 검토해야 합니다. rules_apple 관련 설정도 프로젝트에서 고정한 규칙 버전의 공식 문서와 대조합니다.
코드 서명과 최종 패키징은 따로 승인하고 검증합니다. 서명 키나 인증서 접근 권한을 캐시 설정에 포함시키지 말고, 실제 배포용 산출물의 서명 결과를 확인합니다. Apple의 배포용 서명 코드 생성 안내를 기준으로 서명 흐름을 검토하되, iOS 프로젝트의 실제 배포 절차와 자격 증명 정책도 별도로 확인해야 합니다.
04CI에서 단계적으로 운영 범위를 넓힙니다
개발자 Mac에서 적중을 확인했다면 CI에서도 같은 Bazel 설정과 확인 가능한 빌드 명령을 사용합니다. CI 계정이 의도한 범위에서 캐시를 읽고 쓰는지 확인하고, 캐시를 사용할 수 없는 경우의 오류 기록과 복구 경로도 점검합니다. 캐시가 일시적으로 동작하지 않아도 팀의 빌드 절차가 어떻게 실패하거나 대체 실행되는지 명확해야 합니다.
적용 범위를 늘릴지는 로그와 산출물로 판단합니다. 특정 빌드의 적중 근거, 캐시를 사용한 빌드와 기준 빌드의 결과 비교, 권한 검토 기록이 모두 있어야 합니다. 실제 측정 자료 없이 빌드가 빨라졌다고 단정하지 않습니다. 캐시를 사용할 수 없는 경우에도 다시 실행하거나 캐시 비활성화 방식으로 진단할 수 있도록 CI 로그에 원인과 실행 설정을 남깁니다.
조건별 적용 판단
- 기준 빌드가 원격 Mac에서 재현되고, 다른 Mac에서 캐시 읽기 근거와 결과 일치가 확인되면 제한된 CI 작업부터 캐시를 적용합니다.
- 빌드가 재현되지만 캐시 적중이 확인되지 않으면 권한·환경·네트워크를 더 점검하고, 확인될 때까지 기존 빌드 절차를 유지합니다.
- 기준 빌드가 원격 Mac에서 실패하면 캐시 적용을 보류하고 Xcode 선택, SDK, Bazel 규칙과 설정을 먼저 수정합니다.
- 캐시는 적중하지만 서명이나 최종 산출물 검증이 끝나지 않았다면 배포 승인으로 간주하지 않습니다.
- 원격 실행을 검토한다면 캐시와 별도의 시험 및 승인 절차를 마련하고, Apple 도구 체인의 실행 조건을 확인한 뒤 범위를 정합니다.
CI가 안정적으로 읽고 쓸 수 있는지와 팀의 비용 조건을 함께 검토하려면 요금 및 이용 조건도 확인할 수 있습니다. 장기간 상시 빌드가 필요하고 전용 하드웨어나 물리적 연결이 요구되는 팀은 자체 Mac 운영과 구매도 비교해야 합니다.
05자주 묻는 적용 질문
Bazel iOS 프로젝트에 캐시를 붙이는 순서는 어떻게 잡아야 하나요?
먼저 실제 프로젝트의 빌드와 테스트를 로컬에서 통과시키고, 사용 중인 규칙과 Xcode, SDK 및 빌드 인자를 기록합니다. 같은 조건으로 원격 Mac에서 기준 빌드를 재현한 다음 캐시 주소와 인증을 설정합니다. 이후 두 번째 Mac에서 로그의 원격 읽기 근거를 확인하고, CI 권한과 최종 산출물 검증까지 별도 단계로 수행합니다.
원격 캐시 적중과 원격 실행 성공을 같은 의미로 봐도 되나요?
같은 의미가 아닙니다. 캐시 적중은 조건에 맞는 기존 결과를 가져왔다는 뜻이고, 원격 실행은 빌드 작업을 원격 실행 환경에서 처리했다는 뜻입니다. 각 기능의 설정과 로그 근거를 따로 확인해야 합니다. 한쪽의 성공을 다른 쪽의 증거로 사용하지 말고, 프로젝트에 필요한 기능만 먼저 적용합니다.
두 Mac에서 적중 결과가 다르면 어디를 먼저 비교해야 하나요?
같은 코드 상태인지 확인한 뒤 빌드 명령과 인자, 선택된 Xcode, SDK, Bazel 설정과 환경 변수를 비교합니다. 이어 인증 정보의 권한, 네트워크 연결과 캐시 주소를 확인합니다. 변경한 뒤에는 같은 조건으로 다시 실행하고 로그에서 읽기 또는 적중 근거를 확인해야 합니다. 산출물 비교도 캐시 로그와 별개로 남깁니다.
서명과 앱 패키징까지 캐시 또는 원격 실행에 맡겨도 되나요?
캐시 적중은 앱 서명 완료나 배포 승인을 뜻하지 않습니다. 원격 실행 여부도 서명 결과를 대신 증명하지 않습니다. 자격 증명의 접근 권한과 서명된 최종 산출물을 별도로 검증하고, 승인되지 않은 작업이 서명 키를 읽지 못하도록 제한합니다. 통제된 Mac에서 서명과 패키징을 유지할지는 팀의 자격 증명 정책과 배포 절차에 따라 결정합니다.
이미 Linux 빌드 서버나 개인 Mac에서만 빌드하는 방식은 Xcode 도구 체인 접근, 다른 팀원과의 환경 재현, 장시간 실행 작업 관리에서 제약이 생길 수 있습니다. 실제 프로젝트에서 원격 Mac의 기준 빌드와 캐시 적중을 확인한 뒤 지속적으로 Apple 도구 체인을 운영해야 한다면, Mac을 직접 구매하는 대신 NUKCLOUD의 원격 Mac 대여를 임시 검증 환경이나 지속 실행 노드로 비교해 볼 수 있습니다. 상시 고정 부하나 물리 장비 연결이 필수라면 자체 Mac이 더 적합할 수 있으므로, 먼저 이용 조건과 요금을 확인하고 운영 방식에 맞춰 결정하세요.