C.W.K.
Stream
Lesson 02 of 04 · published

조용한 일일 Loop

~10 min · scheduling, backups, unattended, honest-failure

Level 0Open Gate
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"하루 한 번, 아무도 안 깬 사이, stronghold 가 자기 정직한 스냅샷을 뜨고 fresh 백업을 철해. 못 하면, 그렇다고 말해 — 조용히."

06:31 에 뭐가 도나

매일 06:31 Asia/Seoul 에 단일 프로세스가 일일 loop 를 돌려. 한 번에: strict-primary quote 와 FX refresh(fallback 없음 — Track 4 의 무인 경로)를 하고, 두 Markdown export 를 재생성하고, writable owner 당 portfolio_value_history row 하나를 append 하고(스냅샷에 시간축을 줘), SQLite-consistent 백업을 rotate 하며 최신 14개를 유지해. live 스냅샷 시스템을 durable 하고 날짜 붙은 이력과 최근 백업의 안전망을 가진 것으로 바꾸는 심박이야 — 아무도 안 건드리고.

strict-primary, 아무도 안 보니까

refresh 가 strict-primary 인 걸 봐: primary provider 만 쓰고 절대 fallback 안 해. 이건 provider-boundaries 트랙의 무인 규칙이 자기 자연스러운 집에 나타난 거야. 06:31 엔 provider 대체를 확인할 사람이 없으니, loop 는 대체를 거부해 — 깨끗한 primary 데이터를 얻거나 정직한 실패를 기록해. 일일 스냅샷은 durable 하고 canonical 이야; 가장 원치 않는 건 조용히 swap 된 fallback source 가 아무도 모르게 영구히 쓰이는 거야.

무인 작업은 정직하게 실패해야 해, 절대 조용히 실패하거나 성공을 가짜로 만들지 말고. 사람이 안 보는 예약 job 은 덜이 아니라 더 보수적이어야 해 — 확인을 요청 못 하니, 확인이 필요한 걸 거부해야 하고, 못 한 걸 덮는 대신 기록해야 해. 지켜보는 사람의 부재가 정직함의 기준을 낮추는 게 아니라 올려.

실패가 크래시 아니라 보이는 chip 이 돼

loop 가 완료 못 할 때 — provider 다운, 네트워크 끊김 — 프로세스를 크래시하거나 조용히 건너뛰지 않아. 실패를 정직하게 기록하고(ok:false 마커와 상세), 그게 UI 에 stale chip 으로 떠올라: 마지막 refresh 가 성공 못 했고 보는 데이터가 마땅한 것보다 오래됐다는 차분하고 보이는 표시. 옛 observation 은 온전히 남고; 아무것도 파괴 안 돼. Keep 이 다른 모든 종류 staleness 를 다루는 같은 low-trigger, 라벨된 방식으로 진실('이건 stale, refresh 실패')을 알아.

crash-safe 백업이 loop 의 조용한 보험이야. SQLite-consistent 백업 rotate — 쓰기 중간이 절대 아니게 뜬 스냅샷 — 하며 최신 14개 유지는 가족 기록의 최근 복원 가능한 복사가 항상 있다는 뜻이야. Track 1 의 forward-only 복구와 합치면 이게 재해 이야기 전체야: 좋은 백업 복원, 좋은 리비전 선택, 프로세스 하나 재시작. 일일 loop 가 그 안전망을 fresh 하게 짜둬.

Code

일일 loop: refresh, 기록, 백업 — 정직하게 (예시)·python
def daily_loop():                  # 06:31 Asia/Seoul, in-process
    try:
        refresh_quotes(strict_primary=True)   # fallback 없음 (무인)
        refresh_fx(strict_primary=True)
        regenerate_markdown_exports()
        for owner in writable_owners():
            append_value_history(owner, today())  # 시간축이 자람
        rotate_backups(keep=14)                   # crash-safe 스냅샷
        set_setting("last_daily_refresh", {"ok": True, "at": now()})
    except Exception as e:
        # 크래시 안 함, 성공 가짜 안 함. 정직하게 기록.
        set_setting("last_daily_refresh", {"ok": False, "error": str(e)})
        # UI 가 이걸 읽고 차분한 'stale' chip 을 보여줘. 데이터는 온전.

External links

Exercise

어떤 시스템의 무인 일일 job 을 설계해(백업, sync, 리포트). 세 가지를 정해: happy path 에 뭘 하는지, 확인할 사람이 없어서 뭘 거부하는지, job 이 크래시하거나 성공을 가짜로 안 하면서 사람이 나중에 알게 실패를 어떻게 기록하는지. 그다음 그 실패가 어떻게 떠올라야 하는지 묘사해 — 시끄러운 알림, 차분한 보이는 마커? 시스템 기질에 대고 선택을 정당화해.
Hint
예약 job 의 함정 둘: 조용한 실패(깨진 걸 아무도 모름)와 가짜 성공(틀린 걸 쓰고 넘어감). 정직한 중간은 표면이 나중에 표시할 수 있는 기록된 ok:false. 차분한 도구엔 보이는 'stale' 마커가 알람을 이겨 — 근데 타협 불가한 부분은 진실이 사람이 볼 어딘가에 기록된다는 거야.

Progress

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

댓글 0

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

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