응답이 안 오면 기다리는 데 끝이 없다
안 하면
콘텐츠 생성은 이미지까지 켜면 2분이 넘게 걸립니다. 그 사이 서버가 멈추거나 사용자의 인터넷이 끊기면 화면은 "생성 중"만 계속 돌립니다. 취소 버튼도 없어서 사용자는 몇 분을 더 기다리다 새로고침합니다. 검사 화면도 같아서, 단계 표시가 "진행 중"에 멈춘 채 영원히 안 넘어갑니다.
하면
요청마다 제한 시간을 둡니다. 검사와 생성은 5분, 나머지 조회는 30초처럼 나누고, 넘기면 "시간이 초과됐습니다. 다시 시도해 주세요"로 끝납니다. 로딩 화면에 취소 버튼이 생겨 사용자가 직접 멈출 수 있습니다.
export async function generateContent(req: GenerateRequest): Promise<GenerateResponse> {
const url = `${getApiUrl()}/generate`;
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(req),
});
AbortController는 이미 보낸 요청을 도중에 취소하는 브라우저 기능입니다. 지금은 요청을 보내 놓고 응답이 올 때까지 무한정 기다리는 구조라, 응답이 영영 안 오면 화면도 영영 안 끝납니다.