✅ 1. .env 파일 구조

docker-compose자동으로 .env 파일을 읽어서 환경 변수로 사용합니다.

환경을 나누기 위해 보통 이렇게 관리합니다.

.env              # 공통 환경 변수
.env.development  # 개발 전용 환경 변수
.env.production   # 운영 전용 환경 변수


🏗️ 2. 공통 .env (모든 환경에서 사용)

# 공통 설정
JWT_SECRET=docker_secret
JWT_REFRESH_SECRET=docker_secret2
MONGO_DB_NAME=my-todo

✅ 공통 값은 모든 환경에서 동일


🛠️ 3. 개발용 .env.development

# 개발 환경 전용
CLIENT_URL=http://localhost:5173
MONGODB_URI=mongodb://my-mongo-db:27017/my-todo
PORT=3001


🚀 4. 운영용 .env.production

# 운영 환경 전용
CLIENT_URL=https://todo.example.com
MONGODB_URI=mongodb://my-mongo-db:27017/my-todo
PORT=3001


🖇️ 5. docker-compose.yml (공통)

공통 설정에서 환경 변수 파일을 명시하지 않고, 서비스에서 ${변수명}으로 참조합니다.

version: "3.9"

services:
  my-mongo-db:
    image: mongo
    restart: always
    volumes:
      - mongo-data:/data/db
    networks:
      - my-net

  my-todo-express:
    build:
      context: ./my-todo-express
      dockerfile: Dockerfile
    networks:
      - my-net
    depends_on:
      - my-mongo-db
    environment:
      - PORT=${PORT}
      - CLIENT_URL=${CLIENT_URL}
      - MONGODB_URI=${MONGODB_URI}
      - JWT_SECRET=${JWT_SECRET}
      - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET}

  my-todo-react:
    build:
      context: ./my-todo-react
      dockerfile: Dockerfile
    networks:
      - my-net
    depends_on:
      - my-todo-express

networks:
  my-net:

volumes:
  mongo-data:

환경 변수는 .env 파일에서 자동으로 로드됨