본문으로 건너뛰기

환경 변수

이 문서로 해결할 질문

  • NestJS producer에 필요한 환경 변수는 무엇인가요?
  • OAuth·JWT·DB·Kafka 변수는 어디서 검증·사용되나요?
  • client·인프라 env와 어떻게 맞춰야 하나요?

개요

Producer는 NestJS REST API이며, env 파일은 호스트용 server/producer/.env.local, Docker용 server/producer/.env.docker.local을 사용합니다.

cp server/producer/.env.example server/producer/.env.local

기본 포트는 3000입니다. 부팅 시 server/producer/.../env.validation.ts의 Joi 스키마로 전 변수를 필수 검증하며, 실패 시 프로세스가 종료됩니다.

POSTGRESQL_URL, MONGODB_URL, REDIS_URL, KAFKA_BROKERSconsumer 환경 변수동일한 연결 정보를 사용합니다. 호스트명만 환경에 맞게 바꿉니다.

Docker Compose

DOCKERHUB_USERNAME

항목내용
설명Docker Hub 계정명. Compose image 필드 ${DOCKERHUB_USERNAME}/mealio-producer:latest 치환에 사용
예시your-dockerhub-username
사용처docker/producer/compose.yml services.producer.image
패턴Compose가 image 태그를 해석하거나 Docker Hub에 Push

MEMORY_LIMIT

항목내용
설명producer 컨테이너 메모리 limit (deploy.resources.limits.memory)
예시768M
사용처docker/producer/compose.yml

공통

APP_ENV

항목내용
설명런타임 환경 구분
허용 값local, development, production, test
사용처Kafka 토픽 자동 생성 여부, Sentry 환경 태그 등

PORT

항목내용
설명HTTP API 및 /metrics 노출 포트
예시3000
사용처server/producer/.../main.ts

인증

JWT_SECRET

항목내용
설명Access Token 서명 비밀키
패턴비어 있으면 안 됨
사용처server/producer/.../auth.service.ts

OAUTH_CALLBACK_BASE_URL

항목내용
설명OAuth Provider에 등록하는 Redirect URI 베이스 (Producer 호스트)
예시http://localhost:3000
사용처Passport 전략·Provider 콜백 URL 조합

FRONTEND_APP_BASE_URL

항목내용
설명OAuth 성공·실패 후 리다이렉트 대상 (Next.js client)
예시http://localhost:4000
사용처server/producer/.../auth.service.ts, CORS origin (main.ts)

OAuth 성공·실패 경로(/oauth/callback, /oauth/error)는 env가 아니라 server/producer/.../auth.constants.ts 상수로 정의됩니다.

*_CLIENT_ID / *_CLIENT_SECRET

  • GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET
  • KAKAO_CLIENT_ID / KAKAO_CLIENT_SECRET
  • NAVER_CLIENT_ID / NAVER_CLIENT_SECRET
항목내용
설명소셜 로그인 Provider 자격 증명
패턴비어 있으면 안 됨
사용처server/producer/.../*.strategy.ts

producer 인증을 참고하세요.

데이터·메시징

POSTGRESQL_URL

항목내용
설명Prisma(RDB) 연결 문자열
사용처User, Recipe, Ingredient, 추천 원본 테이블

MONGODB_URL

항목내용
설명Mongoose(NoSQL) 연결 문자열
사용처Inventory, EventLog, ChatbotLog, ChatbotConversation

REDIS_URL

항목내용
설명Cache-Aside, rate limit, refresh 세션 캐시
예시 (로컬)redis://:devpassword@localhost:6379
예시 (Compose 앱)redis://:devpassword@redis:6379
사용처server/producer/.../cache/, rate-limit.middleware.ts

KAFKA_BROKERS / KAFKA_CLIENT_ID

항목내용
설명Kafka 브로커 목록·클라이언트 ID
예시localhost:9092, mealio-producer
사용처server/producer/.../kafka/producer.service.ts

관측성

METRICS_ENABLED / METRICS_PORT

항목내용
설명Prometheus /metrics 노출 여부·전용 HTTP 포트
허용 값METRICS_ENABLED: true, false, 1, 0
패턴METRICS_ENABLED=true일 때 METRICS_PORT 필수 (예: 9100)
사용처server/producer/.../metrics-exporter.service.ts

SLOW_QUERY_THRESHOLD_MS

항목내용
설명Prisma/Mongoose 슬로우 쿼리 감지 임계값(ms)
예시500
패턴METRICS_ENABLED=true일 때 필수. 양의 정수
사용처server/producer/.../slow-query.interceptor.ts, @mealio/shared observability.config.ts

SENTRY_ENABLED / SENTRY_DSN_PRODUCER

항목내용
설명Sentry 활성화·Producer DSN
패턴SENTRY_ENABLED=true 이고 DSN이 있을 때만 initSentry 활성화
사용처server/producer/.../main.ts, @mealio/shared sentry.config.ts

INTERNAL_API_SECRET

항목내용
설명Next.js SSR·빌드 등 내부 API 트래픽의 별도 레이트 리밋 인증 시크릿
예시임의의 긴 랜덤 문자열 (client INTERNAL_API_SECRET과 동일)
사용처server/producer/.../rate-limit.middleware.ts — 요청 헤더 X-Internal-Api-Secret과 timing-safe 비교 후 내부 전용 윈도우·한도 적용
패턴client SSR·빌드 env와 동일 값을 유지합니다.

관련 문서