yakcloud dev up|deploy|status|clean|down. 로컬 kind 를 dev 구간으로 삼아 관리형과 동일한 바인딩 env 계약을 로컬에서 재현(pg/mysql/mariadb/mongodb/redis). dev 에선 CLI 가 곧 컨트롤플레인 이라 오프라인 반복. 같은 매니페스트·같은 이미지로 promote --to val/prod 직선. VERSION 0.14.0. 문서 동시 갱신(SKILL·/yakcloud 명령·yakcloud.yaml·README·DATA-SOURCES). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
지원 데이터 소스 & 바인딩 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)
모든 타입 공통: <ALIAS>_HOST, <ALIAS>_PORT.
| type | 추가 env 키 | <ALIAS>_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): 선언한 소스를 로컬 컨테이너로 띄우고 위 <ALIAS>_* env를 관리형과
동일하게 주입한다 — 앱 코드는 dev/prod 구분 없이 같은 env로 접속(직선 파리티). 상위 환경(val/prod)은
아래 관리형 모드로 배포·승격된다.
관리형 데이터 소스는 두 가지 모드:
- 인클러스터(local): 클러스터 안에서 실제로 프로비저닝(StatefulSet). 개발 클러스터에 배포하면 그 클러스터의 소스가
<ALIAS>_*로 주입되고, 상위 환경으로 승격하면 그 환경 클러스터의 소스가 주입된다 — 각 환경이 자체 데이터 계층을 가진다. - 공유 외부(shared): 소용량(S) 클러스터용. 매니페스트
requires에{ name, type: mongodb, mode: shared }로 선언 (또는yakcloud source add <name> mongodb --shared; 콘솔/API 등록도 가능). 배포 시 백엔드가 클러스터별 격리 DB/계정을 만들어, 모든 환경이 같은 외부 소스 이름으로 환경별 격리 접속(인클러스터 StatefulSet 불필요). 환경 간 데이터 백업·싱크는 별도(추후).
앱 코드 예시
# Python — alias=db (postgres)
import os, psycopg2
conn = psycopg2.connect(os.environ["DB_URL"])
// Node — alias=mongo
const client = new MongoClient(process.env.MONGO_URL);
// 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 } });