← 목록
기타 2026-07-26 5KB 읽기 5분

감사서버.한선 STR_ID_MAX 크래시 — 게이트/API 2분할

개요

/Users/ef/crowny-butler/감사서버.한선(1391줄, 36326큐브)이 단일 프로세스로 문자열 핸들 상한 (STR_ID_MAX=480000) 90%에 도달해 요청 처리 중 exit43 크래시. 요청처리() 함수(672줄, 26라우트)의 큐브가 STR 주범으로 실측 확정됨(라이브러리 로드만=STR경고0, 요청처리 본문 제거 껍데기=STR경고0). → 라우트를 두 한선씨 서버로 분할해 각각 STR 여유 확보.

라이브 9802(감사서버.js, Node)는 무접촉 — 신규 파일 2개만 생성, 실검증 후 테스트 포트에서 kill 정리.

무엇을 했는지

분할 설계

  • 감사게이트.한선 (기본 9802, 테스트 9806): 정적서빙(/,/what,/audit,/현황,/status,/board,/app/*),
/api/decide, /health·/api/health, /api/cells/llm-log, ERP프록시(/api/plm/*,/api/erp/*, /api/bridge,/api/cells/scan). 나머지 /api/*는 전부 프록시요청()으로 감사API(127.0.0.1:9805)에 소켓 프록시(패턴 매칭이라 auth/rules/board/log/replay/whatif 개별 라우트 하드코딩 불필요).
  • 감사API.한선 (기본 9805): /api/board, /api/log, /api/replay, /api/whatif,
/api/rules(조회/check/save/history/rollback), /api/auth/register·/api/auth/login (SHA256 2만회 키스트레칭 강화 해시 그대로 이식).

컴파일 실측

파일큐브STR 부팅 직후 경고
감사게이트.한선23,180~23,2760건
감사API.한선27,2750건
(참고) 원본 감사서버.한선36,32690%(432000/480000)
전체 라우트(게이트 직접 11종 GET/3종 POST, 게이트→API 프록시 7종, API 직접 auth 라운드트립)를 NEXUS_PORT=9805(API)/9806(게이트) 테스트 포트에서 curl로 검증 — 전부 200, 프록시 체인 정상, 회귀 후에도 STR경고 0건 유지.

발견/수정한 잠재 버그 2건 (원본 프록시요청() 헬퍼에 이미 존재하던 결함, 이번에 실측 확정)

  1. 소켓연결() 2인자 호출 = 항상 -1 — hanseonc_high 내장테이블 op374는 3-pop(소켓슬롯,주소,포트)인데
원본은 소켓연결("127.0.0.1", 포트) 2인자로 호출해 프록시가 전부 죽어있었음(연결 자체가 안 됨, 원본 감사서버.한선의 ERP프록시 라우트도 동일 결함 추정). 표준 패턴(소켓생성(2,1)소켓연결(소켓,주소,포트)) 으로 수정 — 코드베이스 내 crowny-butler/libs/넥서스분기_코어.한선 등 정상 사례로 대조 확인.
  1. 소켓받기() 단발 호출 = 대용량 응답 절단 — 1회 recv만으로는 7KB(/api/board) 이상 응답이 헤더만
오고 본문 0바이트로 잘림. EOF(빈 청크)까지 반복 수신하도록 루프로 수정 — 이후 /api/log(57KB) 등 대용량 응답도 정상 relay 확인. → 가드레일에 반영 필요(~/.claude/templates/한선씨-가드레일.md): "소켓연결은 3인자 필수, 소켓받기 단발호출은 대용량 응답에서 절단 — EOF까지 반복 수신".

참고: 별개로 발견한 기존 이슈(이번 작업 범위 밖, 미수정)

  • /현황(한글 경로) 직접 curl 접근 시 게이트/API 양쪽 모두 404 — curl이 UTF-8 경로를 퍼센트인코딩해서
보내는데 경로추출()이 URL디코딩을 안 해 문자열비교가 실패함. 라이브 9802(node)는 200(Node http가 자동 디코딩) — 이 결함은 원본 감사서버.한선(.js 아님, 미가동 한선씨 이식판) 자체에 이미 있던 것으로, 이번 분할과 무관하게 동일 재현됨. 브라우저/실사용은 대개 ASCII 라우트(/status,/board)로 우회 가능.
  • 넥서스.toau(38971큐브, /api/decide·/api/replay가 서브프로세스로 호출) 단독 실행 시 자체
STR 90% 경고가 한 차례 관측됨(크래시는 아님, 정상 응답 200 반환). 이 서브프로세스는 체계()로 매 호출마다 새로 뜨는 별도 VM 인스턴스라 우리 HTTP 서버(게이트/API)의 장기 STR 예산과는 무관하지만, 넥서스.toau 자체도 잠재적으로 같은 STR_ID_MAX 근접 위험이 있어 보임 — 별도 점검 필요.

관련 파일

  • /Users/ef/crowny-butler/감사게이트.한선 (신규)
  • /Users/ef/crowny-butler/감사API.한선 (신규)
  • /Users/ef/crowny-butler/감사서버.한선 (원본, 무접촉·보존)
  • /Users/ef/crowny-butler/감사서버.js (라이브 9802, 무접촉)
  • ~/.claude/templates/한선씨-가드레일.md (§"대형 한선씨 서버 STR_ID_MAX 상한" 항목 참조)

잔여 이슈

  1. 미배선: 두 신규 .한선 파일은 컴파일·기능 검증만 완료, 아직 어떤 LaunchAgent/게이트웨이에도
연결 안 됨. 9802를 실제로 이 분할판으로 교체하려면 별도 승인+전환 작업 필요(현재는 무접촉 지시 준수).
  1. 가드레일 갱신 미완: 위 소켓연결/소켓받기 함정 2건을 한선씨-가드레일.md에 아직 반영 안 함.
  2. /현황 한글경로 URL디코딩 결함, 넥서스.toau 자체 STR 근접 건 — 둘 다 미수정(범위 밖으로 판단, 별도 티켓 권장).