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

Live Provider, Thin Client

~11 min · provider, 런타임, 설정, 클라이언트

Level 0차가운 용기
0 XP0/37 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

현재 행은 한 주인에게서 읽어

pipeline 이 row 라면 CLI 와 UI 가 current state 를 볼 길이 필요해. 각 client 가 database 를 직접 읽으면 validation, archive, version rule 이 복사되고, startup snapshot 만 쓰면 edit 뒤 restart 전까지 낡은 policy 로 brief 를 만들 수 있어.

provider 는 persistence 와 validation 을 한곳에 두고 list, get, resolve 같은 좁은 interface 로 current row 를 내줘. client 는 table layout 을 모르고 contract 보다 오래 cache 하지 않아. canonical writer 하나가 mutation 을 소유하고 provider 가 같은 의미를 읽게 해야 해.

live catalog 와 frozen history 는 모순이 아니야. provider 는 오늘의 row version 을 주고, materialized brief 는 run 하나가 받은 당시 version 과 text 를 보존해. object 수명이 달라서 둘이 동시에 참일 수 있어.

thin client 도 제품 판단을 소유해. CLI 는 command grammar 와 human error 를, UI 는 form·sort·confirmation 을 정해. thin 이라는 말은 persistence semantics 를 위임한다는 뜻이지 아무 책임 없는 pass-through 라는 뜻이 아니야.

restart 없는 통합 시험

같은 process 에서 row 를 읽고 edit 하고 다시 읽어 새 version 이 보이는지 확인해. 동시에 edit 전에 materialize 한 brief 는 옛 version 을 지켜야 해. 이 assertion 둘이 liveness 와 history 를 따로 증명해.

thin client 는 state 를 보여줄 수는 있어도 새로 만들면 안 돼. claim, stage, verdict 는 live provider 에서 읽고 local surface 에 맞게 투영해. client 가 shadow queue 를 두거나 transition 을 추측하면, 잠깐의 편의를 얻는 대신 서로 다른 진실을 가진 forked workshop 이 생겨.

cache 가 만드는 조용한 거짓말

UI 에서 review 기본값을 켰는데 같은 프로세스 CLI 가 여전히 꺼진 값으로 브리프를 만들면 둘 다 정상처럼 보여 더 위험해. 저장은 성공했고 화면도 맞지만 실행 재료가 낡았거든. provider 시험은 수정 직후 같은 프로세스에서 읽는 경로를 꼭 포함해야 해. 동시에 이미 taken 된 브리프는 바뀌지 않아야 하고. live 와 frozen 을 한 assertion 에 섞지 말고 서로 다른 수명의 객체 둘로 확인해야 실패 원인이 선명해져.

Code

A provider returns current rows while briefs keep snapshots·python
class Provider:
    def __init__(self):
        self.row = {"name": "oneoff", "version": 1, "review": False}
    def get(self):
        return dict(self.row)
    def edit(self, **changes):
        self.row.update(changes)
        self.row["version"] += 1

provider = Provider()
brief = provider.get()
provider.edit(review=True)
assert provider.get()["version"] == 2
assert brief == {"name": "oneoff", "version": 1, "review": False}

External links

Exercise

live row provider 의 통합 테스트를 assertion 둘로 써. 하나는 같은 프로세스 갱신, 하나는 과거 snapshot 안정성을 확인하게 해.
Hint
객체 하나를 live 와 frozen 둘 다로 만들지 말고 수명이 다른 객체 둘을 써.

Progress

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

댓글 0

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

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