TechFeedTechFeed
Cloud & DevOps

Docker Compose vs Kubernetes — 실무에서 언제 무엇을 쓸까

Docker Compose와 Kubernetes의 핵심 차이, 적합한 상황, 마이그레이션 경로, 관리형 K8s 비교. 2026년 3월 기준.

Docker Compose와 Kubernetes는 컨테이너 오케스트레이션의 양 극단이다. Compose는 로컬 개발과 소규모 배포에서 빠르고 단순하게 동작하고, Kubernetes는 프로덕션 규모의 복잡한 워크로드를 자동화한다. 이 글은 두 도구의 실질적 차이를 비교하고, 팀 규모·서비스 규모·운영 체계에 따라 언제 무엇을 선택해야 하는지 실무 기준을 제시한다.

이 글이 필요한 사람
  • 로컬 개발은 Compose로 하는데, 프로덕션 배포 방식이 고민인 백엔드/DevOps 엔지니어
  • 소규모 팀에서 Kubernetes 도입 여부를 검토 중인 CTO·테크 리드
  • Compose로 운영 중인 서비스를 Kubernetes로 전환하려는 시니어 개발자
  • EKS·GKE·AKS 중 관리형 Kubernetes 선택에서 기준이 필요한 인프라 담당자

기준일: 2026년 3월 | Docker Compose v2 / Kubernetes v1.31 기준

Docker Compose와 Kubernetes의 핵심 차이

두 도구는 "컨테이너를 실행한다"는 공통점을 제외하면 설계 철학이 완전히 다르다. Compose는 단일 호스트에서 여러 컨테이너를 정의하고 함께 띄우는 도구다. Kubernetes는 복수의 노드(서버)로 구성된 클러스터 위에서 컨테이너를 스케줄링·자동 복구·스케일링하는 플랫폼이다.

항목Docker ComposeKubernetes
실행 단위단일 호스트멀티 노드 클러스터
설정 파일docker-compose.ymlDeployment, Service, ConfigMap 등 다수 YAML
오토스케일링미지원 (수동 scale 명령)HPA / VPA / KEDA 지원
자동 복구restart 정책 (단순)Pod 자동 재시작·재배치
네트워크브릿지 네트워크 (단순)CNI 플러그인, Service/Ingress 분리
롤링 업데이트미지원 (재시작)RollingUpdate / Canary / Blue-Green
시크릿 관리.env 파일 또는 Docker SecretKubernetes Secret + 외부 볼트 연동
학습 비용낮음 (30분 이내 시작 가능)높음 (수 주~수 개월 실전 적응)
운영 비용서버 1대 비용컨트롤 플레인 + 워커 노드 비용

핵심 차이를 한 문장으로 정리하면: Compose는 "이 서비스들을 지금 여기서 함께 실행해 줘"이고, Kubernetes는 "이 서비스들을 언제나, 어디서나, 원하는 수만큼 안정적으로 실행해 줘"다. 선택 기준은 "지금 당장 필요한 복잡도가 어느 수준인가"에서 시작해야 한다.

Docker Compose가 적합한 상황

Docker Compose가 진짜 빛을 발하는 영역은 명확하다. 로컬 개발 환경, 소규모 팀의 스테이징 서버, 단일 서버로 충분한 내부 도구가 그 무대다.

Compose가 적합한 케이스

  • 로컬 개발 환경 표준화: 팀 전체가 동일한 docker-compose.yml을 실행해 DB, 캐시, 백엔드, 프론트를 한 번에 띄운다. docker compose up -d 한 줄로 환경 준비가 완료된다.
  • CI 파이프라인 내 통합 테스트: GitHub Actions, GitLab CI에서 의존 서비스(PostgreSQL, Redis, Elasticsearch 등)를 Compose로 올리고 테스트를 실행한 뒤 폐기하는 패턴이 일반적이다.
  • 단일 서버 소규모 서비스: 트래픽이 월 수만~수십만 요청이고, 다운타임 몇 분이 비즈니스에 치명적이지 않다면 Compose + 단일 VPS로 충분하다. Nginx, API 서버, DB, 모니터링 스택을 Compose 하나로 관리할 수 있다.
  • 내부 도구 / 사이드 프로젝트: Grafana, Metabase, n8n, Gitea 같은 내부 도구는 Kubernetes 클러스터 비용을 쓸 이유가 없다.
  • 사용 인원 10명 이하 스타트업 초기: 아직 제품-시장 적합성(PMF)을 찾는 단계라면 인프라 복잡도를 최소화하고 기능 개발에 집중하는 것이 맞다.

