From d15a484dbfe41cc4f4b6ed120e09b7b2301a1333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=80=E1=85=AE?= Date: Wed, 8 Jul 2026 05:12:19 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=84=EB=8F=99=EA=B8=B0=20=ED=98=95?= =?UTF-8?q?=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EC=BD=94=EB=93=9C=20=EC=9E=AC?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ai-server/backend/routers/game_router.py | 6 +++--- ai-server/backend/services/game_service.py | 12 ++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) 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: