본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

지켜보지 않는 모니터링

~11 min · monitor, autonomy, pacing, reliability

Level 0Kindling
0 XP0/32 lessons0/10 achievements
0/100 XP to next level100 XP to go0% complete

너를 필요로 하지 않는 전송 엔진

archive-design 트랙의 속도와 이어받기 레슨은 무관심을 뚫고 살아남는 캠페인을 기술했어. Monitor 표면은 그 캠페인이, 돌아가는 거야: 승인된 다운로드 작업들의 큐가 설정된 속도로 일일 예산 아래에서 움직이고, 각 작업은 중단을 넘어 이어받기 가능하고, 각 착지는 검증돼 — 그 모든 게 페이지를 열어 두거나 터미널을 붙여 둘 인간을 필요로 하지 않아.

Woodpile Monitor 표면: 다운로드 작업 카드들의 큐, 각 카드는 모델 이름과 총 크기와 진행 바를 보여 주고, 수신 바이트·평균 속도·경과/잔여 시간 같은 작업별 전송 통계가 따라와.
돌아가는 캠페인: 일일 예산 아래 속도 조절된 작업들, 이어받기 가능하고 검증되는 — 보여지는 게 아니라 보고돼.

카드들이 뭘 싣는지 봐: 작업별 진행 상황(기대 크기 대비), 수신 바이트와 평균 속도, 경과와 잔여 추정. 그건 예산 레슨의 계획 숫자들이 실시간으로 떠오른 거야. 큐는 스스로 맥박 치고, 중단에서의 회복은 엔진이 수행하는 상태 전환이지 너에게 할당하는 작업이 아니야. 들여다볼 때 상태는 이미 참이야 — 모니터의 일은 보고지, 보여지는 게 아니야.

자율성이 기능이 아니라 설계의 귀결인 이유

자율성은 야망이 아니라 실패 분석에서 따라와. 중단을 확실성으로 다뤘기 때문에 이어받기가 필수가 됐고, 이어받기가 필수라 어떤 작업도 연속 세션에 의존하지 않아. 속도가 구성돼 어떤 작업도 요행 대역폭에 의존하지 않아. 검증이 자동이라 어떤 착지도 인간의 다이제스트 점검에 의존하지 않아. 각 생존 형질이 지켜볼 이유 하나씩을 치우고, 함께 전부를 치워. 모니터는 의도적으로 지루해 — 지루함이 밖에서 본 신뢰의 모양이거든.

이게 인간 게이트와 기계 큐 사이의 정직한 분업이기도 해, Composer 레슨이 세워 둔 그거야: 사람은 결정하고(느리게, 가끔, 판단으로), 기계는 옮겨(계속, 참을성 있게, 판단 없이). 두 배정을 혼동하는 게 도구가 아기돌봄이 필요해지는 방법이야 — 또는 컬렉션이 새벽 3시에 자동화된 것들로 큐레이션되는 방법이고.

주의력은 전송 자원이 아니다. 바이트를 옮기려고 인간의 주의를 태우는 파이프라인은 가격이 틀렸어. 속도와 이어받기와 검증이 정확히 캠페인이 경계 대신 전기로 돌아가게 하려고 존재해.

집에서의 버전

너만의 큐도 스케줄러와 이전 트랙들의 스크립트로 이렇게 지루할 수 있어: 매일 밤 속도 조절된 이어받기 풀 루프를 돌리고 일일 바이트 카운터를 확인해서 예산을 존중하고, 각 파일의 다이제스트 결과를 한가할 때 읽는 로그에 이어 붙이는 launchd 작업이나 cron 항목. 셸 열 줄이 같은 성질을 사 줘 — 궁금할 때 들여다보되, 뭘 살려 두려고가 아니라.

Code

지루한 홈 큐: 매일 밤, 속도 조절, 예산·bash
# ~/bin/woodpull-nightly.sh — cron/launchd에서 매일 밤 실행
#!/bin/zsh
BUDGET_FILE=$HOME/.woodpull-day-$(date +%Y-%m-%d)
SPENT=$(cat "$BUDGET_FILE" 2>/dev/null || echo 0)
BUDGET=$((150*1024*1024*1024))   # 일일 바이트 허용량
QUEUE=$HOME/.woodpull-queue       # url<TAB>기대-크기<TAB>기대-sha256
DEST=$HOME/models                 # 착지 디렉토리

while IFS=$'\t' read -r url expected sha256; do
  dest="$DEST/$(basename "$url")"
  [ -f "$dest" ] && continue                 # 이미 착지: 건너뛰기, 절대 재풀 안 함
  [ "$SPENT" -ge "$BUDGET" ] && { echo "예산 도달"; exit 0; }
  part="$dest.part"
  curl -L -C - --fail --limit-rate 1500K -o "$part" "$url" || continue
  sz=$(stat -f%z "$part")
  [ "$sz" = "$expected" ] || { echo "크기 실패 $part ($sz != $expected)"; continue; }
  mv "$part" "$dest"
  # 검증은 착지의 일부이지 후일담이 아니야:
  got=$(shasum -a 256 "$dest" | awk '{print $1}')
  if [ -n "$sha256" ] && [ "$got" = "$sha256" ]; then
    echo "$(date -I) OK $dest" >> ~/models/digests.log
    SPENT=$((SPENT+sz)) && echo $SPENT > "$BUDGET_FILE"
  else
    echo "$(date -I) 검증 실패 $dest (got $got)" >> ~/models/digests.log
    mv "$dest" "$dest.bad-$$"   # 격리; 미검증을 착지로 세지 않기
  fi
done < "$QUEUE"
# digests.log는 마음 내킬 때 읽어. 여기서 아무것도 네가 깨어 있기를 필요로 하지 않아.

External links

Exercise

지루한 홈 큐를 배치해: 밤 스크립트를 쓰고(경로와 예산 조정), 실제 URL과 기대 크기를 든 항목 하나로 큐를 뿌리고, 최소 두 밤 스케줄대로 돌아가게 해. 캠페인 중간에 아무것도 안 만지고 한 번 들여다보고, 다이제스트 로그가 완료된 착지를 잡았는지 검증해. 너를 필요로 한 것과 아닌 것을 적어.
Hint
네가 필요로 해야 할 단 하나: 큐의 내용물 고르기(레슨 1의 게이트). 전송 자체는 네 부재를 survive해야 해 — 안 했다면 어느 생존 형질이 빠졌던 거야?

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.