diff --git a/deployment/container/nginx.conf b/deployment/container/nginx.conf index 382db3f..500b3c3 100644 --- a/deployment/container/nginx.conf +++ b/deployment/container/nginx.conf @@ -55,10 +55,10 @@ http { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - # Timeouts - proxy_connect_timeout 60s; - proxy_send_timeout 60s; - proxy_read_timeout 60s; + # Timeouts - 이미지 생성은 시간이 오래 걸리므로 3분으로 설정 + proxy_connect_timeout 180s; + proxy_send_timeout 180s; + proxy_read_timeout 180s; } # Static files diff --git a/src/app/api/content/images/generate/route.ts b/src/app/api/content/images/generate/route.ts index ee9400c..9d2006d 100644 --- a/src/app/api/content/images/generate/route.ts +++ b/src/app/api/content/images/generate/route.ts @@ -11,13 +11,20 @@ export async function POST(request: NextRequest) { body, }); - const response = await fetch(`${CONTENT_API_BASE_URL}/api/v1/content/images/generate`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(body), - }); + // 이미지 생성은 시간이 오래 걸리므로 타임아웃을 3분으로 설정 + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), 180000); // 3분 + + try { + const response = await fetch(`${CONTENT_API_BASE_URL}/api/v1/content/images/generate`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + signal: controller.signal, + }); + clearTimeout(timeoutId); if (!response.ok) { const errorText = await response.text(); @@ -28,10 +35,21 @@ export async function POST(request: NextRequest) { ); } - const data = await response.json(); - console.log('✅ Image generation job created:', data); + const data = await response.json(); + console.log('✅ Image generation job created:', data); - return NextResponse.json(data); + return NextResponse.json(data); + } catch (fetchError) { + clearTimeout(timeoutId); + if (fetchError instanceof Error && fetchError.name === 'AbortError') { + console.error('❌ Request timeout after 3 minutes'); + return NextResponse.json( + { error: 'Request timeout', details: 'Image generation request timed out after 3 minutes' }, + { status: 504 } + ); + } + throw fetchError; + } } catch (error) { console.error('❌ Proxy error:', error); return NextResponse.json(