k8s,kafka,msa,docker와의 관계
| topics | 400-인프라 & 아키텍처 401 Docker & Kubernetes 404 마이크로서비스(MSA) |
| types | 이론 |
| tags |
K8s, Kafka, MSA, Docker의 관계
이 기술들이 왜 같이 쓰이는지, 각각 어떤 역할을 하는지 정리했다.
전체 그림
MSA (아키텍처)
├─ 서비스들을 Docker로 컨테이너화
├─ 컨테이너들을 K8s로 관리
└─ 서비스 간 통신을 Kafka로 처리
Docker와 K8s의 관계
| 기술 | 역할 | 집중하는 것 |
|---|---|---|
| Docker | 컨테이너 생성/실행 | 단일 컨테이너의 라이프사이클 |
| K8s | 컨테이너 오케스트레이션 | 다수 컨테이너의 운영/관리 |
- Docker: 어플리케이션 이미지를 만들고 컨테이너로 실행
- K8s: 자동 배포, 확장, 복구, 로드 밸런싱 등 컨테이너 운영 관리
Docker 없이 K8s는 의미가 없고, K8s 없이 Docker만으로 대규모 서비스 운영은 힘들다.
MSA와의 관계
MSA(마이크로서비스 아키텍처)는 서비스를 작게 쪼개는 것이다. 그러면 자연스럽게:
- Docker가 필요해짐: 각 서비스를 독립적으로 패키징해야 하니까
- K8s가 필요해짐: 수십~수백 개의 컨테이너를 관리해야 하니까
- Kafka가 필요해짐: 서비스 간 통신을 비동기로 처리해야 하니까
Kafka의 역할
MSA에서 서비스들이 동기적으로 통신하면 문제가 생긴다:
- A 서비스가 죽으면 → B도 영향받고 → C도 영향받고... (장애 전파)
이걸 방지하려면 이벤트 드리븐 방식이 필요하다:
- 서비스들이 직접 호출하는 게 아니라 메시지(이벤트)를 주고받음
- 한 서비스가 죽어도 메시지는 큐에 남아있음
Kafka는 이런 이벤트들을 안정적으로 전달하고 저장하는 메시지 브로커다.
요약
| 기술 | 역할 | 없으면? |
|---|---|---|
| Docker | 서비스 컨테이너화 | 환경 일관성 없음, 배포 어려움 |
| K8s | 컨테이너 운영/관리 | 수동 관리, 확장/복구 어려움 |
| Kafka | 서비스 간 비동기 통신 | 장애 전파, 강결합 문제 |
| MSA | 아키텍처 패턴 | 모노리스의 한계 (배포, 확장 어려움) |
이 기술들은 따로 쓸 수도 있지만, MSA를 제대로 하려면 대부분 같이 쓰게 된다.