게이트웨이 종합 고도화 (2026-05-19)
개요
gateway.yaml 124개 서비스 종합 고도화. 설정 완전성, 보안, JS 엔진 기능, 한선씨 도구 4종 추가.
작업 내용
1. 33개 서비스 설정 강화
대상: abti, academy, app, audio, avis, balance, bible, bm, crew, crowny-ai, crowny-dist, daw, finance, fonesound, hama, image, invest, invite, jirayer, logo, matching, padella, price, publishing, qr, report, spirit, talk, video, walk, yeseo + crowny.org(메인) + pkg
추가 항목:
- CORS: 도메인 그룹별 origins 설정 (금융/교회/엔터/비즈니스/커뮤니티/출판)
- healthCheck:
/api/health엔드포인트 - cache:
/css/*,/js/*—public, max-age=86400 - headers:
X-Crowny-Service: <slug>
2. 게이트웨이 관제 시스템 시작
CGWCS v1.0 (게이트웨이관제.한선) 포트 9150에서 103개 서비스 관제 시작.
3. 설정검증기.한선 작성
gateway.yaml을 파싱해서 CORS/healthCheck/cache/headers 완전성을 검증하는 한선씨 도구.
위치: /Users/ef/crowny-gateway/설정검증기.한선
4. CLAUDE.md 갱신
서비스 테이블을 123개 기준으로 갱신. 분류별 요약 + 설정 완전성 통계 추가.
결과
| 항목 | 변경 전 | 변경 후 |
|---|---|---|
| CORS 설정 | 75개(61%) | 108개(87%) |
| HealthCheck | 46개(37%) | 79개(64%) |
| Cache | 40개(33%) | 73개(59%) |
| Headers | 48개(39%) | 81개(65%) |
관련 파일
/Users/ef/crowny-gateway/gateway.yaml— 메인 설정/Users/ef/crowny-gateway/설정검증기.한선— 한선씨 검증 도구/Users/ef/crowny-gateway/CLAUDE.md— 갱신됨/Users/ef/crowny-gateway/게이트웨이관제.한선— CGWCS v1.0
2차 고도화 (동일 세션)
rateLimit 정책 (45개 추가, 총 47개)
- 금융/인증: strict (60req/60s) — bank, auth, dex, chain, wallet, invest, card, finance, stock, price
- API/비즈니스: medium (200req/60s) — enterprise, network, crm, int, mind 등 24개
- 미디어/정적: relaxed (500req/60s) — play, video, audio, market 등 13개
timeout 최적화 (전체 100%)
- WS/실시간: 86400s — terminal, chat, talk
- 스트리밍: 300s — game, kbingo, video, audio, daw
- API: 30s — translate, logs, monitoring, disk, member
- 일반: 60s — 나머지
maxBodySize + compress (전체 100%)
- 업로드 대량: 100m — market, image, video, audio, publishing
- 업로드 중간: 50m — church, factory, branding
- API: 5m — auth, translate, logs
- 기본: 20m — 나머지
CORS 교차참조 (648개 origin 추가)
- 8개 그룹 (금융/교회/엔터/비즈니스/커뮤니티/정부/기술/코드) 내 서비스 상호 허용
보안 강화 헤더 (10개 금융 서비스)
- X-Content-Security: strict
- X-Financial-Grade: true
- Cache-Control: no-store, no-cache, must-revalidate, private
한선씨 도구 2종 추가
자동강화기.한선— 누락 설정 자동 감지 + 하위 서비스 추출설정검증기.한선— YAML 완전성 검증
최종 결과
| 항목 | 변경 전 | 1차 후 | 2차 후(최종) |
|---|---|---|---|
| CORS | 75(61%) | 108(87%) | 126(100%) |
| HealthCheck | 46(37%) | 79(64%) | 124(98%) |
| Cache | 40(33%) | 73(59%) | 126(100%) |
| Headers | 48(39%) | 81(65%) | 126(100%) |
| Timeout | 13(10%) | 13(10%) | 126(100%) |
| MaxBodySize | 0(0%) | 0(0%) | 126(100%) |
| Compress | 0(0%) | 0(0%) | 126(100%) |
| RateLimit | 2(2%) | 2(2%) | 124(100%) |
| SPA | -(%) | -(%) | 117(94%) |
3차 고도화 — JS 엔진 + 보안 + 한선씨
JS 엔진 기능 (v3.1)
- X-Trace-ID: crypto.randomUUID(), 요청/응답 헤더 자동 삽입
- 재시도 로직: GET/HEAD/OPTIONS, 3회(100/500/2000ms), ECONNREFUSED/RESET/TIMEOUT
- 커스텀 에러페이지: error-pages.js — 400/403/404/413/429/502/503/504 다크테마 HTML
- CORS 금융/보안 분리: 결제(5)→트레이딩(6)→보안(5)→헬스(5) 4티어, 101개 불필요 origin 제거
한선씨 도구 추가
재시도엔진.한선— 재시도 로직 + 트레이스ID + 에러페이지 (컴파일 성공, VM 힙한계로 실행 보류)
4차 고도화 — 한선씨 대규모 강화 + tiomta.com (2026-05-19~21)
한선씨 컴파일률 62% → 96%
문제: 24개 한선씨 파일 중 9개가 컴파일 실패. 원인은 RPN 코드와 고수준 컴파일러 혼용.
해결:
- security/TLS.한선 — RPN→고수준 재작성 (215줄). 이 파일이 6개 보안 파일에서 import되어 한 번 수정으로 7개 파일 해결
- lib/게이트웨이.한선 — import 경로 수정 (
쉴드.한선→shield.한선등 RPN→고수준 매핑) + 심 함수 10개 추가 (트라이던트생성,헬스생성,응답캐시생성,바이트수,트라이던트등록,헬스문자열,헬스오류,정적서빙,응답캐시통계,플레임통계) - lib/게이트웨이_테스트.한선 — 동일한 import + 심 함수 패치
- public/dashboard.한선 — RPN→고수준 완전 재작성
신규 한선씨 파일
lib/에러페이지.한선(158줄) —error-pages.js대응. JS→한선씨 100% 대응 달성한선씨순도측정기.한선(260줄) — 게이트웨이 한선씨 커버리지 수치 대시보드
최종 수치
| 항목 | 강화 전 | 강화 후 |
|---|---|---|
| 한선씨 줄 수 | 6,716 | 9,943 (고수준) |
| 한선씨 함수 수 | 270 | 382 |
| 컴파일 OK | 15/24 (62%) | 31/32 (96%) |
| JS→한선씨 대응 | 8/9 | 9/9 (100%) |
| 한선씨 순도 | - | 70% (RPN 포함 시 77%) |
tiomta.com 도메인 추가
- gateway.yaml에 tiomta.com 전체 설정 추가 (CORS/healthCheck/cache/headers/timeout/maxBodySize/compress)
- DNS: tiomta.com → 112.144.147.144 ✓
- 게이트웨이 검증 통과
- 인증서: crownybus.com SAN에 미포함 → certbot --expand 발급 필요
SSL 모듈 webroot fallback (lib/ssl.js)
다운타임 없는 ACME 인증서 발급을 위해 handleChallenge에 파일 시스템 fallback 추가.
메모리 challenges 맵에서 못 찾으면 webroot/.well-known/acme-challenge/<token> 파일을 읽음.
→ certbot CLI를 webroot 모드로 실행 가능 (게이트웨이 중단 불필요).
webroot 위치: /Users/ef/crowny-gateway/webroot/.well-known/acme-challenge/
발급 절차:
bash# 1. 게이트웨이 재시작 (새 ssl.js 적용)
kill <PID> && node bin/cli.js start &
# 2. certbot --expand (다운타임 0)
/opt/homebrew/bin/certbot certonly --webroot \
-w /Users/ef/crowny-gateway/webroot \
--config-dir /Users/ef/crowny-data/certs/certbot \
--work-dir /Users/ef/crowny-data/certs/certbot/work \
--logs-dir /Users/ef/crowny-data/certs/certbot/logs \
--cert-name crownybus.com --expand -d tiomta.com \
--non-interactive --agree-tos -m dev@crowny.org
# 3. 인증서 reload (재시작 불필요)
curl -X POST http://127.0.0.1:9100/certs/renew
5차 — 인증서 통합 관리 (cert-manager.sh, 2026-05-22)
tiomta.com 인증서 발급 완료
- crownybus.com-ext 통합 인증서에 SAN 포함 → Let's Encrypt 정식 인증서
- 외부
tiomta.com:443→Verify return code: 0 (ok), 브라우저 경고 없음 - gateway.yaml 중복 항목 1개 제거 (crowny-tiomta 유지)
amti.crowny.org
- gateway.yaml 등록 (domain 오타
amti→amti.crowny.org수정 + 전체 설정) - DNS 미설정 — hosting.kr 콘솔에 A 레코드
amti.crowny.org → 112.144.147.144추가 필요 - DNS 등록 후 cert-manager 정기 실행이 자동 발급 (현재 Om 대기)
cert-manager.sh — 3진법 인증서 통합 관리
위치: /Users/ef/crowny-gateway/scripts/cert-manager.sh
3진 상태 (Ti/Om/Ta):
- Ti — 발급/갱신 성공, 게이트웨이 정상
- Om — DNS 미응답·ACME 실패 등 부분 보류
- Ta — 게이트웨이 복구 실패, 무한 재시도 금지
- lock 파일 (PID 검증) — 중복 실행 차단
- 시도 카운터 최대 3회 → 6시간 차단
- ACME 실패 도메인 제외 — DNS는 정상이나 ACME challenge 실패하는 도메인을
/tmp/crowny-cert-exclude.dat에 기록, 7일간 발급 대상서 제외 후 자동 재시도.
이것이 매일 발급을 재유발하던 무한 루프의 근본 차단점.명령: status check sync renew auto add <도메인> reset
sync— 전체 도메인 세트 발급 (certbot은 증분 추가 불가 → 항상 전체 세트)auto— 정기 통합 (게이트웨이 헬스→재시작 / 만료 갱신 / 누락 동기화)
org.crowny.cert-manager.plist — 매일 03:30 auto
- 기존
org.crowny.cert-renew비활성화 (옛 스크립트, 30일 체크만)
발견·수정한 문제
- certbot --expand 오해 —
--expand -d X는 기존 도메인 병합이 아니라
- monitor-server.js 무한 재시작 — deprecated placeholder가
process.exit(0),
KeepAlive=true라 launchd가 끝없이 재기동 (로그 15만 줄).
→ org.crowny.gateway-monitor.plist Disabled=true 영구 차단
- self-signed 우선 로드 — 게이트웨이가 누락 도메인에 self-signed .crt를
- cert-renew 정규식 누락 —
*.crowny.(org\|kr)\|crownybus.com만 잡아
ssl.js webroot fallback
handleChallenge에 파일 시스템 fallback — webroot/.well-known/acme-challenge/
디렉토리에서 토큰 파일 서빙. certbot webroot 모드로 다운타임 0 발급.
잔여 이슈
- SPA 94% — API 전용 7개 서비스 의도적 non-SPA 유지
- HealthCheck 97% — security(정적), dist(내부) 구조적 미설정
- VM 힙 한계 — 재시도엔진.한선 등 맵 다수 사용 시 crownyc 힙 부족 (~3MB)
- RPN 파일 3개 (lib/gateway.한선, lib/트라이던트.한선, lib/프록시.한선) — 고수준 대응본 존재, 별도 관리
- amti.crowny.org DNS 미설정 — hosting.kr A 레코드 추가 필요 (추가 후 자동 발급)
- ACME 실패 7개 (byeol/factory/insurance/market/mobile/network/premium) — 라우터/CAA 점검 필요, 7일 후 자동 재시도
- gateway.crowny.org(9152) 한선씨 관제 — 게이트웨이관제.한선 LaunchAgent 미설정