CI rsync와 인터랙티브 SFTP가 같은 업링크를 공유할 때의 대역 스케줄링 개념도

2026년 원격 Mac과 CI가 같은 업링크를 공유할 때 rsync --bwlimit, --rsync-path의 ionice/nice, 멀티 잡 공정 큐, 인터랙티브 SFTP 공존 결정 매트릭스

여러 Runner·cron·디자이너의 인터랙티브 SFTP가 동일 원격 Mac 진입점으로 몰리면 평균 Mbps보다 p95 체감 지연이 먼저 무너집니다. 2026년에는 업링크 예산과 디스크 스케줄링, 병렬 잡 토큰, NAT에 맞춘 SSH 킵얼라이브를 파이프라인 기본값으로 코드화하는 편이 장기적으로 저렵합니다.

1. 문제 분류

업링크 포화: 단일 rsync가 숫자상 작아 보여도 소파일 폭주가 큐를 채우면 SFTP 제어 패킷이 뒤로 밀립니다. RTT 자체보다 큐 규율 문제입니다.

디스크 기아: 병렬 쓰기로 NVMe 대기열이 길어지면 CPU 사용률은 낮아도 SSH 세션이 타임아웃합니다. --bwlimit만으로 부족하고 ionice나 병렬 축소가 필요합니다.

세션 폭풍: CI 매트릭스가 MaxSessions·방화벽 테이블을 고갈시킵니다. 참고: 동시 SFTP·keepalive, ControlMaster.

  1. 평균 Mbps 착시: p95·디렉터리 지연을 함께 봅니다.
  2. 계정 혼합: 사람과 봇이 같은 UNIX 사용자면 재시도가 충돌을 키웁니다.
  3. 창 구성 부재: 주간·야간 회선 혼잡을 코드로 남깁니다.

2. 매트릭스

대용량 전송·병렬 글과 함께 읽으면 병렬 전략과 공정성이 맞물립니다.

수단 병목 장점 한계
--bwlimit WAN 업링크 즉시 예측 가능 로컬 SSD 압력 무시
원격 ionice/nice 대상 IO 인터랙티브 보호 --rsync-path 필요
CI 토큰 세션 증식 꼬리 지연 안정 파이프라인 시간 증가 가능
계정 분리 권한 재시도 영향 범위 축소 비밀 관리 증가

3. 7단계 런북

Composite Action이나 내부 셸 모듈에 기본값을 모읍니다. BatchMode=yes와 키 경로를 고정하고 로그는 구조화합니다.

RSYNC_RSH="ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=4"
rsync -az --partial --bwlimit=4500 \
  --rsync-path="ionice -c2 -n7 nice -n 5 rsync" \
  ./artifacts/ "ci@${REMOTE_MAC}:/srv/staging/job-${GITHUB_RUN_ID}/"
  1. 인터랙티브 SLO: 업로드 중 디렉터리 응답 상한을 정의합니다.
  2. bwlimit: 피크의 60~70%에서 시작해 관측합니다.
  3. ionice 확인: 원격 PATH·정책에 맞춰 nice만 쓸지 결정합니다.
  4. 키프얼라이브: NAT 타임아웃과 맞춥니다.
  5. 토큰: 동시 라이터 수를 제한합니다.
  6. 카나리아: 동일 스크립트로 10~15% 페이로드를 검증합니다.
  7. 경로 축소: files-from 매니페스트로 스캔 폭발을 줄입니다.

4. 메트릭

업링크 p95/p99, 원격 디스크 await, 인터랙티브 핸드셰이크 지연을 함께 봅니다. 카나리아는 파일 개수 분포까지 현실적으로 맞춥니다.

근무 시간대에 자동으로 bwlimit를 낮추는 등 예의를 설정 파일에 남기면 감사에 유리합니다.

관측 스택은 평균이 아니라 퍼센타일로 알람을 걸어야 합니다. 디자이너가 체감하는 디렉터리 지연이 1초를 넘기면 같은 구간의 CI 대시보드에서 어떤 저장소가 대역을 가장 많이 썼는지 교차 확인합니다.

압축(-z)은 이미 압축된 미디어 산출물에서 CPU만 소모하고 대역 그래프만 낮춰 오판을 부릅니다. 미디어 비중이 높은 앱 팀은 압축을 끄고 bwlimit 곡선을 다시 그리는 편이 공정성과 맞습니다.

지역별 Runner와 HQ 디자이너가 같은 노드를 바라볼 때 NAT 타임아웃 값이 다릅니다. 문서화된 네트워크 표준 없이 ServerAliveInterval을 복붙하면 「간헐적 끊김」만 남습니다.

5. 매니페스트·SHA256

공정 전송도 바이트가 틀리면 무의미합니다. 공개 포인터 전에 SHA256 게이트를 통과시킵니다.

6. FAQ

Q: 라우터 QoS만으로 충분한가요? A: 분할 터널 등 우회가 있어 애플리케이션 한도가 더 예측 가능합니다.

Q: 압축은? A: CPU와 경쟁해 팬리스 맥에서 스로틀이 날 수 있습니다.

Q: openrsync? A: 무인 rsync 문서와 dry-run으로 검증하세요.

7. 정리

--bwlimit·원격 ionice·토큰·키프얼라이브를 기본 파이프라인에 넣으면 공유 원격 Mac 운영이 측정 가능한 SLO로 바뀝니다.

자체 호스팅은 긴급 릴리스마다 한도가 풀리기 쉽고 계정 위생이 무너질 수 있습니다.

분리된 서비스 계정·스테이징 템플릿·CI 기본 레시피를 초기부터 원한다면 SFTPMAC 원격 Mac 요금과 도움말을 참고하세요.