본문 바로가기
C.W.K.
Stream
Lesson 02 of 04 · published

아침 뽑기는 엔진 밖에 살아

~12 min · cron, idempotency, scheduling, only-if-empty

Level 0마른 펜촉
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"scheduler는 언제 할지, 엔진은 안전하게 반복할 수 있는 연산을 소유해."

우물이 자라는 방향

아침 문장은 쓸모 있는 의식이야. 글쓰기 엔진 안 숨은 scheduler는 아니고. schedule에는 이미 가족 주인이 있으니 복제하면 시계 두 개가 같은 날을 만들려고 경주해.

작은 계약으로 붙여

caller가 준 entry_date가 비었을 때만 뽑기를 만드는 좁은 연산을 열어. 외부 cwkPippa scheduler가 언제 부를지 정하고 delivery를 직렬화해.

확장이 주권을 훔칠 때

엔진 현지 시계는 사용자 날짜를 추측하고 schedule 상태를 숨겨. endpoint의 only-if-empty 검사는 순차 retry를 안전하게 하고 scheduler의 single lease가 동시 delivery를 막아. 엔진은 ritual key나 또 다른 clock을 만들지 않아.

확장 불변식. scheduler는 언제 할지, 엔진은 안전하게 반복할 수 있는 연산을 소유해.

처음 약속으로 다시 시험해

이 기능이 생겨도 원문이 먼저고 펜은 저자 손에 있으며 늦은 결과는 허락을 물어야 해. 공유와 scheduler, search, audio가 각자 편의를 위해 원문 복사본이나 숨은 clock, 무제한 payload를 만들지 않는지 따라가. 새 기능이 오래된 불변식을 우회하면 성장한 게 아니라 다른 제품이 된 거야.

끝까지 실행해

timeout 뒤 scheduler retry를 따라가며 그 entry_date에 passage가 하나만 남는지 증명해. 정상 경로와 함께 중복 호출, source edit, 삭제, stale artifact, 권한 거절을 넣어. 화면의 한 번 성공보다 database row와 outbound payload, sibling reference가 같은 이야기를 하는지 증명해.

우물을 닫는다는 것

닫는 건 기능을 멈춘다는 뜻이 아니야. 한 번의 필사가 원문 생성에서 종이, 복구, 다시 찾기, 선택 공유까지 완결된다는 뜻이야. 그 사이 기술이 자신을 설명할 때만 보이고 나머지 시간에는 잉크 뒤로 물러나면 우물이 제대로 손을 얻은 거야.

이 확장의 실제 계약

caller는 entry_date와 only_if_empty를 보내. cwkPippa가 singleton schedule을 소유하고, Inkwell은 그 날짜를 검사해 이미 엔트리가 있으면 skipped 응답을 돌려주며 비었을 때만 저장된 default로 만들어. 현재 schema에 없는 uniqueness를 주장하지 않아.

새 기능의 첫 질문은 “할 수 있나?”가 아니라 “원문 우선 약속을 깨지 않고 어디에 붙나?”야. 오래된 불변식이 새 경로에서도 같은 말을 해야 해.

Code

주인이 있는 아침 연산을 불러·python
def request_morning_draw(client, device_entry_date):
    response = client.post("/api/v1/draw", json={
        "entry_date": device_entry_date,
        "only_if_empty": True,
    })
    response.raise_for_status()
    return response.json()

# cwkPippa owns scheduling and serial delivery of this call.

External links

Exercise

timeout 뒤 scheduler retry를 따라가며 그 entry_date에 passage가 하나만 남는지 증명해.
Hint
한 화면이 아니라 전체 상태 전이를 증명해.

Progress

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

댓글 0

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

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