refactor: AI 타임아웃을 백엔드·프론트 동일 값 + 환경변수(AI_TIMEOUT_MS)로 통일

기존: 백엔드 30초(하드코딩 const)·프론트 60초(하드코딩)로 불일치
변경: 루트 .env 의 AI_TIMEOUT_MS(기본 60000)를 단일 소스로
- 백엔드 ai.service: REQUEST_TIMEOUT_MS const → ConfigService(AI_TIMEOUT_MS) 주입, 기본 60s
- 프론트 useAi: import.meta.env.VITE_AI_TIMEOUT_MS 사용, 기본 60s
- docker-compose: 백엔드 environment 에 AI_TIMEOUT_MS, 프론트 build arg 에 VITE_AI_TIMEOUT_MS=${AI_TIMEOUT_MS}
- 프론트 Dockerfile ARG/ENV, env.d.ts 타입, 루트 .env.example 추가
미설정/비정상 값이면 양쪽 모두 기본 60초로 폴백.

검증: 백엔드 build/lint 0, 프론트 type-check/lint/build 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-21 13:01:51 +09:00
parent ff33fb2e6c
commit 042d724b3a
6 changed files with 27 additions and 4 deletions
+6 -2
View File
@@ -7,6 +7,10 @@ import type {
} from '@/types/ai'
import type { Paginated } from '@/types/pagination'
// AI 요청 타임아웃(ms) — env VITE_AI_TIMEOUT_MS, 백엔드 AI_TIMEOUT_MS 와 동일 값 사용.
// 미설정/비정상이면 기본 60초(AI 생성이 axios 기본 10초를 넘기므로).
const AI_TIMEOUT_MS = Number(import.meta.env.VITE_AI_TIMEOUT_MS) || 60000
// AI 도메인 API Composable — 대화/메시지는 서버(DB)에서 관리(본인 소유 스코프)
export function useAi() {
const api = useApi()
@@ -45,7 +49,7 @@ export function useAi() {
}
// 할 일(체크리스트) 추천 — 실패는 호출측에서 인라인 처리(silent)
// AI 생성은 기본 10초 타임아웃을 넘기므로 넉넉히(백엔드 abort 30초보다 길게) 둔다
// AI 생성은 axios 기본 10초를 넘기므로 백엔드와 동일한 AI_TIMEOUT_MS 적용
async function suggestChecklist(payload: {
projectId: string
title: string
@@ -53,7 +57,7 @@ export function useAi() {
}): Promise<SuggestChecklistResult> {
return (await api.post('/ai/suggest-checklist', payload, {
silent: true,
timeout: 60000,
timeout: AI_TIMEOUT_MS,
})) as unknown as SuggestChecklistResult
}