guardia-mall/backend/src/main/resources/application.yml
DESKTOP-TKLFCPR\ython 84c3000411 chore(deploy): Mall 클린 재동기화 + Claude provider 전환
- 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>
2026-07-11 11:12:04 +09:00

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