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

보이기 전에 써

~11 min · 덧붙이기만, 보이기-전에-쓰기, 영속성, 투영

Level 0찬 쇠
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

보이기 전에 써

눈에 보이는 상태는 투영이야. 판, 조종석, 승자 카드, 대기열 표시는 오래 남는 사실에서 조립한 화면이지. 화면이 먼저 바뀌고 사실이 나중에 쓰이면, 무너진 뒤에 사용자는 시스템이 존재했다고 증명하지 못하는 무언가를 기억하게 돼.

보이기 전에 쓰는 순서는 그 유혹을 뒤집어. 전이를 검사하고, 사건과 결과물 주소를 한 번의 영속 경계 안에 덧붙이고, 확정한 다음에 투영을 내보내. 화면이 잠깐 낡을 수는 있어도 새로 고치면 진실로 돌아와. 반대로 쓰이지 않은 성공을 먼저 본 화면은 새로 고칠수록 모순만 만나.

가장 신나는 순간일수록 중요해. 자리 수락, 제출, 심사위원 선정, 판결, 봉인 해제. 낙관적인 화면이 제일 끌리는 순간이면서, 사건 하나를 잃으면 신뢰가 통째로 무너지는 순간이야. ‘보내는 중’이나 ‘기다리는 중’은 먼저 보여도 돼. 끝났다는 사실은 저장되기 전에 보여주면 안 돼.

그래서 기록 줄기는 나중에 붙이는 감사 기능이 아니야. 운영 상태를 다시 세우고 화면의 진실을 설명하는 원천이야.

효과를 보여주기 전에 원인을 보존해. 낡은 화면은 새로 고치면 되지만 쓰이지 않은 성공은 복구할 방법이 없어.

Code

보이기 전에 쓰는 전이·python
TERMINAL = {"submitted", "accepted", "unsealed", "decided"}


class Crash(Exception):
    pass


def transition(trail, screen, command, *, crash_after_show=False):
    """순서 하나만 바꿔도 복구 가능성이 통째로 달라진다."""
    if command["state"] in TERMINAL:
        trail.append(command)            # 1) 먼저 영속
        if crash_after_show:
            raise Crash("쓰고 나서 죽었다 — 복구 가능")
        screen.append(command["state"])  # 2) 그다음 화면
    else:
        screen.append("pending")         # 진행 중은 먼저 보여도 된다
    return trail, screen


trail, screen = [], []
try:
    transition(trail, screen, {"state": "submitted", "seat": "A"},
               crash_after_show=True)
except Crash as exc:
    print(exc)

# 화면은 비었지만 사실은 남았다 -> 새로 고치면 진실로 돌아온다.
assert screen == [] and trail[0]["state"] == "submitted"
print("화면:", screen, "| 기록:", trail)

External links

Exercise

끝을 알리는 화면 동작 하나를 골라, 이름표가 바뀌기 전에 끝나야 할 영속 경계를 써.
Hint
그게 없으면 보이는 상태를 증명하지 못하는, 바로 그 사건에 이름을 붙여.

Progress

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

댓글 0

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

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