← 목록
게이트웨이 2026-05-19 10KB 읽기 12분

게이트웨이 종합 고도화 (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%)
HealthCheck46개(37%)79개(64%)
Cache40개(33%)73개(59%)
Headers48개(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차 후(최종)
CORS75(61%)108(87%)126(100%)
HealthCheck46(37%)79(64%)124(98%)
Cache40(33%)73(59%)126(100%)
Headers48(39%)81(65%)126(100%)
Timeout13(10%)13(10%)126(100%)
MaxBodySize0(0%)0(0%)126(100%)
Compress0(0%)0(0%)126(100%)
RateLimit2(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 코드와 고수준 컴파일러 혼용.

해결:

  1. security/TLS.한선 — RPN→고수준 재작성 (215줄). 이 파일이 6개 보안 파일에서 import되어 한 번 수정으로 7개 파일 해결
  2. lib/게이트웨이.한선 — import 경로 수정 (쉴드.한선shield.한선 등 RPN→고수준 매핑) + 심 함수 10개 추가 (트라이던트생성, 헬스생성, 응답캐시생성, 바이트수, 트라이던트등록, 헬스문자열, 헬스오류, 정적서빙, 응답캐시통계, 플레임통계)
  3. lib/게이트웨이_테스트.한선 — 동일한 import + 심 함수 패치
  4. public/dashboard.한선 — RPN→고수준 완전 재작성

신규 한선씨 파일

  • lib/에러페이지.한선 (158줄) — error-pages.js 대응. JS→한선씨 100% 대응 달성
  • 한선씨순도측정기.한선 (260줄) — 게이트웨이 한선씨 커버리지 수치 대시보드

최종 수치

항목강화 전강화 후
한선씨 줄 수6,7169,943 (고수준)
한선씨 함수 수270382
컴파일 OK15/24 (62%)31/32 (96%)
JS→한선씨 대응8/99/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:443Verify return code: 0 (ok), 브라우저 경고 없음
  • gateway.yaml 중복 항목 1개 제거 (crowny-tiomta 유지)

amti.crowny.org

  • gateway.yaml 등록 (domain 오타 amtiamti.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일 체크만)

발견·수정한 문제

  1. certbot --expand 오해--expand -d X는 기존 도메인 병합이 아니라
준 도메인만으로 재발급. crownybus.com 인증서가 87→16개로 축소된 사고. → cert-manager가 항상 전체 도메인 세트 + 100개 초과 시 2장 분할
  1. monitor-server.js 무한 재시작 — deprecated placeholder가 process.exit(0),
KeepAlive=true라 launchd가 끝없이 재기동 (로그 15만 줄). → org.crowny.gateway-monitor.plist Disabled=true 영구 차단
  1. self-signed 우선 로드 — 게이트웨이가 누락 도메인에 self-signed .crt를
만들어 저장 → 다음 시작 시 통합 인증서보다 우선. self-signed 파일 정리
  1. cert-renew 정규식 누락*.crowny.(org\|kr)\|crownybus.com만 잡아
tiomta.com 같은 별도 도메인 누락. → yaml 직접 파싱으로 전환

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 미설정