피드로 돌아가기
Dev.toBackend
원문 읽기
When a Regex Eats Your Entire Process
OpenClaw 프레임워크 업그레이드 후 복잡한 정규식 패턴이 V8 Zone 할당자에서 컴파일 타임 메모리 폭발을 일으켜 게이트웨이 프로세스가 시작 단계에서 100% 충돌
AI 요약
Context
OpenClaw를 2026.3.23에서 2026.3.24로 업그레이드한 후 gateway start 실행 7초 후 프로세스가 메모리 폭발로 종료되었다. 메모리는 약 620MB에서 피크를 기록한 후 ready 상태에 도달하기 전에 프로세스가 중단되었다. 이는 일반적인 Node.js OOM이 아니라 V8의 내부 Zone 할당자에서 발생한 regexp 컴파일러 OOM이었다.
Technical Solution
- V8 regexp 컴파일러의 compile-time 폭발 메커니즘 식별: RegExpAlternative::ToNode 단계에서 오토마톤 그래프의 조합론적 폭발 발생
- --max-old-space-size 플래그는 V8 Zone 할당자에 영향을 주지 못함을 확인: 이는 힙 메모리와 독립적인 별도 메모리 풀
- Node.js v22, v24에서 --regexp-interpret-all, --interpreted-regexp 등 V8 플래그가 노출되지 않아 런타임 수정 불가능 확인
- ReDoS(runtime backtracking)가 아닌 compile-time 폭발임을 판단: 정규식 패턴 자체가 입력과 관계없이 문제 야기
- 롤백 전략 적용: npm install -g openclaw@2026.3.23으로 즉시 복구
Key Takeaway
정규식은 SQL 쿼리처럼 보안 검토 대상으로 취급해야 하며, 특히 복잡한 패턴은 런타임 성능뿐만 아니라 컴파일 단계의 메모리 폭발을 유발할 수 있다. 시작 단계 충돌은 에러 처리, 재시도, 모니터링 채널이 모두 작동하지 않는 최악의 장애 클래스이므로 반드시 롤백 계획이 필요하다.
실천 포인트
Node.js 애플리케이션 개발 팀에서 정규식을 도입하거나 의존성을 업그레이드할 때, 특히 AI 에이전트 프레임워크 같은 복잡한 패턴 처리 시스템에서는 (1) 정규식 복잡도를 사전 검토하고 (2) 복잡한 패턴은 정규식 대신 파서로 교체하며 (3) 필수적으로 빠른 롤백 가능성을 프로덕션 배포 전에 검증하면 compile-time 메모리 폭발로 인한 전체 프로세스 장애를 방지할 수 있다.