Infra Architecture/Datacenter & Cloud
Datacenter & Cloud - 08. Cloud Native 플랫폼
클라우드 네이티브란 무엇인가 — Cloud Native 플랫폼 개관
2013년, Netflix는 자체 데이터센터를 AWS로 완전히 이전했다. 당시에는 "미친 짓"으로 불렸다 — 자기 핵심 인프라를 남에게 맡긴다는 비판이었다. 하지만 Netflix는 — 이전 과정에서 마이크로서비스·Chaos Engineering·자동 배포 같은 기법을 개발했고, 이 기법들이 모여 "클라우드 네이티브(Cloud Native)"라는 패러다임이 됐다. 2026년 — 클라우드 네이티브는 더 이상 선구자의 선택이 아니라 업계의 기본이다. 이 글은 클라우드 네이티브가 무엇인지, CNCF가 왜 만들어졌는지, GitOps와 Service Mesh가 "운영"에 어떤 의미를 갖는지를 다룬다.
이 글은 foundations 06의 IaC 철학과 이전 글(Terraform)의 연장선에 있다. Terraform이 인프라를 코드로 정의한다면 — 클라우드 네이티브는 애플리케이션과 운영 방식 전체를 "클라우드에 맞게" 재설계하는 것이다. Kubernetes의 내부(API·CRD·컨트롤러)는 Kubernetes 서브프로젝트에서 다룬다 — 본 글은 "왜 클라우드 네이티브로 가나"라는 질문에 답한다.
클라우드 네이티브의 정의
클라우드 네이티브(Cloud Native) — CNCF의 정의는 다음과 같다: "클라우드 컴퓨팅 모델의 이점을 최대한 활용하는 애플리케이션을 구축하고 실행하는 접근 방식." 이 정의는 추상적이니 — 구체적으로 풀면 네 가지 핵심이 있다:
- 마이크로서비스 — 애플리케이션을 작은 독립 서비스로 분해. 각 서비스가 독립적으로 배포·확장·장애 격리. software-architecture 서브프로젝트에서 다룬 개념.
- 컨테이너 — 애플리케이션과 의존성을 컨테이너로 패키징. 환경 간 이식성. compute-platforms 영역에서 다룬 기술.
- 동적 오케스트레이션 — Kubernetes 같은 오케스트레이터가 컨테이너를 스케줄링·확장·복구. 사람이 수동으로 "이 서버에 이 컨테이너를 띄워"라고 안 함.
- 선언적 시스템 — "어떤 상태이어야 한다"를 선언하고, 시스템이 그 상태로 수렴. foundations 06의 IaC와 같은 철학.
flowchart TD
CN["클라우드 네이티브"] --> MS["마이크로서비스<br/>(독립 배포·확장)"]
CN --> CT["컨테이너<br/>(이식성·격리)"]
CN --> ORC["오케스트레이션<br/>(Kubernetes)"]
CN --> DEC["선언적<br/>(GitOps·IaC)"]
CNCF — 클라우드 네이티브 생태계의 중심
CNCF(Cloud Native Computing Foundation) 는 — 2015년 Linux Foundation 산하로 만들어진 재단. Kubernetes를 기증받아 시작했고, 현재 100개 이상의 프로젝트를 호스팅한다. CNCF는 클라우드 네이티브 생태계의 "표준화 기구"다.
CNCF 프로젝트의 성숙도 단계:
- Sandbox — 초기 단계. 실험적.
- Incubating — 성장 중. 사용자 증가.
- Graduated — 성숙. 프로덕션 준비 완료. Kubernetes·Prometheus·containerd·Envoy·etcd가 이 단계.
CNCF 생태의 주요 프로젝트:
| 카테고리 | 프로젝트 | 역할 |
|---|---|---|
| 오케스트레이션 | Kubernetes | 컨테이너 스케줄링·관리 |
| 컨테이너 런타임 | containerd, CRI-O | 컨테이너 실행 |
| 네트워킹 | Cilium, Calico, Istio, Envoy | CNI, 서비스 메시, 프록시 |
| 관측성 | Prometheus, Grafana, Jaeger, Fluentd | 메트릭·대시보드·트레이스·로그 |
| 패키징 | Helm, Artifact Hub | 패키지 관리 |
| CI/CD | ArgoCD, Flux, Tekton | GitOps·파이프라인 |
| 보안 | Falco, Notary, OPA | 런타임 보안·이미지 서명·정책 |
| 스토리지 | Rook, Longhorn | 분산 스토리지 |
GitOps — Git을 단일 진실의 원천으로
GitOps 는 — Git 저장소가 시스템 상태의 단일 진실의 원천(single source of truth) 이고, 자동화된 프로세스가 Git의 상태를 프로덕션에 동기화하는 운영 모델이다. foundations 06에서 맛보기로 소개했고, 여기서 실천 관점에서 본다.
GitOps의 핵심 원칙:
- 선언적(Declarative) — 시스템 상태를 코드(YAML)로 선언. 명령적(imperative) 스크립트가 아님.
- 버전 관리(Versioned) — 모든 변경이 Git 커밋으로. 누가 언제 무엇을 바꿨는지 전부 추적 가능.
- 자동 동기화(Automated) — Git에 push하면 자동으로 프로덕션에 적용. 수동
kubectl apply불필요. - 지속적 조정(Continuously reconciled) — 소프트웨어 에이전트(ArgoCD·Flux)가 Git과 프로덕션을 지속적으로 비교. drift가 생기면 Git 상태로 복원.
flowchart LR
DEV["개발자"] -->|git push| REPO["Git 저장소<br/>(선언적 YAML)"]
REPO --> CI["CI 파이프라인<br/>(테스트·이미지 빌드)"]
CI --> REPO
REPO --> CD["ArgoCD / Flux<br/>(자동 동기화)"]
CD --> K8S["Kubernetes 클러스터<br/>(프로덕션)"]
K8S -. drift 감지 .-> CD
CD -. Git으로 복원 .-> K8S
GitOps vs 전통적 배포
| 특성 | 전통적 배포 (Jenkins + kubectl) | GitOps (ArgoCD/Flux) |
|---|---|---|
| 배포 트리거 | 수동 (또는 CI에서 kubectl) | Git push (자동) |
| 변경 추적 | CI 로그 (흩어짐) | Git 히스토리 (한 곳) |
| 권한 | CI가 클러스터 권한 필요 | ArgoCD/Flux만 권한 |
| 롤백 | kubectl rollout undo (수동) |
git revert (Git에서) |
| 감사 | CI 로그 검색 | Git blame으로 즉시 |
| drift 감지 | 없음 | 자동 (지속적 비교) |
Service Mesh — 왜 쓰는가 (운용 관점)
서비스 메시(Service Mesh) 는 — 마이크로서비스 간 통신을 관리하는 인프라 계층이다. Istio·Linkerd·Consul Connect가 대표적. "왜 쓰는가"가 핵심 질문 — 복잡성·오버헤드를 감수하면서까지.
서비스 메시가 해결하는 문제:
- 트래픽 관리 — "A 서비스 호출의 10%만 새 버전으로" (카나리 배포). 로드 밸런서 없이 메시 규칙으로 분배.
- 보안 (mTLS) — 서비스 간 통신을 자동 암호화. 각 서비스에 인증서를 발급·회전. foundations 03에서 본 zero trust의 실천.
- 관측성 — 각 서비스 간 호출의 메트릭·트레이스를 자동 수집. 앱 코드 변경 없이.
- 회복탄력성 — 서킷 브레이커·재시도·타임아웃을 메시가 자동으로 적용. 앱 코드에 회복탄력성 로직을 넣지 않아도 됨.
서비스 메시는 — 사이드카(sidecar) 패턴으로 구현된다. 각 Pod에 프록시 컨테이너(Envoy)를 붙이고 — 모든 트래픽이 이 프록시를 거친다. 앱은 프록시의 존재를 모른다 — 투명하게 트래픽이 가로채져서(f intercept) 메시 기능이 적용된다.
서비스 메시의 비용
서비스 메시는 무료가 아니다:
- 지연 — 모든 트래픽이 사이드카를 거치니 — 1 ~ 5ms의 추가 지연
- 자원 — 각 Pod에 프록시 컨테이너가 추가되니 — CPU·메모리 오버헤드 (Pod당 100 ~ 500MB)
- 복잡성 — 메시 자체의 설정·관리·업그레이드가 별도의 운영 부담
- 디버깅 — 트래픽이 프록시를 거치니 — "왜 느린가?"를 디버깅할 때 프록시까지 봐야 함
이 비용을 감수할 만큼 서비스 수가 많고(수십 개 이상의 마이크로서비스), mTLS·카나리 배포·분산 트레이스가 필요할 때 — 서비스 메시가 정답이다. 서비스가 3 ~ 5개인 소규모에서는 — 메시 없이 Kubernetes 기본 기능(Service·NetworkPolicy)으로 충분하다.
| 특성 | 서비스 메시 없음 | 서비스 메시 (Istio 등) |
|---|---|---|
| mTLS | 직접 구현 | 자동 (모든 통신) |
| 카나리 배포 | kubectl로 수동 | 메시 규칙으로 정밀 |
| 분산 트레이스 | 각 앱에 계측 | 자동 (사이드카) |
| 서킷 브레이커 | 앱 코드에 구현 | 메시 규칙 |
| 지연 | 기본 | +1 ~ 5ms |
| 메모리 오버헤드 | 없음 | Pod당 +100 ~ 500MB |
| 적합 규모 | 소규모 (~5 서비스) | 대규모 (10+ 서비스) |
Cloud Native는 "설계 철학"이다
클라우드 네이티브는 — 특정 도구(Kubernetes·Istio·Prometheus)가 아니다. 그것들은 도구일 뿐이다. 클라우드 네이티브는 — 설계 철학이다: 애플리케이션을 클라우드의 특성(탄력성·자동화·마이크로서비스)에 맞게 설계하는 것. 이 철학 없이 Kubernetes를 쓰면 — "클러스터 위에서 돌아가는 모놀리스"가 될 뿐이다.
다음 글에서는 — 클라우드 네이티브 환경이 온프레미스와 만나는 지점을 다룬다 — 하이브리드/멀티클라우드. 한 회사가 AWS와 GCP를 같이 쓰거나, 클라우드와 자체 데이터센터를 연결할 때 생기는 문제와 해결책.
Kubernetes가 클라우드 네이티브의 중심인 이유
Kubernetes는 — 클라우드 네이티브 생태계의 "운영체제"로 불린다. 그 이유는 — 컨테이너 오케스트레이션의 표준이기 때문이다. 사용자가 "nginx 컨테이너 3개를 띄우고, CPU가 80%면 자동으로 5개로 늘려라"라고 선언하면 — Kubernetes가 그 상태를 유지한다(self-healing). 컨테이너가 죽으면 자동 재시작. 노드가 장애 나면 다른 노드로 이동. 이 "선언 → 수렴" 모델이 — foundations 06의 IaC와 같은 철학이다.
Kubernetes의 핵심 추상화:
- Pod — 컨테이너의 그룹 (한 노드에서 함께 실행)
- Deployment — Pod의 복제본 수를 관리 (3개 유지)
- Service — Pod 그룹에 대한 안정적인 네트워크 엔드포인트 (IP가 바껴도 이름으로 접근)
- Ingress — 외부 트래픽을 클러스터로 라우팅 (HTTP 경로별)
이 추상화들 위에 — Helm(패키지 관리)·ArgoCD(GitOps 배포)·Prometheus(관측성)가 얹혀서 — 완전한 클라우드 네이티브 플랫폼을 만든다.
GitOps 실천 — ArgoCD의 동작
ArgoCD는 — Kubernetes 클러스터에 설치되는 컨트롤러다. Git 저장소의 YAML 매니페스트와 클러스터의 실제 상태를 지속적으로 비교한다:
- 개발자가 Git에 새 버전의 Deployment YAML을 push
- ArgoCD가 Git 변경을 감지 (또는 webhook으로 알림)
- ArgoCD가 클러스터에
kubectl apply를 자동 실행 - ArgoCD가 클러스터 상태가 Git과 일치하는지 지속적으로 확인
- 누군가 수동으로
kubectl로 변경해도 — ArgoCD가 Git 상태로 되돌림 (drift 자동 수정)
이 과정에서 — 클러스터 접근 권한이 ArgoCD에만 있고 — 개발자는 Git만 다룬다. 보안이 강화된다 (Git 권한 = 배포 권한).
Service Mesh의 사이드카 패턴
서비스 메시의 핵심 기술이 — 사이드카(sidecar) 패턴이다. 각 Pod에 프록시 컨테이너(Envoy)를 추가로 붙인다. 앱 컨테이너와 프록시 컨테이너가 같은 Pod에서 실행되면서 — 네트워크 네임스페이스를 공유한다. 모든 트래픽이 프록시를 거치게 — iptables 규칙으로 트래픽을 가로챈다(intercept).
Pod 내부 구조 (서비스 메시):
┌─────────────────────────────────┐
│ Pod │
│ ┌───────────┐ ┌───────────┐ │
│ │ 앱 컨테이너│ │ Envoy │ │
│ │ (앱 로직) │←→│ (프록시) │ │
│ │ │ │ mTLS │ │
│ │ │ │ retry │ │
│ │ │ │ metrics │ │
│ └───────────┘ └───────────┘ │
└─────────────────────────────────┘
앱은 프록시의 존재를 모른다 — "나는 그냥 HTTP 요청을 보냈을 뿐인데" — 프록시가 mTLS 암호화·재시도·메트릭 수집·트래픽 분할을 알아서 한다. 이 "투명성"이 사이드카의 핵심이다.
클라우드 네이티브 도입 시 고려할 점
클라우드 네이티브로 가는 것은 — 도구를 바꾸는 게 아니라 조직과 문화를 바꾸는 일이다:
- 팀 구조 — Conway's 법칙: 시스템 구조는 조직 구조를 따른다. 마이크로서비스는 — 작은 자율 팀이 필요하다.
- 운영 능력 — Kubernetes 운영은 복잡하다. 전담 팀(Platform Engineering) 또는 관리형 서비스(EKS/GKE)가 필요.
- 관측성 투자 — 분산 시스템에서는 — 무엇이 어떻게 동작하는지 보려면 분산 트레이싱(Jaeger)·메트릭(Prometheus)·로그(Loki)가 필수. foundations 05의 observability 글에서 다룬다.
- 점진적 도입 — "전부 마이크로서비스로"가 아니라 — 한 서비스부터 시작해 점진적으로. Strangler Fig 패턴: 모놀리스에서 하나씩 떼어내어 마이크로서비스로 이동.
클라우드 네이티브는 — 도구가 아니라 철학이다. Kubernetes·Istio·Prometheus는 그 철학을 실천하는 도구일 뿐. 핵심은 — 클라우드의 특성(탄력성·자동화·분산)을 활용해 애플리케이션을 설계하는 것. 철학 없이 도구만 쓰면 — "Kubernetes 위의 모놀리스"가 될 뿐이다.
선언적 인프라의 힘 — "원하는 상태"를 코드로
선언적(declarative) 시스템의 핵심은 — "어떻게(how)"가 아니라 "무엇(what)"을 정의하는 것이다. Kubernetes 매니페스트:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
spec:
replicas: 3 # "3개가 있어야 해"
selector:
matchLabels:
app: web
template:
spec:
containers:
- name: nginx
image: nginx:1.27
resources:
requests:
cpu: 100m
memory: 128Mi
이 YAML은 — "nginx 컨테이너 3개를, CPU 100m/메모리 128Mi로"라고 선언한다. Kubernetes가 — 이 상태를 유지한다. 컨테이너가 죽으면 재시작. 노드가 장애 나면 다른 노드로 옮김. 사람이 "컨테이너 2번이 죽었으니 재시작해라"라고 명령할 필요가 없다.
이게 명령적(imperative) 스크립트와 다른 점이다. 명령적은 — "컨테이너를 띄워라, 죽었는지 확인해라, 재시작해라"를 단계별로 코딩해야 한다. 선언적은 — "이 상태가 되어야 한다"고 한 줄로 정의하고 — 시스템이 알아서 수렴한다. foundations 06의 Terraform이 — 인프라 수준에서 선언적이라면 — Kubernetes는 — 애플리케이션 수준에서 선언적이다.
GitOps가 DevOps를 넘어서는 이유
GitOps는 — DevOps의 다음 단계로 불린다. 차이점:
DevOps: CI 파이프라인이 빌드 → 테스트 → 배포를 자동화. 하지만 — 배포 권한이 CI에 있고, 클러스터 접근이 필요하다.
GitOps: Git이 유일한 진실의 원천. 배포 권한이 Git 커밋 권한으로 환원된다. ArgoCD/Flux가 Git을 클러스터에 동기화. CI는 빌드/테스트만 하고, 배포는 GitOps가 한다.
이 분리가 — 보안을 강화한다: 개발자는 Git에 push하기만 하면 되고 — 클러스터 접근 권한이 필요 없다. Git 커밋 히스토리가 곧 배포 히스토리고 — git revert가 곧 롤백이다.
Service Mesh vs Kubernetes 네이티브 기능
"서비스 메시가 필요한가?"는 — 조직 규모와 요구사항에 달려 있다. Kubernetes가 이미 제공하는 기능과 비교하면:
- Service → Pod 간 로드 밸런싱: Kubernetes 기본
- mTLS (서비스 간 암호화): 서비스 메시 필요 (또는 직접 구현)
- 카나리 배포 (트래픽 비율 제어): 서비스 메시가 더 정밀 (Kubernetes는 Deployment 비율로만 가능)
- 분산 트레이싱: 서비스 메시가 자동 (Kubernetes는 앱에 계측 필요)
- 서킷 브레이커: 서비스 메시가 제공 (Kubernetes는 없음)
5개 이하의 서비스, 기본 로드 밸런싱만 필요 → Kubernetes 네이티브로 충분.
10개 이상, mTLS·분산 트레이싱·정밀 트래픽 제어 필요 → 서비스 메시 검토.
클라우드 네이티브는 — 도구(Kubernetes·Istio·Prometheus)가 아니라 철학이다. 핵심은 — 클라우드의 특성(탄력성·자동화·분산)을 활용해 애플리케이션을 설계하는 것. 철학 없이 도구만 쓰면 — "Kubernetes 위의 모놀리스"가 될 뿐이다.
서비스 메시의 미래 — Ambient Mesh
사이드카 패턴의 비용(지연·메모리)을 줄이기 위해 — Istio는 Ambient Mesh(사이드카 없는 메시)를 발표했다(2022). 각 Pod에 사이드카를 붙이는 대신 — 노드당 하나의 ztunnel(L4 프록시)을 두고 — L7 처리가 필요한 서비스만 waypoint(선택적 L7 프록시)를 둔다. 사이드카 100개가 ztunnel 1개로 줄어드니 — 자원 오버헤드가 크게 감소. 2026년 기준 — Ambient Mesh가 Istio의 기본 모델로 자리잡고 있다.
참고
- CNCF, "Cloud Native Definition v1.0", 2018 — 클라우드 네이티브 정의. 접근 2026-07-21. URL: https://github.com/cncf/toc/blob/main/DEFINITION.md
- CNCF, "CNCF Landscape" — 클라우드 네이티브 프로젝트 지도. 접근 2026-07-21
- OpenGitOps, "GitOps Principles", CNCF, 2022 — GitOps 원칙. 접근 2026-07-21. URL: https://opengitops.dev/
- Burns, B. et al. "Kubernetes: Up and Running" 3rd ed, O'Reilly, 2022 — Kubernetes 실천. 접근 2026-07-21
- Ihnativ, C. "Cloud Native Patterns", O'Reilly, 2021 — 클라우드 네이티브 설계 패턴. 접근 2026-07-21
- Istio, "Istio Documentation" — 서비스 메시. 접근 2026-07-21. URL: https://istio.io/latest/docs/
- ArgoCD, "ArgoCD Documentation" — GitOps 도구. 접근 2026-07-21. URL: https://argo-cd.readthedocs.io/
- Newman, S. "Building Microservices" 2nd ed, O'Reilly, 2021 — 마이크로서비스 설계. 접근 2026-07-21
- Cloud Native Computing Foundation, "CNCF Annual Survey 2025" — 클라우드 네이티브 도입 현황. 접근 2026-07-21
- Istio, "Ambient Mesh Documentation" — 사이드카 없는 메시. 접근 2026-07-21
- Linkerd, "Linkerd Documentation" — 경량 서비스 메시. 접근 2026-07-21
이 글에서 다룬 클라우드 네이티브의 핵심 — 선언적 인프라(GitOps)와 투명한 트래픽 관리(Service Mesh)는 —
"인프라 관리를 소프트웨어 문제로" 바꾸는 기술이다. 다음 글에서는 하이브리드/멀티클라우드를 다룬다.
- Skelton, M., Pais, M.
, IT Revolution, 2019 — 팀 구조와 시스템 구조. 접근 2026-07-21
'Infra Architecture > Datacenter & Cloud' 카테고리의 다른 글
| Datacenter & Cloud - 10. 엣지 컴퓨팅과 FinOps (0) | 2026.07.26 |
|---|---|
| Datacenter & Cloud - 09. 하이브리드·멀티클라우드 (0) | 2026.07.26 |
| Datacenter & Cloud - 07. Infrastructure as Code 실천 (0) | 2026.07.26 |
| Datacenter & Cloud - 06. SDN과 네트워크 가상화 (0) | 2026.07.26 |
| Datacenter & Cloud - 05. 클라우드 네트워크 서비스 (0) | 2026.07.26 |