프로젝트에서 OpenAI의 image edit 기능을 활용한 이미지 생성을 구현하던 중,
Amplify 환경에서 API 요청이 504 Gateway Timeout 에러를 반환하는 문제에 직면했습니다.
completed 상태가 되면 사용자에게 결과 페이지로 전환Amplify에서 SSR을 유도하기 위해 middleware.ts 및 app/api/.../route.ts 외에
pages/api/ping.ts도 추가하여 SSR Lambda가 확실히 생성되도록 처리
fire-and-forget 호출 시 .catch()로 예외 누락 방지
이건 try catch 든 .catch 든 쓰면 fire-and-forget 이 안되는 것 확인!!!
아래처럼 꼼수로 처리했음
import api from "@/apis/axios";
import type { GenResponse } from "@/types/iffy.types";
import { type NextRequest, NextResponse } from "next/server";
function awaitTime(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export async function GET(
request: NextRequest,
): Promise<NextResponse<GenResponse>> {
const searchParams = request.nextUrl.searchParams;
const query = searchParams.get("id");
if (!query) {
return NextResponse.json(
{ status: "error", message: "No id provided" },
{ status: 400 },
);
}
// 원본 요청에서 쿠키 헤더 가져오기
const cookieHeader = request.headers.get("cookie");
// Fire-and-Forget 요청 시 쿠키 헤더 전달
api.get(`/api/backtask?id=${query}`, {
headers: {
...(cookieHeader && { Cookie: cookieHeader }),
},
});
// 여기가 꼼수부분..
// await 을 하지 않으니 api.get 이 되기도 전에
// 리스폰스로 넘어가버려 실행이 안되는 문제 임시 해결용
// upstash 등을 쓰라고 하지만.. 간단히 처리해보고 싶었기 때문...
await awaitTime(1000);
return NextResponse.json(
{ status: "success", message: "IFFY 생성 요청 전달" },
{ status: 202 },
);
}