본문 바로가기
카테고리 없음

Docker Compose로 복잡한 개발환경 구성하는 방법

by 테크쓰기 2025. 6. 19.

개발 프로젝트가 커질수록 단순한 로컬 환경으로는 전체 시스템을 재현하기가 어렵습니다. 특히 백엔드, 프론트엔드, 데이터베이스, 캐시 서버 등 여러 서비스를 동시에 실행해야 하는 경우, 개발환경 구성은 더욱 복잡해지죠. 이런 문제를 해결해주는 도구가 바로 Docker Compose입니다. 이 글에서는 Docker Compose를 사용해 복잡한 개발환경을 효율적으로 구성하는 방법을 단계별로 소개합니다.

Docker Compose란 무엇인가?

Docker Compose는 여러 개의 컨테이너 서비스를 정의하고 동시에 실행할 수 있도록 돕는 도구입니다. 개발자가 모든 서비스를 수동으로 설정하고 실행하는 수고를 덜어주며, 하나의 설정 파일(docker-compose.yml)로 전체 환경을 관리할 수 있게 합니다.

주요 장점

  • 모든 서비스를 하나의 파일로 정의
  • 명령어 한 줄로 전체 서비스 시작/종료 가능
  • 컨테이너 간 네트워크 자동 구성
  • 환경 설정을 팀원 간 공유 가능

복잡한 환경 예시: 웹 애플리케이션 스택

다중 서비스 구성

예를 들어 다음과 같은 구성의 애플리케이션이 있다고 가정해 봅시다:

  • Node.js 백엔드 API 서버
  • React 기반 프론트엔드 애플리케이션
  • PostgreSQL 데이터베이스
  • Redis 캐시 서버
  • NGINX 리버스 프록시 서버

기본 Compose 예시

version: '3.9'
services:
  backend:
    build: ./backend
    ports:
      - "4000:4000"
    environment:
      - NODE_ENV=development
    depends_on:
      - db
      - redis

  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: appdb
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:alpine

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - frontend

volumes:
  pgdata:

실무 적용을 위한 고급 설정 팁

복잡한 환경에서 Compose를 더욱 효율적으로 활용하려면 몇 가지 고급 기능을 함께 사용하는 것이 좋습니다.

1. .env 파일 사용

환경 변수는 코드와 분리해 관리하는 것이 좋습니다. .env 파일에 데이터베이스 비밀번호, 포트 정보 등을 저장하고 Compose 파일에서 불러올 수 있습니다.

2. 헬스 체크 설정

서비스 간 의존성이 있는 경우, depends_on 외에도 헬스 체크 기능을 사용하면 더 안정적인 시작 순서를 보장할 수 있습니다.

3. 데이터 유지 관리

데이터베이스나 Redis 등의 서비스는 Docker 볼륨을 통해 데이터를 보존할 수 있도록 설정해야 합니다. 이를 통해 컨테이너 재시작 시에도 데이터가 유지됩니다.

4. 개발/운영 환경 분리

docker-compose.override.yml 파일을 사용하면 개발과 운영 환경에 따라 구성 파일을 분리해 관리할 수 있습니다.

디버깅 및 컨테이너 관리 팁

유용한 명령어

  • docker-compose logs -f [서비스명]: 실시간 로그 확인
  • docker-compose ps: 현재 실행 중인 컨테이너 상태 확인
  • docker exec -it [컨테이너명] bash: 컨테이너 내부 진입
  • docker-compose down -v: 컨테이너 및 볼륨 전체 정리

이 외에도 --build, --remove-orphans 등의 옵션을 활용하면 보다 유연하게 환경을 제어할 수 있습니다.

마무리: Compose로 환경 구성 자동화하기

Docker Compose는 복잡한 개발환경을 간단하고 일관되게 설정할 수 있는 강력한 도구입니다. 명령어 한 줄로 전체 스택을 시작하거나 종료할 수 있어, 초기 설정은 물론 유지 관리에도 큰 도움이 됩니다.

처음에는 조금 복잡하게 느껴질 수 있지만, 익숙해지면 개발 속도와 품질 모두에서 큰 향상을 경험할 수 있습니다. 여러분의 프로젝트에도 적용해 보세요. 로컬 환경에서의 생산성을 극대화하는 데 큰 도움이 될 것입니다.