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

scope 경계

~12 min · firelink, scope, census, bounded-context

Level 0식은 재
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"계산 못 하는 경계는, 없는 경계야."

한 단계만, cwk 로 시작하는 것만, 지원 소스는 제외

'가족'을 관리하는 허브한테는 '누가 가족이냐'에 대한 딱 떨어지는 답이 있어야 해. Firelink 의 답은 일부러 좁아. 한 프로젝트 디렉터리 바로 밑에 있고 이름이 cwk 로 시작하는 자식들, 딱 한 단계만 훑어. 이름이 조건에 맞더라도 지원 repository 인 cwkFamilyAppBirthTemplate 은 명시적으로 제외해. 안에 또 들어앉은 repository, 옆에 있는 비-cwk 폴더, roster 문서가 말로만 언급한 '조상'이나 '인접 repo' 도 자격이 없어.

너무 단순해 보이지? 그게 핵심이야. 루프로 돌릴 수 있는 규칙은 흔들리지 않거든. 멤버십이 사람 판단에 기대는 순간 — '음, 저건 좀 쳐줘야 하나' — census 는 매번 같은 답을 못 내놓고, 허브는 자기가 뭘 관리하는지부터 거짓말하기 시작해.

글로 적었다고 멤버가 되진 않아

Firelink 는 roster 랑 network 문서를 읽어서 멤버에 제목, 한 줄 설명, lifecycle 을 덧입혀. 근데 그 문서엔 사람 보라고 쓴 계보 얘기, '조상', '인접 repo' 같은 절도 섞여 있어. 여기 규칙이 하나 있어. 그 글은 관리 대상을 절대 못 넓혀. 직계 프로젝트 밖에 앉은 roster 항목은 그냥 참고 자료야. drift 도 아니고, 카드도 아니고, 맞춰볼 대상도 아니야. 경계를 정하는 건 프로젝트 루트고, 문서는 그 안쪽을 꾸밀 뿐이야.

Birth 가 멤버를 만들고, 템플릿은 멤버가 아니야

Firelink Birth 는 cwkFamilyAppBirthTemplate 을 plan 전용 staging 공간으로 복사하고, 새 앱의 정체성과 계약을 materialize 한 다음, 비공개 Git repository 를 초기화해서 push 해. 마지막에는 완성된 shell 을 프로젝트 디렉터리의 새 직계 자식으로 publish 하지. 템플릿은 계속 지원 소스로 남고 가족 카드에는 나타나지 않아. 새 앱이 census 에 들어오는 이유는 publish 된 목적지가 멤버십 규칙을 만족해서야. 원본 템플릿이나 문서가 등록해줘서가 아니고.

도메인 설계의 bounded context 랑 같은 감각이야. 내가 맡은 것 둘레에 단단한 선을 긋고, 선 밖에서 이름 한 번 불렀다고 딸려 들어오는 걸 거부하는 거. Firelink 의 선은 5초면 읽는 파일시스템 규칙이야. 그래서 가족이 계속 커져도 안 무너져.

Code

자격 규칙은 판단이 아니라 루프다·python
def eligible_members(projects_dir):
    # ONE level only — a plain listdir, never os.walk()
    for entry in sorted(os.listdir(projects_dir)):
        path = projects_dir / entry
        if not path.is_dir():
            continue
        if not entry.startswith("cwk") or entry.startswith("cwk."):
            continue
        if entry == "cwkFamilyAppBirthTemplate":  # support source, not a member
            continue
        yield entry                                # a managed FamilyMember

# This rule cannot enroll a nested repo, an adjacent non-cwk folder,
# or an ancestor that appears only in roster prose.
# Birth copies cwkFamilyAppBirthTemplate into staging, materializes it,
# and publishes the new shell as a direct child under projects_dir.

External links

Exercise

뭔가를 한 묶음으로 관리하는 시스템을 하나 골라. repo 든 서버든 계정이든 기기든. 그 멤버십 규칙을 진짜 돌아가는 코드로 써봐. '그리고 중요한 것들도' 같은 조항은 빼고. 그다음 사람이 남긴 메모나 config 주석이 옆문으로 멤버를 하나 더 밀어넣을 수 있는 자리를 찾아봐. 그 옆문이 '이게 왜 여기 있어?' 하는 버그가 다 태어나는 곳이야.
Hint
규칙에 '보통'이라는 말이 들어가거나, 애매한 건 사람이 판정해야 한다면 아직 경계가 아냐. 그냥 제안이지. 루프로 돌아갈 때까지 밀어붙여.

Progress

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

댓글 0

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

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