Crowny Gateway Phase 4 — 인증서 완성 + 6561 확장 준비
날짜: 2026-05-22
대상: /Users/ef/crowny-gateway
범위: cert 잔여 발급 + 13개 실패 원인 규명 + 라우터 6561 확장 + CAA 재시도
개요
Gateway v3.1 고도화 후속. 인증서 미발급 도메인을 모두 발급하고, 실패 원인(hosting.co.kr NS의 간헐적 CAA SERVFAIL)을 규명했다. 6561 서비스 확장을 위한 라우터 최적화를 적용하고 CAA 자동 재시도 로직을 추가했다.
작업 내역
1. 인증서 완성 (140/140 Let's Encrypt)
- 이전 미발급 6개 도메인 (artist/bank/jirayer/market/project/real) 전부 발급 완료
- real.crowny.org는 단독
--cert-name real-crowny로 발급 → ssl.js_loadCertbotLiveDir가 자동 로드 - 결과: 140개 전부 Let's Encrypt 유효, 자체서명 0개
2. 13개 실패 원인 규명 (Sonnet 에이전트 진단)
certbot 로그 분석 결과 13개 도메인(anr/chat/disk/docs/gateway/government/infra/medical/network/party/premium/real/security) 모두 동일 오류:
urn:ietf:params:acme:error:caa
DNS problem: SERVFAIL looking up CAA for <도메인>
— the domain's nameservers may be malfunctioning
- 원인: hosting.co.kr 네임서버의 간헐적 CAA SERVFAIL
- HTTP-01 챌린지와 무관 — Let's Encrypt가 order finalize 시 CAA를 재확인하는 단계에서 발생
- 매 실행마다 영향 도메인이 달라짐 = 간헐적 NS 장애 확증
- 근본 해결책: hosting.kr 패널에 명시적 CAA 레코드 추가
crowny.org. CAA 0 issue "letsencrypt.org"
3. 라우터 6561 확장 최적화 (lib/trident.js)
| 변경 | 내용 |
|---|---|
| FlameCache 동적 크기 | 256 고정 → max(512, 서비스수×20%). 6561 서비스 시 1312 → hit rate 85% 도달 가능 |
| WaveTrie reverse | split('').reverse().join('') → 인덱스 역순회 _reverse(). 배열 생성 제거, GC 부담 감소 |
| exact HashMap | domain → service O(1) 정확매칭 Map 추가. Abyss(O(n) 선형스캔) 완전 제거 |
| find() 경로 | Flame(LRU) → Exact(HashMap O(1)) → Wave(Trie) |
4. CAA 재시도 루프 (scripts/cert-renew.sh)
run_certbot()에 최대 3회 재시도 추가- 간헐적 CAA SERVFAIL로 일부 도메인이 떨어지면 전체 셋으로 재시도
- SAN 개수가 가장 많은 시도를
best백업 → 마지막 시도가 회귀하면 복원 - 잔여 도메인은 다음 갱신 주기(자동)에 재시도
5. 헬스 모니터링 (scripts/gateway-watchdog.sh)
- 통합 watchdog: 프로세스/포트/인증서 만료/앵커 저널/upstream 다운
- 3개 모드:
text/--brief/--json/--alert - LaunchAgent
org.crowny.gateway-watchdog30분 주기 등록 - 세션 내 CronCreate 30분 주기 (
f14a6565) - 한선씨 동반본
게이트웨이감시.한선
검증 결과
✓ 인증서 140개 전부 Let's Encrypt 유효 (자체서명 0)
✓ 6개 잔여 도메인(artist/bank/jirayer/market/project/real) 발급 완료
✓ 라우터 6561 서비스 build 9ms / find 1μs
✓ 게이트웨이 8443 직접 접속 정상 (503/200 정상 응답)
✓ cert-renew.sh 문법 검증 통과
알려진 이슈
- hosting.co.kr NS 간헐적 CAA SERVFAIL — CAA 레코드 명시 추가로 해결 예정 (사용자 작업)
- crowny.org 내부망 hairpin NAT — 내부망에서 자기 공인IP 접속이 간헐적 실패. 게이트웨이 코드와 무관. 외부망(LTE) 검증 필요
- real/jirayer upstream 다운 — :9762, :9861 서비스 미가동. 인증서는 정상, 서비스 재기동 필요
다음 단계
- CAA 레코드 추가 (hosting.kr 패널) — 13개 SERVFAIL 근본 차단
- 자체 DNS 전환 — 고정IP 도착 시
dns-switch.sh crowny <IP>(30분 체크리스트 작성 완료) - 헬스체크 배치 분산 — 6561 서비스 시 동시 요청 폭발 방지 (trident.js HealthChecker)
- TridentRouter 증분 빌드 —
addService/removeService로 전체 재빌드 회피
변경된 파일
/Users/ef/crowny-gateway/
├── lib/trident.js (수정 — FlameCache 동적/WaveTrie reverse/exact Map)
├── scripts/cert-renew.sh (수정 — CAA 재시도 루프)
├── scripts/gateway-watchdog.sh (신규)
└── scripts/게이트웨이감시.한선 (신규 — 한선씨 동반본)
/Users/ef/Library/LaunchAgents/
└── org.crowny.gateway-watchdog.plist (신규)