# ============================================================ # .env.example → cp .env.example .env 후 값 채워서 사용 # 모든 run.sh / scripts 가 이 파일을 source 합니다. # 절대 .env 자체를 git 에 올리지 마세요 (.gitignore 등록됨). # ============================================================ # --- (1) 클라이언트 도구 경로 --- # Oracle Instant Client (sqlplus) 가 PATH 에 있어야 함. # macOS 예: /Users//devkit/instantclient # Linux 예: /opt/oracle/instantclient_21_12 export PATH="${HOME}/devkit/instantclient:${PATH}" # Oracle wallet 디렉토리 (cwallet.sso, tnsnames.ora 포함된 풀린 경로) export TNS_ADMIN="" # 예: /Users/you/devkit/Wallet_D8AUKRO81636MON0 # --- (2) ADB 접속 --- export ADB_TNS="" # tnsnames.ora alias (예: d8aukro81636mon0_tp) export ADB_USER="admin" export ADB_PASSWORD="" # 비워두면 run.sh 가 read -s 로 프롬프트 export BACKOFFICE_DB_URL="jdbc:oracle:thin:@${ADB_TNS}?TNS_ADMIN=${TNS_ADMIN}" export BACKOFFICE_DB_USERNAME="${ADB_USER}" export BACKOFFICE_DB_PASSWORD="${ADB_PASSWORD}" # 편의: sqlplus 한 줄 connect 문자열 (자동 합성됨; 직접 안 건드려도 됨) # export ADB_CONN="${ADB_USER}/${ADB_PASSWORD}@${ADB_TNS}" # --- (2b) Spring Boot 백오피스 --- export BACKOFFICE_ADMIN_USER="admin" export BACKOFFICE_ADMIN_PASSWORD="admin" # 운영에서는 최초 한 번 생성한 {bcrypt} 해시를 .env에 보관합니다. 이를 사용하면 # 지속 로그인 쿠키가 앱 재기동 후에도 유효합니다. 원문 비밀번호 값은 Git에 넣지 마세요. export BACKOFFICE_ADMIN_PASSWORD_HASH="" # 읽기 전용 조회 계정. 활성화하면 ROLE_VIEWER로 로그인 가능하며 POST/PUT/PATCH/DELETE는 차단됩니다. export BACKOFFICE_GUEST_ENABLED="false" export BACKOFFICE_GUEST_USER="guest" export BACKOFFICE_GUEST_PASSWORD="" export BACKOFFICE_GUEST_PASSWORD_HASH="" # 로컬 HTTP 개발 기본값. 외부 VM 배포 스크립트는 loopback/HTTPS 안전값으로 덮어씁니다. export BACKOFFICE_BIND_ADDRESS="0.0.0.0" export BACKOFFICE_FORWARD_HEADERS_STRATEGY="none" export BACKOFFICE_REQUIRE_HTTPS="false" export BACKOFFICE_SESSION_COOKIE_SECURE="false" # HTTPS에서만 사용. key는 배포 환경의 secret으로 32자 이상 임의값을 넣고 Git에 저장하지 않습니다. export BACKOFFICE_REMEMBER_ME_ENABLED="false" export BACKOFFICE_REMEMBER_ME_KEY="" export BACKOFFICE_REMEMBER_ME_DAYS="14" # HMM HR 질의는 HMM MCP/DBMS_CLOUD_AI_AGENT를 사용합니다. 기존 ORDS 운영 기능이 필요할 때만 설정합니다. export BACKOFFICE_ORDS_BASE_URL="" export BACKOFFICE_ORDS_TIMEOUT_SECONDS="10" # ORDS metadata 생성/수정 전용 계정. 비워두면 BACKOFFICE_DB_* 연결을 사용하므로 # ADMIN으로 실행 중이면 Handler 생성은 막히고 소스 보기만 사용합니다. export BACKOFFICE_ORDS_DB_URL="${BACKOFFICE_DB_URL}" export BACKOFFICE_ORDS_DB_USERNAME="CB_ORDS" export BACKOFFICE_ORDS_DB_PASSWORD="" # Select AI는 프로파일 소유 스키마로 별도 접속합니다. # 원문 비밀번호는 .env 또는 배포 환경 secret에만 두며 Git에 올리지 않습니다. export BACKOFFICE_SELECT_AI_DB_URL="${BACKOFFICE_DB_URL}" export BACKOFFICE_SELECT_AI_DB_USERNAME="" export BACKOFFICE_SELECT_AI_DB_PASSWORD="" export BACKOFFICE_SELECT_AI_PROFILE="" export BACKOFFICE_SELECT_AI_FEW_SHOT_ENABLED="true" export BACKOFFICE_SELECT_AI_FEW_SHOT_TOP_K="3" # 공통 데이터 카탈로그. objects는 key/tableName/objectType/businessName/description JSON 배열입니다. # 배포 환경마다 반드시 실제 소유자와 허용 객체를 지정합니다. export BACKOFFICE_CATALOG_OWNER="APP_OWNER" export BACKOFFICE_CATALOG_OBJECTS='[{"key":"customers","tableName":"CUSTOMER","objectType":"TABLE","businessName":"고객","description":"고객 기본 정보"}]' export BACKOFFICE_PRODUCT_NAME="Data & AI Backoffice" export BACKOFFICE_PRODUCT_TITLE="Data & AI Backoffice" export BACKOFFICE_PRODUCT_DATA_LABEL="업무 데이터" export BACKOFFICE_MCP_TOOL_NAME="oracle.select_ai.data_text2sql" export BACKOFFICE_MCP_TOOL_LABEL="업무 데이터 Text2SQL" export BACKOFFICE_MCP_TOOL_DESCRIPTION="승인된 업무 데이터에 대해 읽기 전용 SQL을 생성하고 실행합니다." export BACKOFFICE_MCP_PROMPT_DESCRIPTION="업무 데이터에서 조회할 내용을 자연어로 입력합니다." export BACKOFFICE_MCP_SHOWPROMPT_TOOL_NAME="oracle.select_ai.data_showprompt" export BACKOFFICE_MCP_SHOWPROMPT_TOOL_LABEL="업무 데이터 SHOWPROMPT" export BACKOFFICE_MCP_SHOWPROMPT_TOOL_DESCRIPTION="Select AI가 SQL 생성에 사용한 prompt를 조회하는 읽기 전용 진단 도구입니다." # Select AI few-shot 예제 SQL 조회·저장 MCP. 운영 환경은 고객별 도구명과 안내문만 변경합니다. export BACKOFFICE_MCP_QA_VECTOR_SEARCH_TOOL_NAME="oracle.select_ai.qa_vector_search" export BACKOFFICE_MCP_QA_VECTOR_SEARCH_TOOL_LABEL="Select AI 예제 SQL 조회" export BACKOFFICE_MCP_QA_VECTOR_SEARCH_TOOL_DESCRIPTION="현재 질문에 사용할 유사 예제 SQL을 Select AI 실행 전에 조회합니다." export BACKOFFICE_MCP_QA_VECTOR_STORE_TOOL_NAME="oracle.select_ai.qa_vector_store" export BACKOFFICE_MCP_QA_VECTOR_STORE_TOOL_LABEL="Select AI 예제 SQL 저장" export BACKOFFICE_MCP_QA_VECTOR_STORE_TOOL_DESCRIPTION="검토된 Select AI 결과를 후속 Text2SQL 품질 향상용 예제 SQL로 저장합니다." # 마스킹 관리 대상. objectName/policyName JSON 배열이며, 비우면 어떤 DB 정책도 관리하지 않습니다. export BACKOFFICE_MASKING_POLICIES='' # 보안 SQL 화면에 노출할 번들 SQL. fileName은 패키지의 sql/adb/ 아래 파일명만 허용됩니다. export BACKOFFICE_SECURITY_SQL_SCRIPTS='' # --- (2c) OpenAI 호환 AI 호출 (MCP-style Reasoning 탭) --- export BACKOFFICE_AI_ENABLED="false" export BACKOFFICE_AI_PROVIDER="openai" # openai | oci export BACKOFFICE_AI_BASE_URL="" # 예: https://inference.generativeai.us-chicago-1.oci.oraclecloud.com export BACKOFFICE_AI_MODEL="" # 예: openai.gpt-5.4-mini export BACKOFFICE_AI_API_KEY="" export BACKOFFICE_AI_TIMEOUT_SECONDS="30" # provider=oci이면 API key를 환경 변수로 복제하지 않고 OCI config profile로 요청에 # 서명합니다. POC3_LLM_GPT55_OCI_*/OCI_GENAI_*가 있으면 아래 BACKOFFICE_* 값보다 # fallback으로 사용됩니다. export BACKOFFICE_AI_OCI_CONFIG_FILE="" export BACKOFFICE_AI_OCI_PROFILE="DEFAULT" export BACKOFFICE_AI_OCI_REGION="" export BACKOFFICE_AI_OCI_COMPARTMENT_ID="" # 로컬 키 별칭은 .env에만 저장하세요. .env.example에는 원문 키를 넣지 않습니다. export VPDTEST1_API_KEY="" export VPDTEST2_API_KEY="" # --- (3) 데모용 ADB 엔드유저 비밀번호 (database/adb/07_end_users.sql 에서 사용) --- # ADB 비번 정책: 12자 이상, 대/소/숫자/특수 조합. # 4명의 데모 유저: # vpduser_my → MySQL view 만 SELECT 가능 # vpduser_pg → Postgres view 만 SELECT 가능 # vpduser_both → 양쪽 view 모두 SELECT 가능 # vpduser_none → 양쪽 view 모두 fail-closed (0 rows) export VPDUSER_MY_PASSWORD="RowFilter#My2026" export VPDUSER_PG_PASSWORD="RowFilter#Pg2026" export VPDUSER_BOTH_PASSWORD="RowFilter#Both26" export VPDUSER_NONE_PASSWORD="RowFilter#None26" # --- (3b) OPTIONAL — DDS 변형 데모용 엔드유저 비밀번호 --- # database/adb/13_dds_variant.sql (Oracle 26ai Deep Data Security 재구현) 에서만 사용. # 동일한 4-user 매트릭스를 declarative Data Grants 로 재현. VPD 데모와 공존. export DDSUSER_MY_PASSWORD="DdsGrant#My2026" export DDSUSER_PG_PASSWORD="DdsGrant#Pg2026" export DDSUSER_BOTH_PASSWORD="DdsGrant#Both26" export DDSUSER_NONE_PASSWORD="DdsGrant#None26" export DDSUSER_TOKEN_PASSWORD="DdsGrant#Token26" # --- (3c) DDS MCP SSE · OCI IAM Confidential Application --- # 실제 값은 .env 또는 배포 환경의 secret store에만 둔다. export DDS_OCI_IAM_CLIENT_ID="" export DDS_OCI_IAM_CLIENT_SECRET="" export DDS_OCI_IAM_DOMAIN_URL="" # 예: https://idcs-.identity.oraclecloud.com export DDS_OCI_IAM_DATABASE_SCOPE="" # OCI IAM의 DB resource scope export DDS_OCI_IAM_TOKEN_URI="" # 비우면 ${DDS_OCI_IAM_DOMAIN_URL}/oauth2/v1/token export DDS_OCI_IAM_TIMEOUT_SECONDS="10s" export DDS_OCI_IAM_REFRESH_SKEW_SECONDS="60s" export DDS_MCP_BASE_URL="http://127.0.0.1:8083" export DDS_MCP_TEST_BEARER="" # 발급한 활성 CB_APP_USER Bearer만 로컬 테스트에 사용 # --- (4) 원격 Postgres (AWS RDS, Cloud SQL, ...) --- # database/source/postgres_setup.sql 가 여기로 customers 테이블/seed 생성. # ADB 의 RDS_POSTGRES_LINK 가 이 인스턴스를 가리킴. export PG_HOST="" # 예: vpd-poc.xxxxx.ap-northeast-2.rds.amazonaws.com export PG_PORT="5432" export PG_DB="vpdpoc" # CREATE DATABASE 미리 되어 있어야 함 export PG_USER="postgres" export PG_PASSWORD="" # --- (5) 원격 MySQL --- export MY_HOST="" export MY_PORT="3306" export MY_DB="ecommerce_poc" # CREATE DATABASE 미리 되어 있어야 함 export MY_USER="admin" export MY_PASSWORD="" # --- (6) ADB → 원격 DB Link 이름 (관례적으로 고정 — 굳이 안 바꿔도 됨) --- export DBLINK_PG_NAME="RDS_POSTGRES_LINK" export DBLINK_MY_NAME="RDS_LINK" # --- (7) Redmine (project tracker) --- export REDMINE_URL=https://redmine.example.com export REDMINE_API_KEY= # --- (8) Gitea (self-hosted git) --- export GITEA_URL=https://gittea.example.com export GITEA_USER= export GITEA_PASSWORD= export GITEA_TOKEN=