# Local profile
spring:
  servlet:
    multipart:
      max-file-size: 15MB # 개별 파일 최대 크기를 15MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함.
      max-request-size: 150MB # 전체 요청 최대 크기를 150MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함.
  config:
    activate:
      on-profile: local
  devtools:
    livereload:
      enabled: true
    restart:
      enabled: true
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://211.119.124.117:53306/vips?characterEncoding=UTF-8&allowMultiQueries=true
    username: vips
    password: xit5811807
    hikari:

      # ==========================================
      # 커넥션 풀 크기 설정 (4코어 32GB 서버 기준)
      # ==========================================
      # 동시에 사용할 수 있는 최대 커넥션 수
      # 권장값: (코어수 × 2) + (동시사용자 × 0.1) = (4 × 2) + (300 × 0.1) = 38 → 40
      # 이 값을 초과하면 새로운 커넥션 요청이 대기 상태가 됨
      maximum-pool-size: 40
      # 풀에서 유지할 최소 유휴 커넥션 수
      # 권장값: maximum-pool-size의 25% (40 × 0.25 = 10)
      # 갑작스러운 부하 증가 시 빠른 응답을 위해 미리 준비된 커넥션 유지
      minimum-idle: 10

      # ==========================================
      # 커넥션 타임아웃 설정
      # ==========================================
      # 커넥션을 얻기 위한 최대 대기 시간 (밀리초)
      # 권장값: 30초 - 네트워크 지연이나 데이터베이스 부하 시 적절한 대기 시간
      connection-timeout: 30000
      # 커넥션 유효성 검사 타임아웃 (밀리초)
      # 권장값: 60초 - 유효성 검사가 너무 오래 걸리지 않도록 제한
      validation-timeout: 60000

      # ==========================================
      # 커넥션 생명주기 관리
      # ==========================================
      # 커넥션의 최대 생명 시간 (밀리초)
      # 권장값: 30분 - 데이터베이스 연결이 너무 오래 유지되지 않도록 제한
      max-lifetime: 1800000
      # 유휴 커넥션을 제거하기 위한 최소 대기 시간 (밀리초)
      # 권장값: 10분 - 메모리 절약과 커넥션 재사용의 균형점
      idle-timeout: 600000

      # ==========================================
      # 커넥션 누수 방지 (수백명 동시 사용 환경, 배치가 있으므로 제외 함.)
      # ==========================================
      # 커넥션 누수 감지 임계값 (밀리초)
      # 권장값: 300초 (5분) - 일반적인 쿼리 실행 시간보다 충분히 큰 값
      # 너무 짧으면 정상적인 긴 쿼리도 누수로 감지될 수 있음
      # 너무 길면 커넥션 누수 시 메모리 부족 가능성
      # leak-detection-threshold: 300000

      #hikari.connection-test-query 는 JDBC 4.0 이상을 사용하면 설정하지 않는 것을 권장. (공식문서)
      #connection-test-query: select 1
      auto-commit: false
      # secondary:
      #  url: jdbc:mariadb://localhost:3306/secondary_db
      #  username: user2
      #  password: pass2

