서버 한 대가 고장 나면 서비스 전체가 멈춰버리는 경험, 해보신 적 있나요? 혹은 사용자가 갑자기 몰려서 서버가 다운될까 봐 조마조마했던 적은요?

오늘은 이런 걱정을 한 방에 날려버릴 수 있는 도구, **Docker Swarm(도커 스웜)**에 대해 알아보겠습니다. 복잡한 기술 용어는 빼고, 아주 쉬운 비유로 핵심만 짚어드립니다.


1. Docker Swarm(도커 스웜)이란 무엇인가요?

간단히 말해 Docker Swarm은 여러 대의 서버(컴퓨터)를 묶어서 마치 하나의 거대한 슈퍼컴퓨터처럼 다룰 수 있게 해주는 도구입니다. 개발자들은 이를 전문 용어로 '컨테이너 오케스트레이션(Container Orchestration)' 도구라고 부릅니다.

💡 핵심 요약

  • Docker: 서버 1대에서 컨테이너를 실행하는 도구
  • Docker Swarm: 여러 대의 서버를 클러스터로 묶어 관리하는 도구

2. 왜 Docker Swarm을 써야 할까요? (1인 식당 vs 대형 레스토랑)

기존의 Docker만 사용하는 환경(단일 서버)은 마치 **'1인 식당 사장님'**과 같습니다. 혼자서 요리, 서빙, 계산을 다 하죠.

  • 문제점: 사장님이 아프거나(서버 고장), 손님이 갑자기 몰리면(트래픽 폭주) 가게 문을 닫아야 합니다.

반면, Docker Swarm은 **'대형 레스토랑의 지배인'**입니다.

  • 해결책: 셰프와 직원이 여러 명(여러 대의 서버)이라 한 명이 아파도 다른 직원이 대체합니다. 손님이 많으면 직원을 더 투입하면 그만입니다.

Docker Swarm이 제공하는 3가지 핵심 가치:

  1. 고가용성 (High Availability): 서버 A가 고장 나면, Swarm이 즉시 서버 B에서 서비스를 실행해 "죽지 않는 서비스"를 만듭니다.
  2. 확장성 (Scaling): 사용자가 몰릴 때 명령어 한 줄로 서비스 복제본(Replica)을 10개, 100개로 늘릴 수 있습니다.
  3. 무중단 배포: 서비스를 멈추지 않고 하나씩 순차적으로 업데이트(Rolling Update) 할 수 있습니다.

3. 도커 스웜 아키텍처: 매니저와 워커

Swarm은 크게 **매니저(Manager)**와 **워커(Worker)**라는 두 가지 역할을 가진 노드(Node)들로 구성됩니다.

A. 매니저 노드 (The Brain 🧠)

  • 지휘관입니다. "웹서버 3개를 띄워!"라는 사용자의 명령을 받습니다.
  • 워커 노드들을 감시하며 일을 적절히 분배(스케줄링)하고, 문제가 생긴 노드를 파악합니다.

B. 워커 노드 (The Muscle 💪)

  • 일꾼입니다. 실제로 컨테이너를 실행합니다.
  • 매니저의 지시를 묵묵히 수행하고 상태를 보고합니다.

4. 핵심 작동 원리: 목표 상태 유지 (Desired State)

이것이 Swarm이 "똑똑하다"고 불리는 이유입니다. Swarm은 '선언적(Declarative)' 시스템입니다.

예를 들어, 당신이 매니저에게 **"웹서버 3개를 항상 유지해(Desired State)"**라고 명령했다고 가정해 봅시다.

  1. Swarm은 현재 웹서버가 3개인지 끊임없이 확인합니다.
  2. 갑자기 서버 하나가 다운되어 웹서버가 2개가 되었습니다.
  3. 매니저는 **"어? 목표는 3개인데 현재 2개네?"**라고 인지합니다.
  4. 즉시! 건강한 다른 노드에 새로운 웹서버 1개를 실행시켜 다시 3개를 맞춥니다.

이 과정 덕분에 관리자가 자고 있는 새벽에도 서버는 스스로 복구됩니다.


5. 네트워크와 로드 밸런싱 (Ingress Load Balancing)

여러 서버에 컨테이너가 흩어져 있으면 사용자는 어디로 접속해야 할까요? 걱정 마세요. Swarm에는 **'라우팅 메시(Routing Mesh)'**라는 마법 같은 기능이 있습니다.

  • 자동 연결: 외부에서 클러스터 내의 아무 서버에나 접속 요청을 보내도, Swarm이 알아서 실제 컨테이너가 있는 곳으로 연결해 줍니다.
  • 부하 분산: 요청이 들어오면 여러 개의 컨테이너에 골고루 나누어(Load Balancing) 트래픽이 한곳에 쏠리는 것을 막아줍니다.

🎁 보너스 가이드: 3분 만에 내 컴퓨터를 클러스터로 만들기

백문이 불여일타! 지금 바로 터미널(또는 CMD)을 열고 아래 명령어들을 순서대로 입력해 보세요. Docker Swarm의 마법을 직접 경험하실 수 있습니다.

