# 지원 데이터 소스 & 바인딩 env 주입 앱은 접속정보를 **하드코딩하지 말고**, 바인딩된 소스가 주입하는 아래 env로 읽는다. 매니페스트에서 `binds: [{ alias, source }]` 로 연결하면, `alias`(대문자화)가 env 프리픽스가 된다. 예: `alias: db` → `DB_URL`, `DB_HOST`, `DB_PORT`, `DB_USERNAME`, `DB_PASSWORD`, `DB_DB`. ## 지원 소스 (`requires[].type`) | type | 소스 | 비고 | |---|---|---| | `postgresql` | PostgreSQL | 관계형 | | `mysql` | MySQL | 관계형 | | `mariadb` | MariaDB | 관계형(MySQL 와이어 호환) | | `mongodb` | MongoDB | 도큐먼트 | | `redis` | Redis | 인메모리 KV/캐시 | | `minio` | MinIO | S3 호환 오브젝트 스토리지 | | `rabbitmq` | RabbitMQ | 메시지 브로커(AMQP) | | `solr` | Solr | 검색 엔진 | | `oracle` | Oracle | 관계형(외부 연결) | `plan` ∈ `{small, medium, large}`. ## 소스별 주입 env (예시 alias=`db`) 모든 타입 공통: **`_HOST`**, **`_PORT`**. | type | 추가 env 키 | `_URL` 형식 | |---|---|---| | `postgresql` | `_USERNAME` `_PASSWORD` `_DB` | `postgresql://user:pw@host:port/db` | | `mysql` | `_USERNAME` `_PASSWORD` `_DB` | `mysql://user:pw@host:port/db` | | `mariadb` | `_USERNAME` `_PASSWORD` `_DB` | `mysql://user:pw@host:port/db` | | `mongodb` | `_USERNAME` `_PASSWORD` `_DB` | `mongodb://user:pw@host:port/db?authSource=db` | | `redis` | `_USERNAME`(빈) `_PASSWORD` `_DB`(번호) | `redis://:pw@host:port/db` | | `minio` | `_ACCESS_KEY` `_SECRET_KEY` `_ENDPOINT` `_BUCKET` `_REGION` `_USE_SSL` | `_URL`=`_ENDPOINT` | | `rabbitmq` | `_USERNAME` `_PASSWORD` `_VHOST` `_MGMT_URL` | `amqp://user:pw@host:port/vhost` | | `solr` | `_CORE` `_ENDPOINT` | `http://host:port/solr/core` | | `oracle` | `_USERNAME` `_PASSWORD` `_SERVICE` `_JDBC_URL` `_DSN` | `oracle://user:pw@host:port/service` | > 비밀번호·키는 인클러스터 Secret으로 주입되고 콘솔/브라우저에 노출되지 않는다. URL의 user/pw는 URL-인코딩됨. ## 로컬 개발 → 검증 → 운영, 같은 바인딩 계약 **로컬 개발(`yakcloud dev`, 로컬 kind)**: 선언한 소스를 로컬 컨테이너로 띄우고 위 `_*` env를 관리형과 **동일하게** 주입한다 — 앱 코드는 dev/prod 구분 없이 같은 env로 접속(직선 파리티). 상위 환경(val/prod)은 아래 관리형 모드로 배포·승격된다. 관리형 데이터 소스는 두 가지 모드: 1. **인클러스터(local)**: 클러스터 안에서 실제로 프로비저닝(StatefulSet). 개발 클러스터에 배포하면 그 클러스터의 소스가 `_*` 로 주입되고, 상위 환경으로 승격하면 그 환경 클러스터의 소스가 주입된다 — 각 환경이 자체 데이터 계층을 가진다. 2. **공유 외부(shared)**: 소용량(S) 클러스터용. 매니페스트 `requires` 에 `{ name, type: mongodb, mode: shared }` 로 선언 (또는 `yakcloud source add mongodb --shared`; 콘솔/API 등록도 가능). 배포 시 백엔드가 클러스터별 격리 DB/계정을 만들어, 모든 환경이 같은 외부 소스 이름으로 환경별 격리 접속(인클러스터 StatefulSet 불필요). 환경 간 데이터 백업·싱크는 별도(추후). ## 앱 코드 예시 ```python # Python — alias=db (postgres) import os, psycopg2 conn = psycopg2.connect(os.environ["DB_URL"]) ``` ```js // Node — alias=mongo const client = new MongoClient(process.env.MONGO_URL); ``` ```js // MinIO(S3) — alias=files const s3 = new S3Client({ endpoint: process.env.FILES_ENDPOINT, region: process.env.FILES_REGION, credentials: { accessKeyId: process.env.FILES_ACCESS_KEY, secretAccessKey: process.env.FILES_SECRET_KEY } }); ```