Files
yakcloud-starter/DATA-SOURCES.md

3.5 KiB

지원 데이터 소스 & 바인딩 env 주입

앱은 접속정보를 하드코딩하지 말고, 바인딩된 소스가 주입하는 아래 env로 읽는다. 매니페스트에서 binds: [{ alias, source }] 로 연결하면, alias(대문자화)가 env 프리픽스가 된다. 예: alias: dbDB_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) — 배포와 동일한 env 계약

개발 중에는 yakcloud dev uprequires[]로컬 docker 컨테이너로 띄우고, 위 표와 똑같은 <ALIAS>_* (같은 키·URL 포맷, 값만 로컬 컨테이너를 가리킴)를 .env.dev 로 생성한다. 즉 로컬에서 짠 코드가 배포 후에도 무수정 동작.

yakcloud dev up                     # requires[] 기동 + .env.dev 생성(무거운 oracle 은 명시 기동)
yakcloud dev run -- python app.py   # .env.dev 주입해 앱 실행(= 배포된 파드와 동일한 env)
yakcloud dev status | logs | down [--volumes] | reset | doctor
  • 자격은 프로젝트 시드에서 결정적 파생(재현 가능), .yakcloud/dev/ 에만 저장(gitignore). 브라우저/원격 미노출.
  • .env.dev·.yakcloud/·docker-compose.yakcloud-dev.yml 은 커밋 금지(스캐폴드 .gitignore 에 포함).
  • env 계약은 프로덕션 백엔드 _bind_env_for바이트 동일하게 유지(단일 진실원천).

앱 코드 예시

# 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 } });