환경 변수
이 문서로 해결할 질문
- Kafka Consumer에 필요한 환경 변수는 무엇인가요?
- OpenAI·공공데이터 API 키는 어디서 쓰이나요?
- producer와 공유하는 DB·Kafka 변수는 어떻게 맞추나요?
개요
Consumer 패키지는 Kafka Consumer와 배치 워커를 실행합니다. 환경 변수 파일은 호스트에서는 server/consumer/.env.local, Docker에서는 server/consumer/.env.docker.local을 사용합니다.
cp server/consumer/.env.example server/consumer/.env.local
부팅 시 server/consumer/.../env.validation.ts의 Joi 스키마로 모든 변수가 필수인지 검증합니다.
METRICS_ENABLED=true이면 METRICS_PORT에서 별도로 /metrics 엔드포인트를 노출합니다.
Docker Compose
DOCKERHUB_USERNAME
| 항목 | 내용 |
|---|---|
| 설명 | Docker Hub 계정명. Compose image 필드 ${DOCKERHUB_USERNAME}/mealio-consumer:latest 치환에 사용 |
| 예시 | your-dockerhub-username |
| 사용처 | docker/consumer/compose.yml services.consumer.image |
| 패턴 | Compose가 image 태그를 해석하거나 Docker Hub에 Push |
MEMORY_LIMIT
| 항목 | 내용 |
|---|---|
| 설명 | consumer 컨테이너 메모리 limit (deploy.resources.limits.memory) |
| 예시 | 1G |
| 사용처 | docker/consumer/compose.yml |
공통
APP_ENV
| 항목 | 내용 |
|---|---|
| 설명 | 배포 환경 식별자 |
| 허용값 | local, development, production, test |
| 사용처 | @mealio/shared Sentry 초기화, 로그 컨텍스트 |
데이터·메시징
POSTGRESQL_URL, MONGODB_URL, REDIS_URL, KAFKA_BROKERS, KAFKA_CLIENT_ID는 producer 환경 변수와 동일한 연결 정보를 사용합니다. 호스트/Docker 호스트명만 환경에 맞게 바꿉니다.
| 변수 | consumer 전용 차이 |
|---|---|
KAFKA_CLIENT_ID | 예: mealio-consumer (producer와 구분) |
POSTGRESQL_URL
| 항목 | 내용 |
|---|---|
| 설명 | Prisma — Recipe·추천·크레딧·pgvector |
| 사용처 | server/consumer/.../repositories/postgresql/ |
MONGODB_URL
| 항목 | 내용 |
|---|---|
| 설명 | EventLog·ChatbotLog·ingestion job 문서 |
| 사용처 | Mongoose 스키마 모듈 |
REDIS_URL
| 항목 | 내용 |
|---|---|
| 설명 | Handler 캐시·챗봇 스트림 이벤트 발행 |
| 예시 (로컬) | redis://:devpassword@localhost:6379 |
| 예시 (Compose 앱) | redis://:devpassword@redis:6379 |
| 사용처 | @mealio/shared Redis 모듈 |
KAFKA_BROKERS / KAFKA_CLIENT_ID
| 항목 | 내용 |
|---|---|
| 설명 | Consumer 구독·내부 Producer(cache-invalidation 등) 브로커 연결 |
| 사용처 | server/consumer/.../integrations/kafka/ |
OpenAI
OPENAI_API_KEY
| 항목 | 내용 |
|---|---|
| 설명 | GPT Chat Completions·Embedding·Batch API 인증 |
| 사용처 | server/consumer/.../integrations/openai/ |
OPENAI_CHAT_MODEL
| 항목 | 내용 |
|---|---|
| 설명 | 챗봇 Function Calling 모델 |
| 사용처 | ProcessChatHandler |
OPENAI_EMBEDDING_MODEL
| 항목 | 내용 |
|---|---|
| 설명 | search_recipes 질의 임베딩 + recipe ingestion persist 시 RecipeEmbedding 업서트 |
| 사용처 | integrations/openai/openai.service.ts, recipe-ingestion-embed-submit/integrations/recipe-embedding-document.integration.ts, recipe-ingestion-embed-retrieve/services/embed-retrieve.service.ts, SearchRecipesHandler |
OPENAI_BATCH_MODEL
| 항목 | 내용 |
|---|---|
| 설명 | recipe ingestion submit 배치 변환 |
| 사용처 | recipe-ingestion-parse-submit job |
OpenAI 변수는 챗봇, 레시피 수집, 레시피 임베딩 문서에서 사용처를 확인할 수 있습니다.
공공데이터 (레시피 수집)
PUBLIC_DATA_API_KEY
| 항목 | 내용 |
|---|---|
| 설명 | 식약처 조리식품 레시피 DB API 키 |
| 사용처 | recipe-ingestion-fetch job |
관측성
METRICS_ENABLED / METRICS_PORT
| 항목 | 내용 |
|---|---|
| 설명 | Prometheus /metrics 노출 여부와 포트 |
| 패턴 | METRICS_ENABLED=true일 때 METRICS_PORT 필수 (예: 9101) |
| 사용처 | server/consumer/.../metrics-exporter.service.ts |
SLOW_QUERY_THRESHOLD_MS
| 항목 | 내용 |
|---|---|
| 설명 | Prisma/Mongoose 슬로우 쿼리 감지 임계값(ms) |
| 예시 | 500 |
| 패턴 | METRICS_ENABLED=true일 때 필수. 양의 정수 |
| 사용처 | @mealio/shared observability.config.ts |
PUSHGATEWAY_URL
| 항목 | 내용 |
|---|---|
| 설명 | recipe-ingestion CLI batch job 종료 시 Prometheus 메트릭 push 대상 (optional) |
| 예시 (호스트 CLI) | http://localhost:9091 |
| 예시 (Compose 내부) | http://pushgateway:9091 |
| 사용처 | server/consumer/.../metrics-push.ts |
| 패턴 | 미설정 시 push skip — CLI job 동작에는 영향 없음. METRICS_ENABLED=true일 때만 push |
SENTRY_ENABLED / SENTRY_DSN_CONSUMER
| 항목 | 내용 |
|---|---|
| 설명 | Consumer 프로세스 Sentry 에러 리포팅 |
| 패턴 | SENTRY_ENABLED=true 이고 DSN이 있을 때만 활성화 |
| 사용처 | @mealio/shared sentry.config.ts |