CICD

왜 dev/prod 환경을 분리해야 할까?

마시멜로를찾아서 2025. 4. 2. 14:38
반응형

🎯 왜 dev/prod 환경을 분리해야 할까?

항목개발 환경 (dev)운영 환경 (prod)
코드 변경 자주 변경, 테스트 위주 변경 최소화, 안정성 중시
로깅/디버깅 상세 로그, 리로드 기능 활성화 최소 로그, 보안 로그, 핫리로드 비활성화
외부 연동 로컬 DB, 모킹 서버 실제 DB, 외부 연동 시스템 사용
이미지 구성 bind-mount, 캐시 비활용 완전한 이미지 빌드, 멀티스테이지 빌드 활용
보안 민감 정보 노출 가능 환경변수로 암호화된 키, TLS, CORS 제약 등 적용

🧱 구조 설계 예시

my-app/
├── docker-compose.yml          # 공통 설정
├── docker-compose.dev.yml      # 개발 전용 override
├── docker-compose.prod.yml     # 운영 전용 override
├── Dockerfile
├── Dockerfile.prod             # 운영 빌드 전용 (최적화)
└── .env, .env.prod

📄 docker-compose.yml (공통 베이스)

version: "3.8"
services:
  app:
    image: my-app
    ports:
      - "3000:3000"
    environment:
      NODE_ENV: development
    depends_on:
      - db

  db:
    image: postgres:15
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: devpass

volumes:
  db_data:

🛠️ docker-compose.dev.yml

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app          # 코드 바인딩
      - /app/node_modules
    environment:
      NODE_ENV: development
    command: npm run start:dev

✅ 주요 포인트:

  • 로컬 코드 변경 반영 (volumes)
  • 디버깅, 핫리로드 가능
  • 개발자용 .env 사용

🚀 docker-compose.prod.yml

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.prod
    environment:
      NODE_ENV: production
    command: npm run start:prod
    restart: always

✅ 주요 포인트:

  • 정적 이미지 빌드
  • restart: always 설정
  • 운영용 .env.prod 연동 가능

🐳 Dockerfile vs Dockerfile.prod 예시

Dockerfile (dev 용):

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "start:dev"]

Dockerfile.prod (운영 최적화):

dockerfile
 
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app .
CMD ["npm", "run", "start:prod"]

▶️ 실행 방법

  • 개발 환경:
     
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build
  • 운영 환경:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up --build -d

 

  • 추가로 .env 파일 분리 관리도 권장:
# .env.dev
DATABASE_URL=postgres://devuser:devpass@db:5432/dev

✅ 정리 요약

 

항목개발  환경 (dev) 운영 환경 (prod)
Dockerfile 빠른 빌드, 볼륨 mount 멀티스테이지, 경량화
docker-compose docker-compose.dev.yml docker-compose.prod.yml
실행 방식 -f docker-compose.dev.yml -f docker-compose.prod.yml
보안/최적화 X (속도 우선) ✅ 보안, 로그, 성능, 재시작 정책 적용
CI/CD 통합 활용 개발 테스트용, 로컬 디버깅 CD 파이프라인에 최종 이미지 사용 가능
반응형