오케스트레이션

Orchestration

도구

수십에서 수백 개로 늘어난 컨테이너를 어느 기계에 몇 개씩 띄우고 죽으면 어디에 다시 띄울지를 사람 대신 판단해 주는 도구입니다.

등장 배경

컨테이너를 쓰기 시작하면 관리할 것이 갑자기 많아집니다. 컨테이너는 프로그램과 실행에 필요한 것을 함께 묶어 어디서나 같게 돌게 만든 단위인데, 가볍고 몇 초면 떠서 한 기계에 수십 개를 얹게 됩니다. 서비스 열 개가 각각 세 벌씩 떠 있으면 챙길 컨테이너는 서른 개입니다.

어디에 무엇을 띄웠는지는 사람의 기억과 스프레드시트에 남았습니다. 3번 서버에 결제 두 벌, 4번 서버에 검색 세 벌 같은 식이었습니다. 새벽에 컨테이너 하나가 죽으면 당번이 알림을 받고 접속해 여유를 확인한 다음 다시 띄웠습니다. 기계 한 대가 통째로 꺼진 날에는 거기 있던 것들을 어디로 옮길지 한 사람이 앉아 배분했습니다.

오케스트레이션은 그 판단을 프로그램에 넘긴 것입니다. 사람이 배치를 정하는 대신 원하는 상태를 적어 두면, 지금 상태가 그것과 어긋나는 순간 도구가 스스로 맞춰 놓습니다.

해결하는 문제

대신 해 주는 일은 다섯 가지이고, 전부 원하는 상태와 지금 상태를 견줘 벌어진 차이를 메우는 동작입니다.

  1. 배치 — 어느 기계에 어느 컨테이너를 띄울지 정합니다. 남은 메모리와 처리 여유를 보고 고르니 3번 서버에 몰아 놓고 4번은 비워 두는 일이 없습니다.
  2. 복구 — 컨테이너가 죽으면 새것을 띄워 원하는 개수로 되돌립니다. "이 서비스는 항상 세 벌" 이라고 적어 두면 한 벌이 죽는 순간 빈자리가 채워집니다. 기계 한 대가 꺼지면 거기 있던 것들을 남은 기계로 옮겨 다시 띄웁니다.
  3. 대수 조절 — 오토스케일링 규칙을 붙이면 부하에 따라 벌 수를 늘리고 줄입니다. 처리 부하가 70퍼센트를 넘으면 세 벌에서 여섯 벌로 늘리고 새벽에 30퍼센트 아래로 떨어지면 두 벌로 줄입니다.
  4. 교체 — 새 버전을 한꺼번에 바꾸지 않고 한 벌씩 갈아 끼웁니다. 세 벌 가운데 하나를 새 버전으로 바꾸고 정상 응답을 확인한 뒤 다음으로 넘어가기 때문에 배포 중에도 서비스가 끊기지 않습니다. 새 버전이 응답하지 않으면 멈추고 옛 버전으로 되돌립니다.
  5. 연결 — 컨테이너가 죽고 새로 뜨는 동안 주소는 매번 바뀝니다. 도구가 서비스마다 고정된 이름을 붙여 두고 그 이름으로 부르면 살아 있는 벌에 요청을 넘깁니다.

마이크로서비스처럼 기능별로 잘라 따로 배포하는 구조에서는 이 다섯 가지가 선택이 아닙니다. 서비스 열 개를 사람이 배치하고 되살리면 나눠서 얻은 배포 속도를 운영에서 그대로 잃습니다.

대안

이 도구를 들이지 않는 선택지는 셋입니다.

  1. 스크립트로 직접 관리 — 서버 목록을 적어 두고 배포와 재시작을 스크립트로 돌립니다. 컨테이너가 열 개 안쪽이고 기계가 두세 대면 이쪽이 더 쌉니다. 배울 것이 적고 들여다볼 곳도 적습니다. 대신 자기 복구와 무중단 교체는 직접 만들어야 합니다.
  2. 서버리스 — 컨테이너와 기계를 아예 신경 쓰지 않고 함수 단위로 코드를 올려 요청이 올 때만 돌게 합니다. 배치와 대수 조절을 남에게 맡기는 쪽인데, 한동안 호출이 없다가 첫 요청이 들어오면 준비에 잠깐 걸리고 오래 도는 작업에는 맞지 않습니다.
  3. 가상 머신 몇 대로 고정 운영 — 물리 서버 위에 만든 가상의 독립 컴퓨터 몇 대를 정해 두고 그 안에서 돌립니다. 대수가 바뀌지 않고 트래픽이 고르면 관리할 것이 가장 적습니다.

