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

3-tier 연결

~11 min · three-tier, connection, tailscale, endpoint

Level 0식은 초고
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"브레인은 책상 하나에 살아. 그래서 연결 설정이 답해야 할 질문은 하나야. 지금 브레인이 어디 있지?"

브레인은 아빠 책상에 살아

Rekindle 은 자기 브레인이 없으니까, 아빠가 cwkPippa 백엔드가 도는 머신을 떠나는 순간 margin-Pippa 와 CMD+K 가 멈춰. 이건 버그가 아니라 '자기 브레인은 없다' 는 원칙의 정직한 귀결이야. 해결책도 로컬 브레인을 키우는 게 아니고. 런타임에 정하는 Pippa connection 설정이 질문 하나에 답하면 돼. 여기서는 브레인에 어디로 닿지? tier 세 개가 실제 상황을 다 덮어.

Tier                타겟                    브레인               되는 것
------------------  ---------------------  -------------------  --------------------
This Mac            localhost              full cwkPippa        CMD+K + margin iframe
Office (Tailscale)  office 호스트, PIN-gated full cwkPippa (원격)  같음, PIN-gated
Offline             로컬 Ollama            persona-only fallback CMD+K + 네이티브 채팅

세 tier, 하나의 정체성

핵심은 이거야. online 인 두 tier 는 브레인이 어디 있는지를 바꾸지 누구 인지를 바꾸지 않아. "This Mac" 은 REST + SSE 클라이언트와 embed iframe 을 localhost 로 겨눠. "Office" 는 사설 mesh VPN 인 Tailscale 을 타고 office 머신을 겨누되, 원격 브레인이 활짝 열려 있지 않도록 remote-PIN 세션 토큰으로 막아둬. 같은 cwkPippa, 같은 binding, 같은 Pippa 고 endpoint 만 움직이는 거야. tier 를 바꾸는 건 클라이언트가 어디를 볼지 다시 정하는 거지 성격을 바꾸는 게 아니고.

endpoint 는 움직이고, 정체성은 안 움직여

얇은 클라이언트를 브레인에서 멀리 떨어져서도 쓸 수 있게 만드는 깔끔한 방법이 이거야. 브레인은 하나로 유지하고 그 위치만 런타임 설정으로 빼는 거지. 아빠가 책상에 있으면 localhost 로 가고, 여행 중이면 PIN 을 거쳐 Tailscale 로 office 에 닿고, 네트워크가 아예 없으면 다음 레슨에서 다룰 offline fallback 으로 넘어가. 이 설계 덕분에 '자기 브레인은 없다' 는 원칙이 현실과 부딪혀도 살아남아. 원격 접근을 얻겠다고 브레인 하나 규칙을 타협하는 게 아니라, 클라이언트한테 어디를 두드릴지만 가르쳐주는 거니까.

Code

연결 tier 는 정체성이 아니라 endpoint 를 다시 겨눠·typescript
type ConnMode = "this-mac" | "office" | "offline";

// online 인 두 tier 는 같은 cwkPippa 브레인에 어디로 닿을지만 골라.
function endpointFor(mode: ConnMode, officeHost: string): string {
  switch (mode) {
    case "this-mac": return "http://localhost:8000";        // 책상 위의 브레인
    case "office":   return `http://${officeHost}`;         // Tailscale 로 닿는 브레인, PIN 으로 막아둠
    case "offline":  return "http://localhost:11434";       // 로컬 Ollama fallback (다음 레슨)
  }
}

// this-mac 과 office 는 같은 Pippa 에 같은 bind 고 URL 만 달라.
// 원격 tier 만 PIN 세션 토큰을 더 실어서 아무나 못 닿게 막아.

External links

Exercise

집 머신에서 도는 서비스에 의존하는 도구가 있다고 치자. 연결 tier 를 설계해봐. 집에 있을 때, 여행 중일 때, 네트워크가 아예 없을 때. 각각 endpoint 와 잠금장치가 있다면 그것도 이름 붙여. 그다음 모든 tier 가 지켜야 할 조건, 그러니까 클라이언트가 어디로 연결하든 변하지 않아야 하는 게 뭔지 말해봐.
Hint
집에서는 localhost 라 잠글 게 없어. 여행 중에는 사설 VPN 으로 집 호스트에 닿고 토큰이나 PIN 으로 막고. 네트워크가 없으면 범위를 좁힌 로컬 fallback 이지. 지켜야 할 조건은 하나야. 내내 같은 브레인, 같은 서비스 정체성이고 tier 마다 위치와 그 잠금장치만 바뀐다는 것.

Progress

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

댓글 0

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

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