5.1 KiB
5.1 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) — 배포와 동일한 env 계약
개발 중에는 yakcloud dev up 이 requires[] 를 로컬 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와 바이트 동일하게 유지(단일 진실원천).
스키마·데이터 마이그레이션(yakcloud datasource migrate) — 블랙리스트 스냅샷
개발 DB는 테스트로 엉망이 되기 쉬우니, 전부 캡처하되 블랙리스트로 뺀다(denylist). 새 환경을 dev 상태로 채우는 부트스트랩 도구.
yakcloud datasource migrate capture [source…] --dry-run # 무엇이 잡히는지 미리보기(읽기전용)
yakcloud datasource migrate capture [source…] # db/<source>/snapshot/ 에 전체−블랙리스트 덤프
yakcloud datasource migrate apply [source…] # 빈 타깃만 복원(데이터 있으면 스킵, force 없음)
yakcloud datasource migrate status
- 블랙리스트:
db/<source>/.migrateignore(글롭, git 추적). 예:audit_log_*,tmp_*,cache/*. 민감/개인정보·쓰레기는 반드시 여기에. - capture=읽기전용(안전), 전체 native 덤프. 9종 전부 지원(pg_dump/mysqldump/mongodump/mc mirror/redis DUMP·RESTORE/solr export/rabbitmq definitions/oracle Data Pump). 블랙리스트 단위: SQL·oracle=테이블, mongo=컬렉션, minio=오브젝트, redis=키, solr=문서(쿼리절), rabbitmq=큐/익스체인지. rabbitmq는 정의만(메시지 제외), oracle은 REMAP_SCHEMA로 스키마 이식.
- apply=빈 타깃만. 데이터가 있으면 절대 안 덮음(스킵). 라이브 prod 지속 동기화가 아님.
- db/ 는 커밋·리뷰 대상(
.env.dev·.yakcloud/와 반대로 gitignore 아님). - prod 적용은 콘솔 종류별 소스관리자 컨펌 + 항상 백업 후(롤백 보장) — CLI 로 prod 직접 덮지 않음.
앱 코드 예시
# 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 } });