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

Root Class 와 Concrete Workshop

~11 min · 아키텍처, 커널, 경계, 작업장

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

공통 기계와 제품 경계를 같이 지켜

작업장 가족에는 진실 둘이 있어. queue, claim, stage, review, landing 같은 lifecycle 기계는 여러 형제에서 같을 수 있고, 그래도 각 형제는 같은 제품이 아니야. 첫 진실을 버리면 coupled copy 가 생기고, 둘째를 버리면 kernel 이 모든 domain exception 을 먹는 god-object 가 돼.

root class 는 work item identity, status transition, claim ownership, review round, landing record 처럼 중립 행동을 소유해. quest, publication, accessibility audit 같은 결과 명사는 몰라야 해. 그 말들이 public API 로 올라오면 다음 소비자가 첫 제품 세계관을 억지로 상속하게 돼.

concrete workshop 은 stage policy, template, UI vocabulary, material rule, verification hook 을 공급해. 이름과 색만 바꾸는 wrapper 가 아니야. 어떤 proof 가 필요하고 landed 가 분야에서 무슨 뜻인지 결정하니 제품 경계를 실제로 소유해.

의존은 한 방향이어야 해. concrete 가 kernel 에 기대고 kernel 은 concrete 이름을 import 하지 않아. workshop 별 if 문이 root 에 들어오는 순간 새 형제마다 kernel 배포가 필요해지고 재사용 층이 제품 catalog 를 소유하기 시작해.

공개 어휘를 감사해

type, function, serialized field, error event 를 훑고 제품 하나를 알아야 이해되는 명사를 표시해. 공통 행동이면 정확한 capability 로 바꾸고, 로컬 은유면 adapter 에 남겨. 최대 추출이 아니라 주인 하나당 약속 하나가 목표야.

kernel 은 invariant 를, workshop 은 craft 를 맡아. claim, legal transition, review record, landing receipt 는 모든 task 에 같은 보장이 필요하니 중앙에 남겨. concrete workshop 은 자기 vocabulary 와 sequencing 만 더해. 전문성은 얻되 두 번째 authority 로 자라면 안 돼.

경계가 무너지는 전형적인 장면

새 작업장이 review 단계 하나만 다르게 쓴다고 해보자. 커널 안에 if workshop == ... 를 더하는 게 제일 빨라 보여. 하지만 그 한 줄은 커널이 제품 목록을 알기 시작했다는 뜻이야. 대신 구체 policy 가 required stages 와 review hook 을 공급하게 두면 root 는 “필수 증거를 검사한다”는 기계 약속만 지켜. 다음 형제가 와도 커널 코드는 새 이름을 배울 필요가 없어. 그게 root class 가 실제 root 로 남았다는 현장 증거야.

Code

A neutral kernel configured by a concrete workshop·python
from dataclasses import dataclass

@dataclass(frozen=True)
class WorkshopPolicy:
    name: str
    required_stages: tuple[str, ...]
    review_default: bool

class QueueKernel:
    def __init__(self, policy: WorkshopPolicy):
        self.policy = policy

    def can_land(self, stages: set[str]) -> bool:
        return set(self.policy.required_stages) <= stages

crucible = QueueKernel(WorkshopPolicy("delegation", ("plan-gate",), False))
assert crucible.can_land({"plan-gate"})

External links

Exercise

공유 큐 모듈 하나에서 symbol 열 개를 kernel 과 concrete policy 로 나눠. 제일 어려운 둘은 각각 어떤 약속을 소유하는지 말해서 변호해.
Hint
함수 이름과 오류 문구에 숨은 분야 명사를 찾아봐.

Progress

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

댓글 0

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

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