AI가 Fetch API에 대해 잘못 알고 있는 5가지
AI 코딩 어시스턴트는 그럴듯해 보이는 코드를 작성합니다. 하지만 정확한 코드를 작성하지는 않습니다.
대부분의 모델은 단순한 fetch 코드 조각을 제안합니다. 데모에서는 잘 작동할지 모르지만, 프로덕션 환경에서는 실패합니다. Fetch API는 저수준(low-level) 도구이지, 완전한 HTTP 클라이언트가 아닙니다. Fetch API를 사용하려면 AI가 내릴 수 없는 아키텍처적 결정을 직접 내려야 합니다.
AI가 fetch를 다룰 때 실수하는 5가지 방식은 다음과 같습니다:
에러 핸들링 (Error Handling) AI는 요청이 실패하면 프로미스(promise)가 거부(reject)될 것이라고 가정합니다. 이는 잘못된 생각입니다. 404 또는 500 에러는 catch 블록을 트리거하지 않습니다. 반드시
response.ok를 수동으로 확인해야 합니다. 그렇지 않으면 앱은 에러 페이지를 성공적인 데이터로 처리하게 됩니다.요청 취소 (Request Cancellation) AI는 종종
AbortController를 사용하는 것을 잊어버립니다. 이는 React와 같은 프레임워크에서 메모리 누수와 레이스 컨디션(race condition)을 유발합니다. 사용자가 목록을 빠르게 클릭하면, 이전 요청이 새로운 요청보다 나중에 완료될 수 있습니다. 이로 인해 UI에 오래된 데이터가 남게 됩니다. 또한 의도적인 취소 시 에러 메시지가 표시되지 않도록AbortError를 필터링해야 합니다.스트리밍 데이터 (Streaming Data) AI는 응답을 단일 블록으로 취급합니다. 이는 대용량 파일이나 LLM 응답을 처리할 때 문제가 됩니다. 네트워크 청크(chunk)는 단일 문자나 JSON 라인을 반으로 나눌 수 있습니다. 청크 간의 바이트를 올바르게 처리하려면
TextDecoderStream과 버퍼를 사용해야 합니다.회복 탄력성 및 재시도 (Resilience and Retries) AI는 단순한 재시도 루프를 제공합니다. 이러한 루프는 위험합니다. 종종 POST 요청을 재시도하는데, 이는 중복 결제나 데이터 중복을 초래할 수 있습니다. 또한 백오프(backoff)와 지터(jitter)가 결여되어 있습니다. 이는 작은 서버 장애를 대규모 서비스 중단으로 키울 수 있습니다. 반드시 멱등성(idempotent)이 보장되는 요청만 재시도해야 하며, 지수 백오프(exponential backoff)를 사용해야 합니다.
환경 차이 (Environment Differences) AI는 브라우저와 Node.js의 규칙을 혼동합니다. Node.js는 CORS를 강제하지 않습니다. Node.js는 기본 타임아웃 설정도 다릅니다. Node 환경에서는 연결 누수를 방지하기 위해 반드시 바디(body)를 소비(consume)해야 합니다. AI는 대상 런타임을 알 수 없으므로, 한 곳에서는 작동하지만 다른 곳에서는 깨지는 코드를 제공하곤 합니다.
전략:
AI는 스캐폴딩(scaffolding) 용도로 사용하세요. 보일러플레이트와 기본 구조를 작성하게 하십시오.
의미론적 결정(semantics)은 직접 내려야 합니다. 404를 에러로 볼 것인지, 재시도 횟수(retry budget)는 얼마로 할 것인지, 인증 헤더를 어떻게 처리할 것인지는 여러분이 결정해야 합니다.
AI는 '그럴듯한' 코드를 최적화합니다. 여러분은 '정확한' 코드를 최적화해야 합니다.
출처: https://dev.to/devunionx/new5-things-even-ai-cant-do-fetch-api-328e