Compose의 실질적 한계

한계 항목구체적 문제
단일 장애점호스트 서버가 다운되면 모든 서비스가 함께 다운된다
수평 확장 불가트래픽 급증 시 단순히 컨테이너 수를 늘려도 로드밸런서가 자동 연결되지 않는다
무중단 배포 없음업데이트 시 기존 컨테이너를 멈추고 새 컨테이너를 올리는 과정에 순단이 발생한다
멀티 호스트 불가Docker Swarm 없이는 여러 서버에 걸쳐 배포할 수 없다 (Swarm도 Kubernetes보다 기능 제한)
Docker Compose 로컬 개발 환경 구성 예시
Docker Compose는 로컬 개발, 테스트 환경, 소규모 서비스에서 빠르게 시작할 수 있다.

Kubernetes가 필요한 시점

Kubernetes를 도입하는 시점을 "서비스가 크면"이라고 모호하게 판단하는 팀이 많다. 실무에서는 아래 중 하나라도 해당되면 Kubernetes 전환을 적극 검토해야 한다.

Kubernetes 도입 트리거

  • 무중단 배포가 비즈니스 요구사항이 된 시점: SLA(서비스 수준 협약)에 99.9% 이상 가용성이 명시된다면, 롤링 업데이트·자동 롤백·헬스체크 기반 트래픽 전환이 필수다.
  • 자동 스케일링이 필요한 트래픽 패턴: 이벤트·할인 시즌 등 트래픽이 수십 배 급등하는 서비스는 HPA(Horizontal Pod Autoscaler)나 KEDA(이벤트 기반 오토스케일링)가 없으면 수동 대응이 불가능하다.
  • 마이크로서비스 아키텍처로 전환: 서비스가 5개 이상으로 쪼개지면 서비스 디스커버리, 트래픽 라우팅, 분산 트레이싱, 서킷 브레이커가 필요해지고, 이는 Kubernetes 생태계(Istio, Linkerd 등)와 함께 동작하도록 설계되어 있다.
  • 멀티 환경(dev/staging/prod) 격리 필요: Kubernetes Namespace로 환경별 격리, RBAC으로 권한 분리, Helm 차트로 환경별 값 주입이 표준화된다.
  • 개발팀 규모 20명 이상: 여러 팀이 동시에 다른 서비스를 배포할 때 충돌 없이 독립적으로 운영하려면 Kubernetes의 네임스페이스 격리와 GitOps(ArgoCD, Flux) 연동이 실질적인 답이다.

Kubernetes 도입 전 확인해야 할 비용

Kubernetes는 운영 비용이 실재한다. 도입 전 현실적으로 계산해야 하는 항목은 다음과 같다.

비용 항목설명
학습 비용Pod, Deployment, Service, Ingress, ConfigMap, Secret, HPA, RBAC — 최소 개념만 익혀도 수 주 소요
인프라 비용관리형(EKS/GKE/AKS) 기준 컨트롤 플레인 월 $70~150 + 워커 노드 비용
운영 인력전담 DevOps/SRE 없이 Kubernetes를 안정적으로 운영하기는 어렵다
디버깅 복잡도분산 환경 특성상 장애 원인 추적이 단일 서버 대비 수배 복잡해진다

결론: Kubernetes는 "언젠가 필요할 것 같아서"가 아니라 위 트리거가 실제로 발생했을 때 전환해야 한다. 너무 일찍 도입하면 인프라 관리에 에너지를 빼앗겨 제품 개발 속도가 떨어진다.

