v0.1.36
v0.1.36 릴리즈 — 큰 프로젝트 freeze 핵심 원인 fix (spawnSync → async spawn) + scanProject 진단 로그
배경
- 사용자 보고 — "규모가 큰 프로젝트를 불러올 떄 freeze 가 발생". 직접 서버 띄워 디버깅 요청.
진단 결과
electron/analyzer/gcpAwsServiceAnalyzer.ts와electron/analyzer/githubInfoAnalyzer.ts가 **spawnSync** 로 CLI 호출 → **메인 프로세스 블록**.- 특히
fetchLambdaUrls는 N+1 안티패턴:aws lambda list-functions(1번) + 함수마다aws lambda get-function-url-config(N번 × 2s timeout) → **최대 40+ 초 블로킹**. - 큰 프로젝트는 GCP/AWS 인프라가 풍부할수록 이 블로킹이 길어짐 → Electron BrowserWindow 자체가 응답 없음.
- 메인 프로세스가 막히면 IPC / 윈도우 입력 / 렌더링 모두 정지 → 2D/3D 무관하게 freeze.
변경 파일
spawnSync→ 비동기spawn+ Promise wrapper (tryCmd).fetchCloudRunUrls/fetchLambdaUrls모두 async. Lambda URL 호출은 **Promise.all 로 병렬화** → N개 함수가 직렬 대신 동시에 (총 시간 N × 2s → 2s).- Lambda 최대 처리 함수 수 20 → **10** 로 축소 (균형 — 너무 많은 동시 spawn 도 부담).
- 호출 실패 시
child.kill()+ clearTimeout 으로 누수 방지.
`electron/analyzer/githubInfoAnalyzer.ts`
spawnSync→ 비동기spawn+ Promise wrapper.gh api호출이 4s 까지 메인 프로세스를 막던 것 — 이제 non-blocking.
`electron/ipc/handlers.ts`
- (진단):
scanProject핸들러에 단계별__tStep(label)진단 로그 추가.scanDirectory done (N nodes)/analyzeImports done/cloudOps/dbSchema done/detectFirebaseConfig done/analyzeGcpAwsServices done (Xms)/analyzeHostingDomains done (Xms)/analyzeGitHubInfo done (Xms)각 단계 누적 시간 (시작 기준).- 향후 사용자가 freeze 시 콘솔 로그로 어느 단계에서 막혔는지 즉시 파악 가능.
효과 (예상)
- 큰 프로젝트 / 다수 Lambda 함수가 있는 환경에서도 메인 프로세스가 막히지 않음.
- spawnSync 5초+ × N 호출 → 비동기 + 병렬로 한 자릿수 초 (timeout 2s 이내).
- scanProject 가 막혀도 BrowserWindow 자체는 응답 유지.
버전
- 0.1.35 → 0.1.36.
검증
npx tsc --noEmitexit=0.
남은 후속
- Supabase WS realtime, Vercel/GA4 분석. 사용자 테스트 후 추가 freeze 원인이 있으면 진단 로그로 식별.
📦 GitHub 릴리스 노트: v0.1.36