- ai.provider flip 마이그레이션 추가(db/202_ai_provider_claude.sql, mall_setting UPSERT claude) - application.yml schema-locations 에 202 등재(sql.init mode=always 멱등) - workspace 정본 기준 클린 재동기화(부분 auto-sync 드리프트 해소) - Claude 실패/키 미설정 시 AiTextRouter 가 Ollama 자동 폴백(무중단) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
82 lines
3.5 KiB
YAML
82 lines
3.5 KiB
YAML
server:
|
|
port: 8011
|
|
spring:
|
|
application:
|
|
name: guardia-mall
|
|
datasource:
|
|
url: ${DB_URL:jdbc:postgresql://localhost:5432/mall_db}
|
|
username: ${DB_USER:mall_user}
|
|
password: ${DB_PASS:mall_pass2026}
|
|
driver-class-name: org.postgresql.Driver
|
|
# UIWS 이식: 부팅 시 91_uiws_port.sql(업무 9테이블 + mall_account 2FA ALTER) 멱등 적용.
|
|
# 전부 IF NOT EXISTS / ADD COLUMN IF NOT EXISTS / ON CONFLICT DO NOTHING → mode:always 재실행 안전.
|
|
# schema.sql 은 deploy_server 가 psql 로 별도 적용(비멱등 시드 충돌 회피 위해 여기 미포함).
|
|
sql:
|
|
init:
|
|
mode: ${SQL_INIT_MODE:always}
|
|
schema-locations: classpath:db/91_uiws_port.sql,classpath:db/92_uiws_system.sql,classpath:db/93_auth_otp.sql,classpath:db/104_seed_ai_config.sql,classpath:db/202_ai_provider_claude.sql
|
|
continue-on-error: true
|
|
servlet:
|
|
multipart:
|
|
max-file-size: 20MB
|
|
max-request-size: 20MB
|
|
mybatis:
|
|
mapper-locations: classpath:mapper/**/*.xml # ** : 하위 mapper/uiws/*.xml(UIWS 이식) 포함
|
|
configuration:
|
|
map-underscore-to-camel-case: true
|
|
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
|
|
springdoc:
|
|
api-docs:
|
|
path: /api/mall/docs
|
|
swagger-ui:
|
|
path: /api/mall/swagger
|
|
mall:
|
|
# 외부 게이트웨이 어댑터 선택 — 기본 mock(개발/데모 외부호출 0). 운영 시 환경변수로 오버라이드.
|
|
payment:
|
|
provider: ${MALL_PAYMENT_PROVIDER:mock} # mock | stripe
|
|
tax:
|
|
provider: ${MALL_TAX_PROVIDER:mock} # mock | taxjar | avalara
|
|
address:
|
|
provider: ${MALL_ADDRESS_PROVIDER:mock} # mock | google | smarty
|
|
sms:
|
|
provider: ${MALL_SMS_PROVIDER:mock} # mock | twilio
|
|
email:
|
|
provider: ${MALL_EMAIL_PROVIDER:mock} # mock | sendgrid
|
|
# ── UIWS 이식: 2FA(운영 로그인) + 첨부 업로드 설정 (mall.uiws.*) ──────────────
|
|
uiws:
|
|
auth:
|
|
twofa-enabled: ${UIWS_2FA:true} # off=운영 로그인도 단일 JWT(회귀 0). 고객(USER)은 항상 미적용.
|
|
verify-token-validity-seconds: 300 # 1차 통과 후 verify-token 5분
|
|
email-code-validity-seconds: 300 # 이메일 인증코드 5분
|
|
max-login-fail: 5 # 실패 5회 시 운영 계정 잠금
|
|
mail:
|
|
mode: ${UIWS_MAIL_MODE:log} # LogMailSender 폴백(외부 API 0). smtp 는 설정 시만.
|
|
upload:
|
|
upload-dir: ${UIWS_UPLOAD_DIR:./uploads/uiws}
|
|
guardia:
|
|
itsm-url: ${ITSM_URL:http://localhost:9001}
|
|
erp-url: ${ERP_URL:http://localhost:8003}
|
|
crm-url: ${CRM_URL:http://localhost:8004}
|
|
ocr-url: ${OCR_URL:http://localhost:8005}
|
|
ollama-url: ${OLLAMA_URL:http://localhost:11434}
|
|
ollama-text-model: ${OLLAMA_TEXT_MODEL:llama3.2:1b}
|
|
# 로컬 임베디드 DuckDB 학습 저장소 파일(솔루션 격리). 경로 미가용/드라이버 부재 시 자동 비활성(no-op).
|
|
mall:
|
|
learning:
|
|
duckdb-path: ${MALL_LEARNING_DUCKDB:/opt/guardia-mall/data/mall_learning.duckdb}
|
|
# 중앙 guardia-rag(온프레미스 전용) — 최신 AI 기법 경유. 미가용 시 Mall 로컬 폴백(degraded)
|
|
rag:
|
|
base-url: ${RAG_URL:http://127.0.0.1:8020}
|
|
timeout-ms: ${RAG_TIMEOUT_MS:120000}
|
|
enabled: ${RAG_ENABLED:true}
|
|
solution: mall
|
|
crypto:
|
|
secret: ${CRYPTO_SECRET:guardia-mall-aes-256-gcm-master-key-2026-zioinfo}
|
|
jwt:
|
|
secret: ${JWT_SECRET:guardia-mall-jwt-secret-2026-minimum-256bit-key-zioinfo}
|
|
expiration: 86400000
|
|
logging:
|
|
level:
|
|
com.zioinfo.mall: DEBUG
|
|
org.mybatis: WARN
|