Compose에서 Kubernetes로 전환하기

Compose로 운영 중인 서비스를 Kubernetes로 전환할 때 가장 많이 쓰는 경로는 두 가지다. Kompose를 이용한 자동 변환과, 처음부터 Helm 차트로 재작성하는 방법이다.

방법 1: Kompose 자동 변환

Komposedocker-compose.yml을 Kubernetes 매니페스트로 변환하는 공식 도구다. 완전한 변환은 아니지만 시작점으로 유용하다.

# Kompose 설치 (macOS)
brew install kompose

# 변환 실행
kompose convert -f docker-compose.yml

# 생성된 매니페스트 확인
ls -la
# web-deployment.yaml
# web-service.yaml
# db-deployment.yaml
# db-persistentvolumeclaim.yaml

# 클러스터에 적용
kubectl apply -f .

Kompose 변환의 한계: depends_on은 initContainer로 부분 변환되고, 볼륨 마운트 설정은 수동 검토가 필요하다. 네트워크 설정과 환경 변수는 대부분 올바르게 변환된다.

방법 2: 단계적 마이그레이션 전략

프로덕션 서비스라면 한 번에 모든 것을 전환하는 빅뱅 방식보다 단계적 전환이 안전하다.

  1. 스테이트리스 서비스 먼저: 데이터베이스 없이 실행되는 API 서버, 프론트엔드 서버를 먼저 Kubernetes로 옮긴다. DB는 당분간 Compose 또는 관리형 DB 서비스(RDS, Cloud SQL)로 유지한다.
  2. CI/CD 파이프라인 통합: GitHub Actions → ECR/GCR 이미지 빌드 → kubectl apply 또는 ArgoCD 동기화로 배포 파이프라인을 구성한다.
  3. ConfigMap/Secret 전환: Compose의 .env 파일을 Kubernetes Secret과 ConfigMap으로 이전한다. 외부 시크릿 관리자(AWS Secrets Manager, HashiCorp Vault)와의 연동도 이 단계에서 구성한다.
  4. Ingress 설정: Nginx Ingress Controller 또는 클라우드 로드밸런서를 통해 트래픽 라우팅을 설정한다. 도메인 기반 라우팅, TLS 인증서(cert-manager) 자동화를 여기서 구성한다.
  5. 스테이트풀 서비스 전환: PostgreSQL, Redis 등 상태를 가진 서비스는 StatefulSet + PersistentVolume으로 전환하거나, 관리형 서비스로 외부화한다. 후자가 운영 부담이 훨씬 적다.

전환 시 자주 발생하는 문제

문제원인해결
CrashLoopBackOff환경 변수 누락 또는 헬스체크 실패kubectl describe pod로 이벤트 확인, livenessProbe 설정 검토
서비스 간 DNS 불일치Compose 서비스명과 K8s Service명 차이K8s에서는 서비스명.네임스페이스.svc.cluster.local 형식 사용
볼륨 데이터 유실PVC 설정 오류 또는 노드 재배치StorageClass를 Retain 정책으로 설정, 백업 먼저 확보 후 전환
Docker Compose에서 Kubernetes 마이그레이션 경로
Kompose 도구로 docker-compose.yml을 Kubernetes 매니페스트로 변환할 수 있다.

관리형 Kubernetes 비교 (EKS, GKE, AKS)

Kubernetes를 직접 구축(kubeadm, k3s)하는 팀은 줄고, 클라우드 관리형 서비스를 사용하는 팀이 늘었다. EKS(AWS), GKE(Google Cloud), AKS(Azure) 세 가지 주요 선택지를 실무 기준으로 비교한다.

