수업 #14 — 이 고양이, 밖에서도 일합니다
Source: bbojjak-viewer.vercel.app/lessons/lesson-14 Type: article By: 뽀짝이 / 뽀짝이의 서재 (지피터스 AI스터디) Valid as of: 2026-04-28
Key Insight
Gateway = 단일 장수명 프로세스. 포트 하나에서 Slack·텔레그램·웹훅·크론잡을 전부 멀티플렉싱으로 처리하며, 채널별 세션 생성·분배의 실제 주체다. Tailscale이 loopback 바인딩된 Gateway를 인터넷에서 안전하게 접근 가능하게 한다.
핵심 Takeaway
- Gateway = 단일 장수명 프로세스: “모든 메시징 표면을 소유”하는 데몬. 포트 하나(기본 18789)에서 WebSocket·HTTP API·웹훅·WebChat·크론잡 전부 멀티플렉싱. 채널별 세션 생성·분배의 실제 주체 (출처: “Gateway가 뭔데?” 섹션)
- 멀티채널 라우팅 구현체: 수업 6에서 배운 “세션이 채널별로 만들어진다”가 Gateway가 담당. Slack 메시지 → Slack 세션 / 텔레그램 → 텔레그램 세션 분배 (출처: “Gateway가 뭔데?” 섹션)
- Tailscale Serve/Funnel: loopback 바인딩된 Gateway를 외부 접근 가능하게 함. Serve = tailnet 전용·신분증 인증·비밀번호 불필요, Funnel = 인터넷 공개·비밀번호 필수.
openclaw.json tailscale.mode: "funnel"설정으로 재시작 후에도 자동 유지 (출처: “Tailscale” / “Funnel 삽질기” 섹션) - 보안 4중 잠금: HTTPS(TLS 자동관리) + 인증 토큰 + 에이전트 ID 제한 + 세션 키 프리픽스 제한 (출처: “Tailscale” 섹션)
- 포트 불일치 함정 교훈: Funnel 포트(18789)가 실제 Gateway 포트(44350)와 달라 웹훅이 허공에 사라짐. 수동 삽질 전 설정 파일 먼저 확인.
--bgFunnel은 재시작 후 사라짐 → openclaw.json으로 해결 (출처: “Funnel 삽질기” 섹션)
상세 요약
Gateway 아키텍처
Gateway는 macOS launchd가 관리하는 데몬 프로세스. 충돌 시 자동 재시작. 365일 24시간 대기.
외부 채널들
Slack ──────┐
텔레그램 ───┤
웹훅 ───────┼──→ Gateway (포트 18789) ──→ 에이전트 → 응답
WebChat ────┤ 멀티플렉싱
크론잡 ─────┘
“포트 하나, 프로세스 하나” 원칙. Slack용·텔레그램용 서버를 따로 운영하는 게 아니다.
채널톡 CS 파이프라인 진화
이전: 고객 → 채널톡 → n8n 처리 → Slack 알림
이후: 고객 → 채널톡 → n8n → Gateway /hooks/agent → 에이전트 직접 처리
Gateway의 /hooks/agent 엔드포인트가 외부 POST를 받아 에이전트에게 전달하는 우체통 역할.
Tailscale 통합 구조
인터넷 (n8n 클라우드)
↓ HTTPS POST
Tailscale Funnel (공개 URL)
↓ HTTPS 터널
Mac mini 로컬호스트
↓ HTTP (내부)
Gateway (포트 44350)
↓
에이전트
Gateway는 인터넷에 직접 노출되지 않음. Tailscale이 안전한 터널 역할.
openclaw.json 설정으로 Funnel 자동화
{
"tailscale": {
"mode": "funnel"
}
}이 한 줄로 Gateway 시작 시 Tailscale Funnel이 자동 실행됨. --bg 수동 실행의 “재시작 후 사라짐” 문제 해결.
집사(사용자) 접속 4가지 경로
| 접속 방식 | 용도 | Tailscale 필요 |
|---|---|---|
| Slack | 기본 대화, 어디서든 | ❌ (별도 채널) |
| 텔레그램 | 모바일 빠른 지시 | ❌ (별도 채널) |
| WebChat (로컬) | 로컬 브라우저 접속 | ❌ |
| WebChat (원격) | 카페·해외에서 HTTPS 접속 | ✅ (Funnel/Serve) |
연결되는 위키 페이지
- gateway-architecture — 이 소스에서 추출한 Gateway 아키텍처 개념
- tailscale — Tailscale VPN 도구 (Serve/Funnel 모드)
- agent-session-architecture — Gateway가 세션 생성·분배의 실제 주체
- agent-runtime-architecture — Gateway = 채널 라우팅 레이어의 구체 구현체
- agentic-webhook-integration — Gateway /hooks/ 엔드포인트 = 웹훅 수신 구현체
- OpenClaw — Gateway를 포함하는 에이전트 런타임 프레임워크
- bbojjak-openclaw-agentic-architecture-lesson01 — 시리즈 Lesson 01
- bbojjak-openclaw-session-architecture-lesson06 — 시리즈 Lesson 06 (세션 채널별 분리 원리)
- bbojjak-openclaw-webhook-pipeline-lesson03 — 시리즈 Lesson 03 (웹훅 파이프라인)
- bbojjak-openclaw-playwright-image-pipeline-lesson13 — 시리즈 Lesson 13
- bbojjak-openclaw-multichannel-session-lesson15 — 시리즈 Lesson 15 특별편 (Slack 스레드·텔레그램 토픽 세션 분리·DM 함정·bindings)
- bbojjak-openclaw-token-optimization-lesson16 — 시리즈 Lesson 16 (토큰 소비처 5순위·RTK·hook vs 지침·능동적 compact·Sonnet 전환)
- bbojjak-openclaw-agent-security-lesson17 — 시리즈 Lesson 17 (프롬프트 인젝션·보안 3원칙·에이전트 분리·심층 방어)
- bbojjak-openclaw-skill-ecosystem-lesson18 — 시리즈 Lesson 18 (보안 스킬 선택 3단계·구조>스킬·즉시 학습+SSOT·오픈 생태계 신뢰 평가)
- bbojjak-openclaw-resilience-failover-lesson19 — 시리즈 Lesson 19 (Model Failover·세션 스티킨스·Agent Loop·작업별 모델 분리·34% 절감)
- bbojjak-openclaw-information-boundary-lesson20 — 시리즈 Lesson 20 (분리 이후 운영·일방향 동기화·민감정보 추출·에스컬레이션·오탐 관리)