반응형
🎯 왜 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 파이프라인에 최종 이미지 사용 가능 |
반응형
'CICD' 카테고리의 다른 글
실제 운영환경에 가까운 nginx.conf 예제 (0) | 2025.04.02 |
---|---|
Nginx 지시자(directive) 기초 분석 예제!! (0) | 2025.04.02 |
dockerfile과 docker-compose 비교 와 예제코드 (0) | 2025.04.02 |
jenkins 설치(우분투) (0) | 2022.08.16 |