1. Swarm 모드 시작하기 가장 먼저 내 컴퓨터를 Swarm의 매니저(Manager)로 만듭니다.

docker swarm init

성공 시 "Swarm initialized: current node is now a manager."라는 메시지가 뜹니다.

2. 웹서버 서비스 만들기 (Nginx) my-web이라는 이름으로 Nginx 웹서버를 3개(복제본) 실행시킵니다. 80번 포트를 열어 외부에서 접속할 수 있게 합니다.

docker service create --name my-web --replicas 3 -p 80:80 nginx

3. 상태 확인하기 정말로 3개가 실행되었는지 확인해 볼까요?

docker service ls

결과 화면에서 REPLICAS 3/3이라고 되어 있다면 성공입니다!

4. 스케일링 체험하기 (가장 재미있는 부분!) 사용자가 몰렸다고 가정하고, 웹서버를 순식간에 5개로 늘려봅시다.

docker service scale my-web=5

다시 docker service ls를 입력해보세요. 순식간에 5개로 늘어난 것을 볼 수 있습니다. 이것이 바로 Swarm의 강력한 확장성입니다.

5. 실습 종료 및 청소 테스트가 끝났다면 서비스를 깔끔하게 삭제합니다.

docker service rm my-web
docker swarm leave --force

🚀 [심화] 멀티 노드로 진짜 클러스터 구축하기

만약 남는 노트북이나 서버가 한 대 더 있다면(또는 가상 머신을 쓴다면), 두 컴퓨터를 연결해 진짜 클러스터를 만들어보세요. 이 과정은 마치 **'와이파이 연결'**만큼이나 간단합니다.

상황 설정:

  • 컴퓨터 A (매니저): 이미 docker swarm init을 한 상태
  • 컴퓨터 B (워커): Docker만 깔려있는 새로운 상태

1. 매니저에게 "초대장" 받기 (컴퓨터 A) 매니저 노드(컴퓨터 A)에서 아래 명령어를 입력해 워커를 추가하기 위한 **초대 토큰(Join Token)**을 확인합니다.

docker swarm join-token worker

그러면 아래와 같은 명령어가 출력됩니다. 이 줄을 그대로 복사하세요.

docker swarm join --token SWMTKN-1-49nj1cmql0of... 192.168.0.10:2377

2. 워커가 초대에 응하기 (컴퓨터 B) 이제 새로운 서버(컴퓨터 B)의 터미널에 복사한 명령어를 그대로 붙여넣기만 하면 됩니다.

# (컴퓨터 B에서 실행)
docker swarm join --token SWMTKN-1-49nj1cmql0of... 192.168.0.10:2377

성공 시 "This node joined a swarm as a worker."라는 메시지가 뜹니다.

3. 연결 확인하기 (컴퓨터 A) 다시 매니저(컴퓨터 A)로 돌아와서 노드가 잘 연결되었는지 확인해 봅니다.

 
docker node ls

출력 예시:

ID        HOSTNAME    STATUS    AVAILABILITY   MANAGER STATUS
abc12...  Manager-PC  Ready     Active         Leader
xyz34...  Worker-PC   Ready     Active

이제 Worker-PC가 리스트에 보이나요? 축하합니다! 🎉 이제 당신은 두 대의 컴퓨터 자원을 합쳐서 사용하는 클러스터 관리자가 되었습니다. 이제 서비스를 생성하면 Swarm이 알아서 두 컴퓨터 중 여유로운 곳에 컨테이너를 배치할 것입니다.

⚠️ 주의사항: 방화벽(Firewall) 체크! 멀티 노드 구성이 안 된다면 99%는 방화벽 문제입니다. 서버 간 통신을 위해 다음 포트들이 열려 있어야 합니다.

  • TCP 2377: 클러스터 관리 통신
  • TCP/UDP 7946: 노드 간 통신
  • UDP 4789: 오버레이 네트워크 트래픽

 

6. Docker Swarm vs Kubernetes (쿠버네티스) 비교

가장 많이 하시는 질문입니다. "쿠버네티스(K8s)랑 뭐가 달라요?"

특징 Docker Swarm (도커 스웜) Kubernetes (K8s)
난이도 매우 쉬움. Docker를 안다면 금방 배움. 어려움. 학습 곡선이 가파름.
설치/구축 Docker 설치 시 기본 내장. (docker swarm init) 별도 설치 및 복잡한 구성 필요.
용도 중소규모 프로젝트, 빠른 구축이 필요할 때. 대규모 엔터프라이즈 시스템, 세밀한 제어.

결론: 복잡한 기능보다 빠르고 간편하게 오케스트레이션 환경을 구축하고 싶다면 Docker Swarm이 최고의 선택입니다.

 

 


마치며

Docker Swarm은 복잡한 설정 없이도 **"죽지 않는 서비스"**와 **"확장 가능한 시스템"**을 구축할 수 있는 강력한 도구입니다.

🚀 지금 바로 시작해보세요

Docker가 설치된 PC나 서버가 있다면 터미널을 열고 딱 한 줄만 입력해 보세요.

docker swarm init

이 명령어 하나로 여러분의 서버는 강력한 Swarm 모드로 변신합니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기