도커(Docker)만으로는 부족한 순간들
단일 서버에서 동작하는 도커(Docker)의 한계를 살펴보고, 오케스트레이션 도구가 해결해주는 문제들을 배웁니다.
이전 에피소드에서 쿠버네티스의 오버엔지니어링 위험성을 경고했지만, 그럼에도 불구하고 많은 기업들이 결국 쿠버네티스로 넘어갑니다. 도커(Docker) 컨테이너는 내 컴퓨터에서 완벽하게 작동하고, 배포도 쉽게 만들어 주는데 왜 사람들은 굳이 복잡한 도구를 하나 더 배우려 할까요? 이번 회차에서는 단일 서버에서 동작하는 도커가 실전 환경에서 마주하는 한계점과, 이를 해결하기 위한 '컨테이너 오케스트레이션'의 개념을 알아봅니다.
컨테이너 혁명, 그 이후의 고민
도커(Docker)의 등장은 소프트웨어 개발과 배포의 패러다임을 바꿨습니다. "내 컴퓨터에서는 되는데 서버에서는 안 되네?"라는 영원한 난제를 컨테이너라는 독립적인 상자로 포장하여 해결했기 때문입니다.
이제 개발자들은 운영체제나 환경 설정에 구애받지 않고, 도커 이미지만 있다면 어디서든 동일하게 프로그램을 실행할 수 있게 되었습니다. 하지만 서비스가 인기를 얻고 규모가 커지면서, 단순히 '실행'하는 것을 넘어 '관리'의 문제가 떠오르기 시작했습니다.
도커(Docker)의 한계점
도커 자체는 한 대의 컴퓨터(서버) 안에서 컨테이너를 띄우고 실행하는 데 특화되어 있습니다. 서버가 한 대일 때는 `docker run` 명령어로 컨테이너를 실행하면 그만입니다. 그러나 사용자가 급증하여 서버를 10대, 20대로 늘려야 한다면 어떻게 될까요?
단일 서버 기반 배포의 문제점
오해 또는 실수
서버 1번이 고장나면 그 안의 컨테이너도 모두 죽고, 개발자가 새벽에 깨어나 수동으로 다른 서버에 다시 실행해야 한다.
바로잡기
시스템이 컨테이너의 상태를 감시하고 죽으면 자동으로 다른 서버에 살려내는 자가 치유 능력이 필요하다.
오해 또는 실수
트래픽이 몰릴 때 개발자가 직접 새 서버를 사고 도커를 설치한 뒤 컨테이너를 띄워야 한다.
바로잡기
트래픽에 따라 컨테이너 개수를 자동으로 늘려주는 오토스케일링 기능이 필요하다.
오해 또는 실수
새 버전을 배포할 때, 기존 컨테이너를 끄고 새 컨테이너를 켜는 동안 서비스 접속이 끊긴다 (다운타임).
바로잡기
사용자가 눈치채지 못하게 조금씩 버전을 교체하는 무중단 배포 시스템이 필요하다.
컨테이너 오케스트레이션(Container Orchestration)이란?
이러한 문제들을 해결하기 위해 등장한 개념이 바로 컨테이너 오케스트레이션(Container Orchestration)입니다.
오케스트라의 지휘자를 떠올려 보세요. 수십 명의 연주자(컨테이너)가 각자의 악기를 들고 있습니다. 만약 지휘자가 없다면 엉망진창이 되겠지만, 훌륭한 지휘자는 누가 언제 연주를 시작하고 멈춰야 할지, 소리는 얼마나 크게 내야 할지를 완벽하게 조율합니다.
IT 시스템에서 오케스트레이션 도구는 수많은 서버들에 흩어져 있는 수백, 수천 개의 컨테이너들을 마치 하나의 시스템처럼 지휘하고 관리합니다.
수동 관리 vs 오케스트레이션
도커만 사용할 때 (수동)
- "서버 1번에 웹서버 컨테이너 2개 띄우고, 서버 2번에는 DB 컨테이너 띄워라."
- (서버 1번이 다운됨) "큰일났다! 빨리 서버 3번에 들어가서 웹서버 컨테이너 다시 2개 실행해라!"
오케스트레이션 도구를 사용할 때 (자동)
- "전체 시스템에 항상 웹서버 컨테이너가 2개 유지되게 해줘."
- (서버 1번이 다운됨) 지휘자(오케스트레이션 도구)가 이를 감지하고 알아서 살아있는 다른 서버에 웹서버 2개를 띄워 빈자리를 채웁니다.
오케스트레이션이 제공하는 마법 같은 기능들
쿠버네티스와 같은 컨테이너 오케스트레이션 도구는 도커만으로는 해결하기 힘들었던 운영상의 난제들을 마법처럼 자동화해 줍니다.
오케스트레이션 도구의 핵심 역할
- 스케줄링 (Scheduling)
- 비어있거나 자원이 여유로운 최적의 서버를 찾아 컨테이너를 배치합니다.
- 자가 치유 (Self-Healing)
- 컨테이너나 서버가 죽으면 이를 감지하고 즉시 새로운 컨테이너를 재시작하여 정상 상태를 유지합니다.
- 오토스케일링 (Auto Scaling)
- CPU 사용량이나 접속자 수에 따라 자동으로 컨테이너 개수를 늘리거나 줄입니다.
- 로드 밸런싱 (Load Balancing)
- 사용자들의 트래픽을 여러 개의 컨테이너로 골고루 분산시켜 줍니다.
결국, 컨테이너 오케스트레이션은 "개발자가 새벽에 서버 장애 알림을 받고 깨어나는 일을 없애주기 위해" 탄생한 기술이라 해도 과언이 아닙니다. 도커가 앱을 패킹하는 훌륭한 박스라면, 오케스트레이션은 수많은 박스를 전 세계로 안전하게 배송하고 관리하는 물류 시스템입니다.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.다음 중 컨테이너 오케스트레이션 도구가 제공하는 기능으로 볼 수 없는 것은?
3줄 요약
- 1도커는 단일 서버에서 컨테이너를 실행하는 데 훌륭하지만, 여러 서버에 걸쳐 수많은 컨테이너를 수동으로 관리하는 데는 한계가 있습니다.
- 2컨테이너 오케스트레이션은 다수의 컨테이너를 한데 묶어 배포, 확장, 자동 복구를 지휘하는 시스템입니다.
- 3쿠버네티스와 같은 오케스트레이션 도구는 자가 치유, 오토스케일링, 무중단 배포를 지원하여 안정적인 대규모 서비스 운영을 가능하게 합니다.