항목EKS (AWS)GKE (Google)AKS (Azure)
컨트롤 플레인 비용$0.10/hr (~$73/월)Autopilot: 사용량 기반 / Standard: $0.10/hr무료 (워커 노드만 과금)
운영 편의성중간 (설정 많음)높음 (Autopilot 모드)중간
기존 인프라 연동AWS 서비스 연동 최강 (RDS, S3, IAM)Google 서비스 연동 (BigQuery, Cloud SQL)Azure 서비스 연동 (AAD, CosmosDB)
오토스케일링Karpenter (노드 프로비저닝 빠름)GKE Autopilot (완전 자동)VMSS 기반 오토스케일러
네트워킹VPC CNI, AWS Load Balancer ControllerVPC-native, Cloud Load BalancingAzure CNI, Application Gateway Ingress
K8s 버전 지원최신보다 1~2 버전 느림가장 빠른 최신 버전 지원중간
추천 팀이미 AWS 기반 팀K8s 운영 경험 적은 팀 / ML 워크로드Microsoft 365 / Azure AD 기반 조직

소규모 팀을 위한 대안: k3s와 Lightweight Kubernetes

관리형 Kubernetes의 비용이 부담스러운 팀에게는 k3s가 현실적인 대안이다. Rancher Labs(SUSE)가 개발한 경량 Kubernetes 배포판으로, 단일 서버(1GB RAM)에서도 동작한다. 소규모 프로덕션, 엣지 컴퓨팅, 온프레미스 환경에서 활발히 사용된다.

  • 설치: curl -sfL https://get.k3s.io | sh - 한 줄로 완료
  • 기본 포함: Traefik Ingress, Flannel CNI, SQLite(소규모) 또는 etcd
  • 주의: 고가용성(HA) 구성은 별도 etcd 클러스터 필요

선택 의사결정 가이드

지금까지 내용을 바탕으로 팀 상황에 맞는 선택 기준을 정리한다. 아래 표를 순서대로 점검하면 된다.

상황권장 도구이유
개발자 1~3명, 사이드 프로젝트Compose인프라보다 기능 개발에 집중, 비용 최소화
팀 5명 이하, B2B SaaS 초기Compose + 관리형 DBDB는 RDS/Cloud SQL 위임, 앱만 Compose로 관리
트래픽 급증 이벤트가 예정됨관리형 K8s (GKE Autopilot)오토스케일링 없이는 대응 불가
마이크로서비스 5개 이상Kubernetes서비스 디스커버리, 트래픽 라우팅, 독립 배포 필수
SLA 99.9% 이상 요구Kubernetes롤링 업데이트, 자동 복구 없이는 달성 불가
온프레미스, 비용 민감k3sK8s 기능을 저렴하게, 단일 서버도 가능
CI 통합 테스트 환경Compose빠른 기동/폐기 사이클에 최적화
AWS 기반 + DevOps 팀 있음EKS + Karpenter기존 AWS IAM, VPC, RDS 연동 최적

실무 판단 기준 3가지

  1. 지금 당장 Kubernetes 없이 해결할 수 없는 문제가 있는가? 없다면 Compose로 시작하고, 명확한 트리거가 생겼을 때 전환하라.
  2. Kubernetes를 운영할 인력이 있는가? DevOps/SRE가 없는 팀이라면 GKE Autopilot처럼 운영 부담을 클라우드에 최대한 위임하는 방향을 선택하라.
  3. 데이터베이스를 Kubernetes 안에 넣을 것인가? 가능하면 관리형 DB 서비스를 쓰고 애플리케이션 레이어만 Kubernetes로 관리하는 것이 운영 복잡도를 크게 낮춘다.
요약

Compose로 시작해서 Kubernetes로 성장하는 경로가 대부분의 팀에게 맞다. Kubernetes를 처음부터 도입하는 것이 맞는 상황은 이미 운영 팀과 명확한 스케일링 요구사항이 있을 때다. 도구는 팀의 현재 문제를 해결해야지, 미래의 문제를 위해 현재의 복잡도를 올리는 것은 피해야 한다.

DockerKubernetesDocker ComposeEKSGKEAKS컨테이너DevOps

관련 도구

관련 포스트

개발자를 위한 Docker 실전 가이드 20262026-02-19개발자가 알아야 할 Kubernetes 기초2026-02-21GitHub Actions CI/CD 실전 가이드2026-02-22서버리스 함수 비교 2026 — Vercel vs Cloudflare vs AWS Lambda2026-02-23