diff --git a/ai-server/backend/routers/game_router.py b/ai-server/backend/routers/game_router.py index 0c96044..c0a203e 100644 --- a/ai-server/backend/routers/game_router.py +++ b/ai-server/backend/routers/game_router.py @@ -15,12 +15,12 @@ from backend.services import game_service router = APIRouter(prefix="/api/game", tags=["Game"]) @router.post("/death", response_model=AncestorDeathResponse) -def record_death(req: AncestorDeathCreate, db: Session = Depends(get_db)): +def record_death(req: AncestorDeathCreate, background_tasks: BackgroundTasks, db: Session = Depends(get_db)): death_history = game_service.create_death_history(db=db, death_data=req) - # 다음 세대 대사 즉시 생성 및 캐싱 보장 (동기식 호출) + # 다음 세대 대사 백그라운드 사전 생성 (비동기 백그라운드 태스크 구동) next_gen = death_history.generation + 1 - game_service.pregenerate_npc_dialogue(db=db, next_generation=next_gen) + background_tasks.add_task(game_service.pregenerate_npc_dialogue, next_gen) return death_history diff --git a/ai-server/backend/services/game_service.py b/ai-server/backend/services/game_service.py index d463452..10f1e81 100644 --- a/ai-server/backend/services/game_service.py +++ b/ai-server/backend/services/game_service.py @@ -36,10 +36,12 @@ def create_death_history(db: Session, death_data: AncestorDeathCreate): db.refresh(db_death) return db_death -# 3. 문지기 NPC 조언 대사 사전 생성 (동기식 생성 및 캐싱 보장) -def pregenerate_npc_dialogue(db: Session, next_generation: int): +# 3. 문지기 NPC 조언 대사 사전 생성 (비동기 백그라운드 구동) +def pregenerate_npc_dialogue(next_generation: int): + # 비동기로 돌기 때문에 직접 세션을 생성해서 처리합니다. + db = SessionLocal() try: - print(f"[Pregen] {next_generation}대손용 문지기 대사 동기 생성 시작...") + print(f"[Pregen] {next_generation}대손용 문지기 대사 백그라운드 생성 시작...") # 1. AI 조언 대사 생성 dialogue_text = generate_npc_dialogue(db=db, current_generation=next_generation) @@ -60,7 +62,9 @@ def pregenerate_npc_dialogue(db: Session, next_generation: int): print(f"[Pregen] {next_generation}대손용 대사 캐싱 완료: {dialogue_text}") except Exception as e: db.rollback() - print(f"[Pregen ERROR] 대사 생성 실패: {e}") + print(f"[Pregen ERROR] 대사 백그라운드 생성 실패: {e}") + finally: + db.close() # 2. 문지기 NPC 조언 대사 생성 def generate_npc_dialogue(db: Session, current_generation: int) -> str: