
서버 한 대가 고장 나면 서비스 전체가 멈춰버리는 경험, 해보신 적 있나요? 혹은 사용자가 갑자기 몰려서 서버가 다운될까 봐 조마조마했던 적은요?
오늘은 이런 걱정을 한 방에 날려버릴 수 있는 도구, **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가지 핵심 가치:
- 고가용성 (High Availability): 서버 A가 고장 나면, Swarm이 즉시 서버 B에서 서비스를 실행해 "죽지 않는 서비스"를 만듭니다.
- 확장성 (Scaling): 사용자가 몰릴 때 명령어 한 줄로 서비스 복제본(Replica)을 10개, 100개로 늘릴 수 있습니다.
- 무중단 배포: 서비스를 멈추지 않고 하나씩 순차적으로 업데이트(Rolling Update) 할 수 있습니다.
3. 도커 스웜 아키텍처: 매니저와 워커
Swarm은 크게 **매니저(Manager)**와 **워커(Worker)**라는 두 가지 역할을 가진 노드(Node)들로 구성됩니다.
A. 매니저 노드 (The Brain 🧠)
- 지휘관입니다. "웹서버 3개를 띄워!"라는 사용자의 명령을 받습니다.
- 워커 노드들을 감시하며 일을 적절히 분배(스케줄링)하고, 문제가 생긴 노드를 파악합니다.
B. 워커 노드 (The Muscle 💪)
- 일꾼입니다. 실제로 컨테이너를 실행합니다.
- 매니저의 지시를 묵묵히 수행하고 상태를 보고합니다.
4. 핵심 작동 원리: 목표 상태 유지 (Desired State)
이것이 Swarm이 "똑똑하다"고 불리는 이유입니다. Swarm은 '선언적(Declarative)' 시스템입니다.
예를 들어, 당신이 매니저에게 **"웹서버 3개를 항상 유지해(Desired State)"**라고 명령했다고 가정해 봅시다.
- Swarm은 현재 웹서버가 3개인지 끊임없이 확인합니다.
- 갑자기 서버 하나가 다운되어 웹서버가 2개가 되었습니다.
- 매니저는 **"어? 목표는 3개인데 현재 2개네?"**라고 인지합니다.
- 즉시! 건강한 다른 노드에 새로운 웹서버 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 모드로 변신합니다.
'클라우드 & DevOps > DevOps ∕ Docker' 카테고리의 다른 글
| [Docker] 도커 컨테이너가 호스트(host)의 파일 시스템에 파일을 쓸 때 생기는 소유권 문제를 해결하는 방법 (0) | 2025.11.12 |
|---|---|
| [Docker] GitLab CI/CD: Docker 볼륨 권한 문제를 해결하기 (0) | 2025.10.15 |
| [Docker] Volume 설정과 Shell 환경변수 문법, 리눅스 권한 정리 (0) | 2025.10.15 |
| [Docker] gitlab-runner 기동 시, 권한 문제 해결하기 (0) | 2025.09.11 |
| [Docker] 오프라인 환경에서 gitlab runner 기동 시, docker offline 설정하기 (0) | 2025.09.10 |





최근댓글