# Server configuration
server:
  servlet:
    session:
      timeout: 60m  # 세션 타임아웃을 60분으로 증가
      cookie:
        # ==========================================
        # http-only: JavaScript로 쿠키 접근 가능 여부
        # ==========================================
        # true: document.cookie로 접근 불가 → XSS(Cross-Site Scripting) 공격 방어 (권장)
        # false: JavaScript로 쿠키 읽기/수정 가능 → XSS 공격에 취약
        # 보안: 항상 true 권장 (개발/운영 환경 모두)
        http-only: true

        # ==========================================
        # secure: HTTPS 연결에서만 쿠키 전송 여부
        # ==========================================
        # true: HTTPS(https://)에서만 쿠키 전송 → 중간자 공격(MITM) 방어
        #       - HTTPS 구성 필수
        #       - HTTP(http://)로 접근 시 쿠키 전송 안됨 → 세션 유지 불가, 로그인 실패
        # false: HTTP/HTTPS 모두 쿠키 전송 가능
        #       - 개발 환경에서 HTTP 사용 가능
        #       - IP 주소(192.168.x.x)로 접근 가능
        # 개발환경: false, 운영환경: true (HTTPS 인증서 적용 후)
        secure: false

        # ==========================================
        # same-site: 크로스 사이트 요청 시 쿠키 전송 제어
        # ==========================================
        # strict: 같은 사이트에서만 쿠키 전송 (가장 안전하지만 불편)
        #         - example.com → example.com (O)
        #         - other.com → example.com (X)
        # lax: 일부 크로스 사이트 GET 요청 허용 (권장, 보안과 사용성 균형)
        #      - 같은 사이트 모든 요청 (O)
        #      - 외부 링크 클릭(GET) (O)
        #      - 외부 폼 제출(POST) (X)
        # none: 모든 크로스 사이트 요청 허용 (secure: true 필수)
        #       - 모든 외부 사이트 요청 허용
        # 보안: CSRF(Cross-Site Request Forgery) 공격 방어
        same-site: lax

      # ==========================================
      # tracking-modes: 세션 추적 방식
      # ==========================================
      # cookie: 쿠키로만 세션 추적 (권장, 안전)
      #         - 세션 ID가 쿠키에만 저장됨
      # url: URL에 세션 ID 포함 (비권장, 보안 위험)
      #      - 예: http://example.com/page;jsessionid=ABC123
      #      - 세션 ID가 URL에 노출되어 로그, 히스토리에 남음
      #      - 세션 하이재킹 위험 증가
      # ssl: SSL 세션 ID 사용
      # 보안: cookie만 사용 권장 (URL 노출 방지)
      tracking-modes: cookie

#logback
logging:
  config: classpath:logback-spring.xml
  file:
    path: d:/data/@projectName@/logs
    name: '@projectName@'
  logback:
    rollingpolicy:
      max-file-size: 10MB
      max-history: 30
  level:
    org.springframework: WARN
    go.kr.project: DEBUG
    go.kr.project.sql: INFO  # datasource-proxy
    go.kr.project.sql.binding: DEBUG  # datasource-proxy 파라미터 바인딩된 쿼리 로그
    egovframework: DEBUG
    egovframework.config.RestTemplateConfig: DEBUG

# File upload configuration
file:
  upload:
    path: d:/data/@projectName@/file
    max-size: 10  # 단일 파일 최대 크기 (MB)
    max-total-size: 100  # 총 파일 최대 크기 (MB)
    max-files: 10  # 최대 파일 개수
    allowed-extensions: txt,hwp,jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx,ppt,pptx,txt,zip
    real-file-delete: false  # 실제 파일 삭제 여부
    sub-dirs:
      api-target-list-txt-file: api/target  # api 조회 대상 파일

# Juso API configuration
juso:
  api:
    key: "devU01TX0FVVEgyMDI1MDkyMjEyMTM1NzExNjI0NzE="
    url: "https://business.juso.go.kr/addrlink/addrLinkApiJsonp.do"

# ===== VMIS 통합 설정 (Local 환경) =====
vmis:
  # RestTemplate 설정
  rest-template:
    timeout:
      connect-timeout-millis: 10000  # 연결 타임아웃
      read-timeout-millis: 12000     # 읽기 타임아웃
    connection-pool:
      max-total: 100                 # 최대 연결 수
      max-per-route: 20              # 경로당 최대 연결 수
    rate-limit:
      permits-per-second: 5.0        # 초당 5건 제한

  # External API 설정
  external:
    api:
      url:
        base: "http://localhost:8081/api/v1/vehicles"  # VMIS-interface 서버 URL (운영)
        basic:
          old-or-new: "old" # 과거 신규 API 선택
          old-url: "/old-basic" # 자동차기본정보
          new-url: "/new-basic" # 자동차기본정보
        ledger:
          old-or-new: "new" # 과거 신규 API 선택, 자동차등록원부(갑)은 연계서버에 old 구현안됨.
          old-url: "/old-ledger" # 자동차등록원부(갑)
          new-url: "/new-ledger" # 자동차등록원부(갑)