k8s,kafka,msa,docker와의 관계

topics 400-인프라 & 아키텍처 401 Docker & Kubernetes 404 마이크로서비스(MSA)
types 이론
tags

K8s, Kafka, MSA, Docker의 관계

이 기술들이 왜 같이 쓰이는지, 각각 어떤 역할을 하는지 정리했다.

전체 그림

MSA (아키텍처)
  ├─ 서비스들을 Docker로 컨테이너화
  ├─ 컨테이너들을 K8s로 관리
  └─ 서비스 간 통신을 Kafka로 처리

Docker와 K8s의 관계

k8s,kafka,msa와의 관계-1751777362953.png
기술 역할 집중하는 것
Docker 컨테이너 생성/실행 단일 컨테이너의 라이프사이클
K8s 컨테이너 오케스트레이션 다수 컨테이너의 운영/관리
  • Docker: 어플리케이션 이미지를 만들고 컨테이너로 실행
  • K8s: 자동 배포, 확장, 복구, 로드 밸런싱 등 컨테이너 운영 관리

Docker 없이 K8s는 의미가 없고, K8s 없이 Docker만으로 대규모 서비스 운영은 힘들다.

MSA와의 관계

MSA(마이크로서비스 아키텍처)는 서비스를 작게 쪼개는 것이다. 그러면 자연스럽게:

  1. Docker가 필요해짐: 각 서비스를 독립적으로 패키징해야 하니까
  2. K8s가 필요해짐: 수십~수백 개의 컨테이너를 관리해야 하니까
  3. Kafka가 필요해짐: 서비스 간 통신을 비동기로 처리해야 하니까

Kafka의 역할

MSA에서 서비스들이 동기적으로 통신하면 문제가 생긴다:

  • A 서비스가 죽으면 → B도 영향받고 → C도 영향받고... (장애 전파)

이걸 방지하려면 이벤트 드리븐 방식이 필요하다:

  • 서비스들이 직접 호출하는 게 아니라 메시지(이벤트)를 주고받음
  • 한 서비스가 죽어도 메시지는 큐에 남아있음

Kafka는 이런 이벤트들을 안정적으로 전달하고 저장하는 메시지 브로커다.

요약

기술 역할 없으면?
Docker 서비스 컨테이너화 환경 일관성 없음, 배포 어려움
K8s 컨테이너 운영/관리 수동 관리, 확장/복구 어려움
Kafka 서비스 간 비동기 통신 장애 전파, 강결합 문제
MSA 아키텍처 패턴 모노리스의 한계 (배포, 확장 어려움)

이 기술들은 따로 쓸 수도 있지만, MSA를 제대로 하려면 대부분 같이 쓰게 된다.

관련 문서