chore(deploy): Signage 클린 재동기화 + Claude provider flip

- db/95_flip_ai_provider_claude.sql 추가: signage_setting ai.provider=claude UPSERT(멱등)
- application.yml: 95 마이그 schema-locations 등재(94 이후, mode=always)
- 프론트 정적 번들 클린 재빌드(스테일 auto-sync 번들 해소)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
GUARDiA 2026-07-11 10:53:33 +09:00
parent 542bbd1985
commit 44ebbfb172
7 changed files with 82 additions and 48 deletions

View File

@ -30,6 +30,8 @@ spring:
- classpath:db/93_signage_login_helper.sql - classpath:db/93_signage_login_helper.sql
# AI 플랫폼(Claude 전환) provider/모델 설정 시드 — signage_setting ai.* (멱등) # AI 플랫폼(Claude 전환) provider/모델 설정 시드 — signage_setting ai.* (멱등)
- classpath:db/94_seed_ai_config.sql - classpath:db/94_seed_ai_config.sql
# AI provider=claude 확정 전환(UPSERT flip, 94 이후 순서 필수) — signage_setting ai.provider (멱등)
- classpath:db/95_flip_ai_provider_claude.sql
web: web:
resources: resources:
static-locations: classpath:/static/ static-locations: classpath:/static/

View File

@ -0,0 +1,31 @@
-- =====================================================================
-- GUARDiA SIGNAGE — 95. AI provider 를 claude 로 전환(flip, 멱등 UPSERT)
-- 대상 DB : guardia_signage_db (테이블 signage_setting — schema.sql 에서 생성)
-- 적용 : application.yml spring.sql.init.mode=always + schema-locations 에 본 파일 등재(94 이후).
-- 설명 : db/94 시드는 ON CONFLICT DO NOTHING 이라 이미 provider=ollama 로 자리잡은 값을
-- 바꾸지 못한다. 본 파일은 ON CONFLICT DO UPDATE(UPSERT)로 provider 를 claude 로 확정 전환.
-- 재기동 없이 AiConfigService 다음 호출부터 반영(런타임 해상도), mode:always 재실행 안전.
-- 근거 : AiConfigService.isClaudeActive() = provider=claude · claudeKeySet(env) · aiEnabled.
-- 키는 서버 환경변수 ANTHROPIC_API_KEY 로만 주입(DB 저장·본 시드 미포함). 키/네트워크
-- 실패 시 라우터가 Ollama(선택 모델)로 자동 폴백 — 본업 무손실.
-- 보안 : 키/시크릿/IP/비밀번호 일절 미포함.
-- 멱등 : INSERT ... ON CONFLICT (setting_key) DO UPDATE SET setting_value = EXCLUDED.setting_value.
-- =====================================================================
SET client_encoding = 'UTF8';
-- provider 를 claude 로 확정(없으면 생성, 있으면 값 교체 — 멱등).
INSERT INTO signage_setting (setting_key, setting_value, category, description) VALUES
('ai.provider', 'claude', 'AI', 'LLM provider(ollama/claude/qwen3/deepseek/glm)')
ON CONFLICT (setting_key) DO UPDATE
SET setting_value = EXCLUDED.setting_value,
updated_at = NOW();
-- AI 전역 활성 보장(off 로 남아있던 환경도 claude 전환 시 정상 동작하도록 확정).
INSERT INTO signage_setting (setting_key, setting_value, category, description) VALUES
('ai.enabled', 'true', 'AI', '전역 AI 사용 여부(off=규칙기반 degraded)')
ON CONFLICT (setting_key) DO UPDATE
SET setting_value = EXCLUDED.setting_value,
updated_at = NOW();
-- end 95_flip_ai_provider_claude.sql

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -3,9 +3,10 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<title>GUARDiA Signage — 전자간판 중앙관제</title> <title>GUARDiA Signage — 전자간판 중앙관제</title>
<script type="module" crossorigin src="/assets/index-0lU_ssmW.js"></script> <script type="module" crossorigin src="/assets/index-FQh55z4k.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Jv84e5MJ.css"> <link rel="stylesheet" crossorigin href="/assets/index-B2OE9yPb.css">
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>