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:
parent
542bbd1985
commit
44ebbfb172
@ -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/
|
||||||
|
|||||||
31
backend/src/main/resources/db/95_flip_ai_provider_claude.sql
Normal file
31
backend/src/main/resources/db/95_flip_ai_provider_claude.sql
Normal 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
File diff suppressed because one or more lines are too long
BIN
backend/src/main/resources/static/favicon.ico
Normal file
BIN
backend/src/main/resources/static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@ -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>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user