perf: GraphQL 배치 조회 + OpenAI 배치 분석으로 subrequest 절감#15
Conversation
Cloudflare Workers의 50 subrequest 한도를 초과하는 문제를 해결한다. 1. fetchCohortUserSolutions: PR별 REST 파일 조회를 제거하고 GraphQL에 files(first:100)를 포함시켜 한 번에 조회 (기존 ~20회 → ~5회) 2. postLearningStatus: 파일별 OpenAI 개별 호출을 generateBatchApproachAnalysis로 일괄 처리 (기존 N회 → 1회) 전체 subrequest: 18+3N → 18+2N (N=5 기준 33→28회) Closes #10 Co-Authored-By: sounmind <37020415+sounmind@users.noreply.github.com> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
github | 92f8ca1 | Commit Preview URL Branch Preview URL |
Apr 08 2026, 01:35 PM |
sounmind
left a comment
There was a problem hiding this comment.
Code Review
전체적으로 subrequest 절감 방향이 적절합니다. 두 가지만 확인 부탁드려요.
1. 스텝 번호 중복
handlers/learning-status.js에서 스텝 5가 두 번 나옵니다.
// 5. AI 일괄 분석 (1회 OpenAI 호출로 모든 제출 파일 분석)
...
// 5. 카테고리별 진행도 계산새 단계가 삽입되면서 이후 번호가 밀려야 할 것 같아요.
2. 단건 위임 시 usage가 undefined
generateBatchApproachAnalysis에서 단건일 때 generateApproachAnalysis로 위임하는데, 기존 함수는 { matches, explanation }만 반환하고 usage 필드가 없습니다.
const result = await generateApproachAnalysis(...);
return {
results: [{ matches: result.matches, explanation: result.explanation }],
usage: result.usage, // → undefined (null이 아님)
};PR #12의 usage 추적 기능과 합쳐지면 totalUsage != null 체크가 undefined를 null과 다르게 처리하므로 의도치 않게 usage 섹션이 렌더링될 수 있어요. result.usage ?? null로 바꾸거나, generateApproachAnalysis에서도 usage를 반환하도록 맞추면 될 것 같습니다.
- learning-status.js: 스텝 5 중복을 5~9로 순번 재정렬 - openai.js: 단건 위임 시 result.usage ?? null로 undefined 방지 Co-Authored-By: sounmind <37020415+sounmind@users.noreply.github.com> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
정정: 2번 (
|
revert: PR #15 (GraphQL 배치 조회 + OpenAI 배치 분석) 원복
문제
Cloudflare Workers의 50 subrequest 한도를 초과하여
postLearningStatus가 실패함.PR 제출 파일이 10개 이상이면 한도에 도달 (기존:
18 + 3N회).해결
1.
fetchCohortUserSolutionsGraphQL 배치 조회files(first: 100)를 포함시켜 프로젝트 아이템 조회 시 파일 경로도 함께 가져옴2.
generateBatchApproachAnalysisOpenAI 배치 분석generateApproachAnalysis로 위임하여 동작 동일결과
Test plan
Closes #10
🤖 Generated with Claude Code