OPEN HYPER STEP
← 목록으로 (stack-analysis)
STACK-ANALYSIS · 54 / 90
stack-analysis
CHAPTER 54 / 90
읽기 약 2
FUNCTION

Docker Compose: 로컬 개발 환경


핵심 개념

Docker Compose·hot reload·DB·Redis·환경 변수 — 팀 onboarding 5분.

본문

기본 docker-compose.yml

YAML📋 코드 (60줄)
# docker-compose.yml
version: '3.9'

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: app
      POSTGRES_DB: app_dev
    ports:
      - '5432:5432'
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U app']
      interval: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    ports:
      - '6379:6379'
    volumes:
      - redis_data:/data

  api:
    build:
      context: .
      dockerfile: Dockerfile.dev
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
    environment:
      DATABASE_URL: postgresql://app:app@postgres:5432/app_dev
      REDIS_URL: redis://redis:6379
      NODE_ENV: development
    ports:
      - '3000:3000'
    volumes:
      - ./src:/app/src
      - ./package.json:/app/package.json
      - /app/node_modules
    command: pnpm dev

  mailhog:
    image: mailhog/mailhog
    ports:
      - '1025:1025'  # SMTP
      - '8025:8025'  # Web UI

volumes:
  postgres_data:
  redis_data:

Dockerfile (개발용)

DOCKERFILE📋 코드 (17줄)
# Dockerfile.dev
FROM node:20-alpine

WORKDIR /app

# pnpm 설치
RUN corepack enable && corepack prepare pnpm@latest --activate

# 의존성 (캐시 최적화)
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile

# 소스 (volume mount로 hot reload)
COPY . .

EXPOSE 3000
CMD ["pnpm", "dev"]

명령어

BASH📋 코드 (15줄)
# 시작
docker compose up -d

# 로그
docker compose logs -f api

# 특정 서비스 재시작
docker compose restart api

# 컨테이너 진입
docker compose exec api sh
docker compose exec postgres psql -U app -d app_dev

# 정리 (볼륨 포함)
docker compose down -v

멀티 환경 (override)

YAML📋 코드 (19줄)
# docker-compose.yml — 기본
# docker-compose.override.yml — 로컬 (자동 적용)

services:
  api:
    environment:
      DEBUG: '*'
    volumes:
      - ./src:/app/src  # 로컬만 hot reload

# docker-compose.prod.yml — 프로덕션
services:
  api:
    image: myapp:latest
    restart: always
    deploy:
      resources:
        limits:
          memory: 512M
BASH📋 코드 (2줄)
# 프로덕션 모드
docker compose -f docker-compose.yml -f docker-compose.prod.yml up

프로덕션 Dockerfile (multi-stage)

DOCKERFILE📋 코드 (31줄)
# Dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
RUN corepack enable
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile --production


FROM node:20-alpine AS builder
WORKDIR /app
RUN corepack enable
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build


FROM node:20-alpine AS runner
WORKDIR /app

ENV NODE_ENV=production
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001
USER nextjs

COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./

EXPOSE 3000
CMD ["node", "server.js"]

헬스체크

YAML📋 코드 (8줄)
services:
  api:
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
TYPESCRIPT📋 코드 (10줄)
// /health 엔드포인트
app.get('/health', async (req, res) => {
  try {
    await db.$queryRaw`SELECT 1`;
    await redis.ping();
    res.json({ status: 'ok', timestamp: new Date() });
  } catch (err) {
    res.status(503).json({ status: 'unhealthy', error: err.message });
  }
});

.dockerignore

📋 코드 (11줄)
node_modules
.next
.git
.env*
!.env.example
*.log
coverage
.vscode
.idea
dist
README.md

다음 챕터

CH.55 "CI/CD: GitHub Actions 실전".


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 코드의 Docker Compose 부분을 분석해서
실전 분석 + 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

Docker Compose 관련 인기 라이브러리/패턴 5개를
비교 분석해서 패턴 추출를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 프로젝트 전체에서 Docker Compose
최적화 가능 위치를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 백엔드 시장의
Docker Compose 트렌드를 솔직히 알려줘.

⭐ 이것만 기억하세요
Docker Compose: 로컬 개발 환경 이 3가지만 확실히 잡으세요
1.Docker Compose = 팀 onboarding 5분 — DB·Redis·이메일까지 한 번에
2.depends_on + healthcheck로 시작 순서 보장
3.프로덕션 Dockerfile은 multi-stage — 이미지 크기 1/10


공유하기
진행도 54 / 90