environment.yml이라도 채널 우선순위·미러 응답·solver 버전에 따라 해석이 달라질 수 있으므로, 운영에서는 건식 실행(dry-run)과 플랫폼별 lockfile을 기준선으로 삼는 편이 안전합니다. 이 글은 Git·npm·Homebrew 풀 가속이 아니라 콘다 프런트엔드·libmamba·lockfile만 다룹니다. 내부 링크(로그인 불필요): MacPull 홈, 기술 블로그 목록, 관련 의사결정 글 Nix flake·substituter 매트릭스.
의사결정 매트릭스:conda / mamba / micromamba
세 도구 모두 동일한 패키지 메타데이터를 쓰지만, 배포 단위·solver 기본값·캐시 경로가 다릅니다. 공유 러너에서는 “빠름”보다 재현 가능한 lock을 먼저 고정하세요.
팀 표준을 정할 때는 (1) CI와 로컬이 같은 .condarc를 읽는지 (2) conda info로 활성 채널·프록시·SSL이 일치하는지 (3) 빌드 로그에 mamba·micromamba 버전 문자열을 남길지를 체크리스트로 묶으면, 이후 장애 분석 시 “누가 다른 repodata를 봤는지”를 빠르게 좁힐 수 있습니다.
| 도구 | 적합한 경우 | 장점 | CI에서 주의 |
|---|---|---|---|
| conda (classic) | 레거시 레시피·conda-build 호환 | 문서·예제가 많음 | solver·pkgs 캐시 버전을 로그에 남기고 lock으로 흔들림 흡수 |
| mamba | 대형 env·반복 install | libmamba로 빠른 해석·로그 가독 | CONDA_SOLVER=libmamba와 .condarc를 팀 전체가 동일하게 |
| micromamba | 단일 바이너리·에이전트형 러너 | 설치 경로 단순·프리픽스 격리 용이 | MAMBA_ROOT_PREFIX를 잡별로 분리, Miniconda와 pkgs 혼선 방지 |
미러 엔드포인트와 채널(channel_alias·.condarc)
environment.yml의 channels: 순서는 해석 결과에 직접 영향을 줍니다. 사내·근접 미러를 쓸 때는 channel_alias: https://미러-베이스 또는 채널 URL을 명시하고, 로컬 개발자·CI·원격 Mac이 같은 .condarc를 읽게 하세요. TLS 신뢰 체인(SSL_CERT_FILE)이 맞는지 먼저 확인한 뒤 대역을 논의합니다.
# 예시: 워크스페이스에만 적용 (플레이스홀더를 실제 미러로 교체)
export SSL_CERT_FILE="${SSL_CERT_FILE:-/path/to/ca-bundle.pem}"
cat > ./ci.condarc <<'EOF'
channels:
- conda-forge
channel_priority: strict
# channel_alias: https://internal-mirror.example.invalid/conda
EOF
export CONDARC="${PWD}/ci.condarc"
병렬 설치·다운로드 파라미터
mamba·micromamba는 다운로드 병렬도를 조절할 수 있습니다. 공유 원격 Mac에서는 동시 잡 수 × 스레드가 출구 레이트 리밋을 건드리기 쉬우므로 보수적으로 시작합니다. CONDA_CHANNEL_PRIORITY=strict는 혼합 채널에서의 “뜻밖의 업그레이드”를 줄입니다.
| 변수·플래그 | 역할 | 시작값 예 | 비고 |
|---|---|---|---|
MAMBA_ROOT_PREFIX | micromamba 루트 | ${CI_WORKSPACE}/.mamba | 잡 간 디렉터리 충돌 방지 |
CONDA_PKGS_DIRS | 패키지 캐시 | ${CI_WORKSPACE}/.conda/pkgs | 공유 캐시는 락·정리 정책 필요 |
MAMBA_DOWNLOAD_THREADS / -j | 다운로드 병렬 | 4→8 순으로 시험 | 429 증가 시 하향 |
CONDA_SOLVER | 해석 백엔드 | libmamba | classic과 혼용 시 lock으로 차이 흡수 |
실패·재시도(HTTP 429·repodata·5xx)
국경 간 경로에서는 429와 repodata.json 지연이 흔합니다. Retry-After가 있으면 그 시간을 우선하고, 없으면 2·4·8·16초 사다리에 무작위 지터를 더합니다. 5xx는 짧은 백오프 후 재시도하되, 동일 스텝을 여러 잡이 동시에 반복하지 않게 파이프라인 상한을 둡니다. OCI·컨테이너 풀 튜닝은 Helm OCI 매트릭스와 정책을 맞추면 운영이 단순해집니다.
export CONDA_HTTP_TIMEOUT="${CONDA_HTTP_TIMEOUT:-120}"
# 예: install 재시도 (zsh/bash)
for i in 1 2 3 4 5; do
micromamba install -y -p ./.venv -c conda-forge numpy && break
sleep $((4 * i))
done
lockfile·export·environment.yml 일관성 검수
수용 기준 예시: ① 동일 environment.yml에서 conda-lock으로 osx-arm64 lock 생성·커밋 ② CI는 lock에서만 환경 생성 ③ micromamba export 또는 conda list --explicit를 기준 해시·요약과 비교 ④ mamba·micromamba 버전을 아티팩트 로그에 기록. “최신으로 풀렸다”는 한 줄보다 diff가 비어 있다는 쪽이 릴리스에 안전합니다.
export MAMBA_ROOT_PREFIX="${CI_WORKSPACE:-$PWD}/.mamba-root"
export CONDA_PKGS_DIRS="${CI_WORKSPACE:-$PWD}/.conda/pkgs"
export CONDA_CHANNEL_PRIORITY=strict
micromamba create -y -p ./.venv -f environment.yml --dry-run
conda-lock lock -f environment.yml -p osx-arm64 -o conda-lock.yml
micromamba create -y -p ./.venv -f conda-lock.yml
micromamba export -p ./.venv > export-after-ci.yml
# 기준 파일과 diff (프로젝트에 맞게 경로 조정)
diff -u baseline-export.yml export-after-ci.yml || true
FAQ(본문과 JSON-LD 동일 요지)
Q. mamba와 conda의 해석이 다릅니다.
A. 채널 순서·solver·channel_priority를 동일한 .condarc로 맞추고, 남는 차이는 lockfile로 흡수합니다.
Q. 공유 Mac에서 pkgs가 깨집니다.
A. 잡별 CONDA_PKGS_DIRS를 나누거나, 쓰기 직렬화·청소 윈도를 정합니다.
요약·원격 Mac 패키지 안내
국경 간 콘다 풀은 미러·병렬·백오프·lockfile 네 가지를 표로 고정할 때 운영 부담이 줄어듭니다. Apple Silicon 전용 워크로드와 디스크·동시성 여유가 필요하면 MacPull 원격 Mac 플랜을 검토하세요.