셋의 공통 전제는 관리 대상 수가 적다는 것입니다. 갈림길은 두 가지로 봅니다. 따로 올리는 단위가 열 개를 넘는지, 밤에 사람이 깨어나 손으로 되살리는 일이 한 달에 몇 번인지입니다. 둘 중 하나라도 넘으면 도구를 들이는 쪽이 쌉니다.

어느 쪽을 골라도 구성은 코드형 인프라로 적어 둡니다. 기계 몇 대에 무엇을 띄울지를 화면에서 클릭하지 않고 파일에 적어 실행하는 방식인데, 이 도구도 원하는 상태를 파일로 받기 때문에 둘은 대개 같이 갑니다.

실무 용례

"이 서비스는 항상 세 벌 떠 있게 적어 뒀으니까 한 벌 죽어도 알림만 오고 서비스는 안 끊겨요."

원하는 개수를 선언해 두었으니 복구가 자동으로 일어난다는 말입니다.

"지금은 오케스트레이션까지 갈 단계가 아닙니다. 컨테이너 여덟 개는 스크립트로 충분해요."

관리 대상이 적어서 도구를 배우고 운영하는 비용이 이득보다 크다는 판단입니다.

"배포가 한 벌씩 갈아 끼우게 돼 있어서 점심시간에 올려도 됩니다."

교체 방식이 무중단이라 사용자가 몰리는 시간을 피할 필요가 없다는 뜻입니다.

페이지덱은 서비스 네 개를 각각 세 벌씩 띄워 두고 있습니다. 태오가 하는 일은 컨테이너를 어디에 띄우는 것이 아니라 원하는 상태를 적은 파일을 고치는 것입니다. 점심시간마다 검색 요청이 세 배로 뛰는데, 사람이 지시하지 않아도 규칙에 따라 여섯 벌까지 늘고 두 시가 지나면 셋으로 돌아옵니다.

당번이 새벽에 깨는 횟수는 한 달 여섯 번에서 한 번으로 줄었습니다. 컨테이너가 죽는 일이 줄어든 것이 아니라, 죽어도 사람을 부르지 않게 된 것입니다.

흔한 오해

도구를 들이면 운영이 끝난다고 읽는 경우가 가장 많습니다. 자동 복구와 자동 확장이라는 말이 붙어 있으니 그렇게 들립니다. 하지만 이 도구는 원하는 상태를 스스로 정해 주지 않습니다. 세 벌이 전부 같은 기계에 떠 있게 적어 두면 도구는 그 상태를 성실히 유지하고, 그 기계가 꺼지는 순간 세 벌이 함께 사라집니다. 그 기계가 곧 단일 장애점, 하나가 멈추면 전체가 멈추는 자리입니다. 사람이 하던 배치 판단이 사라진 것이 아니라 파일에 적는 일로 옮겨 왔고, 잘못 적은 상태는 더 성실하게 유지됩니다.

자기 복구가 있으니 장애가 줄어든다는 생각도 절반만 맞습니다. 다시 띄우는 동작은 증상을 가립니다. 메모리가 조금씩 새어 20분마다 죽는 컨테이너를 계속 되살리면 겉으로는 세 벌이 떠 있는 정상 상태로 보이고, 원인은 몇 달을 그대로 갑니다. 그래서 관측성, 즉 안의 상황을 밖에서 알아볼 수 있게 만드는 장치를 함께 갖춰 재시작 횟수를 지켜봅니다.

자주 헷갈리는 용어

용어다루는 대상오케스트레이션과의 차이
컨테이너프로그램 한 벌을 담는 그릇하나를 어떻게 묶어 어디서나 같게 돌릴지가 컨테이너의 몫입니다. 그것이 수백 개로 늘었을 때 어디에 몇 개를 두고 죽으면 어떻게 할지를 정하는 쪽이 오케스트레이션이라, 컨테이너 없이는 쓸 일이 없고 컨테이너가 몇 개뿐이면 쓸 필요가 없습니다

같이 보면 좋은 페이지

  • 인프라

    이 도구가 어느 바닥 위에서 무엇을 다루는지 먼저 봅니다

  • 컨테이너

    오케스트레이션이 관리하는 대상 하나를 자세히 봅니다

마지막 업데이트 2026-09-16