Docker가 왜 혁명이었는지 → Kubernetes가 어떻게 사실상 표준이 되었는지 → 서버리스가 해결한 것과 못 한 것 → 2026년 Wasm 서버리스 2.0과 플랫폼 엔지니어링 → 실무에서 어떤 조합을 선택해야 하는지. 15년차 인프라 엔지니어 관점에서 기술 선택의 기준까지 정리합니다.
🐳 Docker: "내 PC에서는 되는데?"의 종말
2013년, Docker가 처음 등장했을 때 개발자들의 반응은 두 가지였습니다. "이게 VM이랑 뭐가 다른 거야?"와 "세상에, 이게 되네?" 사이를 왔다 갔다 했죠.
저도 처음에는 반신반의했습니다. 당시 프로젝트에서 로컬과 스테이징 서버의 Java 버전 차이 때문에 3일을 날린 적이 있었거든요. 그런데 Dockerfile 하나로 "어디서든 동일한 환경"이 보장되니까, 그 순간 세계관이 바뀌었습니다.

Docker가 해결한 근본적 문제
Docker 이전의 배포 과정을 떠올려보세요. 서버에 SSH로 접속해서 패키지를 하나하나 설치하고, 환경변수를 맞추고, 라이브러리 버전 충돌을 잡고... 이 과정을 서버 10대에 반복해야 했습니다. 그 고통스러운 시절을 Docker가 근본적으로 끝냈어요.
1) 환경 일관성 — 개발, 테스트, 프로덕션 환경이 이미지 하나로 동일합니다. "내 PC에서는 되는데"라는 변명이 불가능해졌어요.
2) 경량 가상화 — 게스트 OS 없이 호스트 커널을 공유하므로, VM 대비 시작 시간이 수초 이내입니다. 메모리 사용량도 극적으로 줄었죠.
3) 재현 가능한 빌드 — Dockerfile이 인프라를 코드로 정의합니다. Git에 올려서 버전 관리하고, 코드 리뷰까지 가능해졌어요.
간단한 예시를 보면 Docker의 강력함이 체감됩니다. Node.js 앱 하나를 Docker화하는 과정이에요.
# Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
# 빌드 & 실행 — 이 두 줄이면 어디서든 동일하게 동작
docker build -t my-app .
docker run -p 3000:3000 my-app
이 Dockerfile이 있으면 맥북에서든, 우분투 서버에서든, AWS EC2에서든 동일한 앱이 동일하게 실행됩니다. 하나의 서비스를 하나의 컨테이너에 넣는 패턴이 자리 잡으면서, 자연스럽게 마이크로서비스 아키텍처도 대중화됐습니다.
그런데 컨테이너가 5개, 10개, 100개로 늘어나면 새로운 문제가 생깁니다. 누군가는 이 수백 개의 컨테이너를 관리해야 해요. 어떤 서버에 배치할지, 하나가 죽으면 어떻게 복구할지, 트래픽이 몰리면 어떻게 늘릴지... Docker 자체로는 이 문제를 풀 수 없었습니다.
Docker가 사라진 것은 아닙니다. OCI(Open Container Initiative) 표준의 기반이 되었고, 2026년에도 로컬 개발, CI/CD 파이프라인, 이미지 빌드의 표준 도구로 건재합니다. 프로덕션 오케스트레이션만 더 큰 도구들이 맡게 된 거죠.
☸️ Kubernetes: 컨테이너 오케스트레이션의 제왕
Docker Swarm, Apache Mesos, Kubernetes — 세 가지 선택지가 치열하게 경쟁하던 시기가 있었습니다. 결과는 Kubernetes의 압도적 승리였죠. 구글이 내부에서 15년간 운영하던 Borg 시스템의 경험을 오픈소스로 풀었다는 사실 자체가 이미 강력한 신뢰 기반이었습니다.
K8s의 핵심 개념 빠르게 짚기
이 네 가지만 이해해도 K8s의 80%는 파악한 겁니다. 나머지는 이 기본 위에 쌓이는 확장이에요.
K8s YAML 맛보기: Deployment 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3 # 항상 3개 Pod 유지
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:v2.1 # 이미지 버전만 바꾸면 롤링 업데이트
ports:
- containerPort: 3000
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
이 YAML 하나로 "my-app을 3개 복제본으로 실행하되, CPU 250m~500m, 메모리 256Mi~512Mi를 할당해"라고 선언합니다. K8s가 어떤 노드에 배치할지, 하나가 죽으면 어떻게 복구할지를 알아서 처리해요.
2026년, K8s는 어떻게 달라졌나
CNCF 최신 조사에 따르면, 전 세계 조직의 96%가 K8s를 프로덕션에서 사용하거나 평가 중입니다. 750만 명 이상의 개발자가 K8s 생태계에서 일하고 있어요. 하지만 2026년의 K8s는 2020년의 K8s와 상당히 다릅니다.
| 영역 | 2020년 | 2026년 |
|---|---|---|
| 주 워크로드 | 웹 마이크로서비스 | AI 파이프라인 + 에지 + 서버리스 + VM |
| GPU 지원 | 서드파티 플러그인 | 네이티브 DRA (K8s 1.35 베타) |
| 관찰성 | Prometheus + Grafana | OpenTelemetry 통합 표준 |
| 보안 | Pod Security Policies (deprecated) | Enhanced Pod Security Standards |
| 서버리스 통합 | Knative 초기 | KEDA 3.0 (80+ 이벤트소스, Scale-to-Zero) |
| 정체성 | 컨테이너 오케스트레이터 | 범용 컨트롤 플레인 |
가장 큰 변화는 K8s가 "컨테이너 오케스트레이터"에서 "범용 인프라 플랫폼"으로 진화했다는 점입니다. KubeVirt로 VM을, Knative로 서버리스를, Kubeflow로 ML 파이프라인을 관리합니다. 심지어 에지 디바이스까지 K8s로 관리하는 조직이 늘고 있어요.
GPU가 기본 하드웨어 패러다임이 되면서, K8s의 전통적인 "골든 시그널"(CPU 사용률, 메모리)이 바뀌고 있습니다. K8s 1.35에서 DRA(Dynamic Resource Allocation)가 베타로 승격되면서, GPU 스케줄링과 워크로드 할당이 프로토콜 수준에서 지원됩니다.
CNCF 조사에 따르면 K8s 사용자의 90%가 AI/ML 워크로드 증가를 예상하고 있어요. K8s가 LLM 학습, 추론 서빙의 기본 인프라가 된 셈이죠.
⚡ 서버리스: 인프라를 잊으라는 약속
2014년 AWS Lambda가 등장하면서 "서버를 관리하지 않고 코드만 올리면 된다"는 패러다임이 시작됐습니다. 이벤트가 발생하면 함수가 실행되고, 사용한 만큼만 비용을 내는 구조.
서버리스의 매력은 운영 부담이 극적으로 줄어든다는 것입니다. 서버 패치, 스케일링, 로드밸런싱을 클라우드 프로바이더가 전부 처리하니까 개발자는 비즈니스 로직에만 집중할 수 있죠.
서버리스가 해결하지 못한 문제들
콜드 스타트 — 유휴 상태에서 첫 요청 시 수백ms~수초의 지연이 발생합니다. 실시간성이 중요한 서비스에서는 치명적이에요.
벤더 종속 — AWS Lambda에 최적화한 코드를 Azure Functions로 옮기려면 상당한 리팩토링이 필요합니다. 트리거, 런타임, 설정이 모두 다르거든요.
장시간 실행 제약 — Lambda 기준 최대 15분. 대규모 데이터 처리나 모델 학습에는 부적합합니다.
숨겨진 비용 — 함수 실행 비용은 싸지만, API Gateway, NAT Gateway, CloudWatch 로깅 비용이 합산되면 월 3,000만 요청 이상에서 K8s보다 비싸질 수 있어요. 비용 함정 패턴: 1개월 차 $50 → 6개월 차 $800 → 12개월 차 $5,000.
2026년의 서버리스: Wasm이 게임을 바꿨다
여기서 흥미로운 전환이 일어났습니다. Wasm(WebAssembly) 기반 서버리스 2.0이 기존 서버리스의 최대 약점이었던 콜드 스타트를 사실상 제거했어요.
Wasm은 원래 브라우저용으로 설계된 바이너리 포맷이지만, 서버 사이드에서 돌리면 놀라운 일이 생깁니다. 시작 시간이 마이크로초 단위이고, 메모리 풋프린트가 극도로 작으며, 샌드박스 격리가 기본 내장이에요.
K8s 위에서 Wasm 모듈을 오케스트레이션하면 서버리스의 편의성과 컨테이너의 포터빌리티를 동시에 가져올 수 있습니다. 특히 에지 컴퓨팅에서 대역폭과 메모리가 제한된 환경에서 Wasm의 가치가 두드러집니다. Cloudflare Workers가 대표적인 Wasm 기반 에지 런타임이에요.
2024년에는 Kubernetes(포터블하지만 복잡)와 서버리스(단순하지만 벤더 종속) 중 하나를 골라야 했습니다. 2026년에는 Wasm 기반 서버리스가 포터빌리티와 단순함을 동시에 제공합니다.
KEDA 3.0도 주목할 만합니다. Kafka, RabbitMQ 등 80개 이상의 이벤트 소스를 지원하고, Scale-to-Zero 기능으로 유휴 비용을 완전히 제거할 수 있어요. K8s 위에서 서버리스 패턴을 구현하는 가장 실용적인 도구입니다.
🏗️ 플랫폼 엔지니어링: K8s를 숨기는 시대
현장에서 일어나는 또 다른 중요한 변화가 있습니다. 많은 조직이 K8s를 사용하면서도 개발자에게 K8s를 직접 노출하지 않는 방향으로 가고 있어요.
이유는 단순합니다. K8s가 아무리 강력해도, YAML 수십 개를 관리하면서 네트워크 정책, 시크릿 관리, 리소스 쿼타까지 신경 쓰는 건 개발자의 본업이 아니거든요. K8s 전문가를 고용해야 하고, 그 전문가가 풀어야 할 문제는 끝없이 늘어납니다.
Backstage(Spotify 오픈소스), Humanitec, Kratix 같은 플랫폼 엔지니어링 도구들이 급성장하고 있습니다. 이 도구들은 K8s의 복잡도를 추상화해서 개발자에게는 간단한 인터페이스만 노출해요.
개발자: "이 서비스를 배포해줘" → 플랫폼이 Deployment, Service, Ingress, HPA, 모니터링 설정을 자동 생성. 개발자는 YAML 한 줄도 쓸 필요가 없습니다.
아이러니하게도 K8s 자체가 이 플랫폼 뒤에 숨겨져 있는 경우가 많아요. 어떤 조직에서는 K8s 대신 더 단순한 오케스트레이션 레이어로 대체되기도 하죠.
트렌드는 명확합니다. "개발자에게는 플랫폼을, 플랫폼 팀에게는 K8s를." 모든 개발자가 K8s를 알 필요는 없습니다. 플랫폼 팀이 그 복잡도를 흡수하면 됩니다.
🤔 실무 의사결정 가이드
정답은 "하나만 고르지 말라"입니다. 2026년의 성숙한 팀들은 워크로드 특성에 따라 기술을 혼합합니다.
| 상황 | 추천 기술 | 이유 |
|---|---|---|
| 이벤트 기반, 간헐적 트래픽 | 서버리스 (Lambda, Cloud Run) | Scale-to-Zero, 유휴 시 0원 |
| 상태 유지, 고부하 서비스 | Kubernetes | 세밀한 리소스 제어, GPU 스케줄링 |
| 에지, 초저지연 요구 | Wasm + K8s | 마이크로초 시작, 초경량 런타임 |
| 소규모 팀, 빠른 출시 | Cloud Run / ECS Fargate | K8s 복잡도 없이 컨테이너 이점 |
| AI/ML 파이프라인 | K8s + Kubeflow | GPU DRA, 학습/추론 파이프라인 |
| 글루 코드, 자동화 | 서버리스 함수 | S3 이벤트 → 처리 같은 단순 플로우 |
러닝커브도 고려하세요
| 기술 | 생산적 수준까지 | 전제 지식 |
|---|---|---|
| Docker | 1~2주 | 리눅스 기본, CLI |
| Docker Compose | 2~3일 | Docker, YAML |
| Kubernetes | 2~3개월 | Docker, 네트워크, 리눅스 시스템 |
| 서버리스 (Lambda 등) | 1~2주 | 해당 클라우드 기본 |
| Cloud Run / Fargate | 3~5일 | Docker, 해당 클라우드 기본 |
| Wasm 서버리스 | 2~4주 | Wasm 개념, Rust 또는 Go |
기술 선택의 궁극적 기준은 "가장 새로운 것"이 아니라 "우리 팀이 밤에 편히 잘 수 있는 것"입니다. K8s가 아무리 강력해도 운영할 인력이 없으면 Cloud Run이 낫고, 서버리스가 아무리 편해도 월 수천만 요청이면 K8s가 낫습니다. 워크로드의 특성, 팀의 역량, 비용 구조를 삼각 검증하세요.
마무리: 기술은 진화하고, 원칙은 남는다
Docker(2013) → Kubernetes(2014) → 서버리스(2014) → Wasm 서버리스 2.0(2025~2026)으로 이어지는 흐름의 본질은 하나입니다. "개발자가 인프라 대신 비즈니스 로직에 집중할 수 있도록."
Docker가 환경 차이를 없앤 것, K8s가 오케스트레이션을 자동화한 것, 서버리스가 인프라를 추상화한 것, 플랫폼 엔지니어링이 개발자 경험을 최우선에 둔 것 — 모두 같은 방향입니다.
기술 선택에서 가장 위험한 함정은 "남들이 쓰니까"예요. 우리 팀의 규모, 워크로드 특성, 비용 구조, 운영 역량을 정직하게 평가하고 그에 맞는 조합을 선택하세요.
다음 글에서는 이 인프라 위에서 AI가 외부 도구와 소통하는 방법, MCP(Model Context Protocol)를 다뤄보겠습니다. 🚀
'DEV & DevOps > Backend' 카테고리의 다른 글
| 폐쇄망 Ollama→vLLM 전환기 EP.3 — 실행 명령어 해부와 트러블슈팅 (0) | 2026.04.07 |
|---|---|
| Mac Mini 홈서버 완전 정복 — 전체 시리즈 목차 (1~10편 총정리) (0) | 2026.04.07 |
| LLM vs AI Agent, 뭐가 다를까? 초보자를 위한 완벽 가이드 (1) | 2026.04.07 |
| 2026년 벡터 데이터베이스 완전 비교 — RAG 파이프라인에 어떤 벡터DB를 써야 할까? (0) | 2026.04.04 |
| n8n 완벽 가이드 — Zapier 대신 셀프호스팅 워크플로우 자동화 플랫폼 (0) | 2026.04.04 |