게이트웨이Q 설치 패키지
개요
다른 컴퓨터/가상서버/최종사용자 노드에 한선게이트웨이(순수 한선씨 HTTP 게이트웨이)+
Q감독(다중워커 감독자)+Q피어(P2P 노드 메시)를 옮겨 심을 수 있는 자기완결 배포 번들을
만들었다. tar.gz 하나만 옮기면 대상 머신에서 Q설치.sh 한 번으로 빌드+컴파일+기동까지
끝난다.
무엇을 했는지
- Q패키지생성.sh (
/Users/ef/crowny-gateway/게이트웨이Q/Q패키지생성.sh)
/Users/ef/crowny-gateway/... 절대경로는 @@GWQ_ROOT@@ 등 토큰으로
치환해 담는다(원본 라이브 파일은 건드리지 않음 — 스테이징 사본만 치환).
- 실행 검증: /tmp/게이트웨이Q-패키지-테스트.tar.gz 생성(648K) + tar -tzf로 27개
엔트리 확인.- Q설치.sh (패키지 루트에 동봉)
cc로 재빌드 — macOS `-framework Security -framework
CoreFoundation, Linux -lm -lpthread`) ③게이트웨이 컴파일 ④gateway.yaml 준비
안내 ⑤Q감독 기동(GWQ_WORKERS) ⑥피어목록 자기 노드 등록 안내.
- 실측 함정 발견+수정: set -euo pipefail 상태에서 [ -z "$X" ] && Y=... 패턴이
X가 비어있지 않을 때(즉 정상 케이스) 스크립트를 조용히 종료시킴(고전적 &&
쇼트서킷 + -e 함정) → if 문으로 교체. 또한 hostname -I | awk ... 파이프가
macOS에선 hostname -I 자체가 무효 옵션이라 실패하는데 pipefail이 그 실패를
파이프 전체 실패로 전파해 스크립트가 죽음 → || true로 흡수. 두 함정 모두
이 세션에서 실제로 재현(exit 1)한 뒤 수정 확인(exit 0).- 설치.md (설치 안내서)
실증 (스크래치 디렉토리에 자기 자신 설치 시뮬)
GWQ_WORKERS=2 GWQ_PORT=8098 bash Q설치.sh
→ 워커1/워커2 모두 LISTEN 확인
→ curl -H "Host: test.example.com" http://127.0.0.1:8098/ → HTTP/1.1 404 (X-Gateway-Phase: Um)
→ Q피어.sh probe(경로 토큰 정상 치환된 사본으로 컴파일+실행) 정상 동작
→ 종료 후 8098/스크래치 디렉토리 정리, 라이브 8080/8443/9100 LISTEN 각 1개 그대로 무영향 확인
관련 파일
/Users/ef/crowny-gateway/게이트웨이Q/Q패키지생성.sh/Users/ef/crowny-gateway/게이트웨이Q/Q설치.sh/Users/ef/crowny-gateway/게이트웨이Q/설치.md/tmp/게이트웨이Q-패키지-테스트.tar.gz(검증용 산출물)
잔여 이슈
- 동봉 바이너리는 macOS arm64 전용 참고본 — Linux/타 아키텍처는 항상 C 소스 재빌드
- 피어목록 동기화는 수동(자동 gossip 없음) — 노드 수 증가 시 중앙 레지스트리 방식으로
- systemd/launchd 상시화 유닛 미포함 — Q감독.sh는 foreground 감독 루프이므로 운영체제별
- stunnel 예시 conf는 인증서 경로가 자리표시자 — 실 도메인 발급은 각 노드에서 별도