본문 바로가기
Server-side 개발 & 트러블 슈팅/🦍 ZooKeeper (주키퍼)

[ZooKeeper] 코디네이터(Coordinator)개념과 주키퍼 소개

by 코딩하는 동현 2025. 4. 12.

분산 시스템의 조율자, 코디네이터와 주키퍼(ZooKeeper)

 

대규모 데이터를 처리하거나 복잡한 연산을 요구하는 시스템에서는 하나의 서버로 모든 작업을 처리하는 것이 비효율적이다. 이를 해결하기 위해 분산 시스템이 사용된다. 여러 대의 서버가 협업해 작업을 처리하며, 그 안에서 역할을 배분하고 상태를 감지하며, 실패가 발생했을 때 적절히 대응하는 기능이 중요해진다. 이 모든 작업을 조율하는 역할을 맡는 것이 바로 코디네이터(Coordinator)이다.

 

 

코디네이터란?

 

코디네이터는 분산된 여러 노드 간의 상태를 관리하고, 특정 노드를 리더로 선출하거나, 노드 간 통신을 중재하는 핵심적인 역할을 담당한다. 이를 통해 노드들이 충돌 없이 하나의 시스템처럼 동작할 수 있게 만든다.

 

하지만 직접 이러한 코디네이터를 구현하는 것은 어렵고 번거로운 작업이다. 각 노드의 상태를 실시간으로 감지하고, 리더 선출 등의 합의 과정을 안정적으로 구현하려면 복잡한 알고리즘과 예외 처리가 필요하다.

 

이러한 문제를 해결하기 위해 등장한 것이 아파치 주키퍼(Apache ZooKeeper)이다.

 


 

ZooKeeper란?

ZooKeeper는 분산 시스템을 위한 고성능 코디네이터로, 신뢰성과 확장성을 갖춘 오픈소스 소프트웨어이다. Kafka, Hadoop, HBase 등 여러 범용 시스템에서 핵심 코디네이터로 사용되고 있으며, 주키퍼를 이용하면 노드 간 상태 관리, 리더 선출, 구성 정보 저장 등을 쉽게 구현할 수 있다.

 

 

ZooKeeper의 핵심 개념

 

노드(Node)

분산 시스템에서 개별적으로 동작하는 프로세스를 의미하며, 각 노드는 네트워크를 통해 다른 노드와 통신한다.

 

클러스터(Cluster)

동일한 작업을 수행하는 노드들의 집합이다. 보통 동일한 코드를 실행하며 구성된다.

 

Z노드(Znode)

Znode에는 두 가지 타입이 있다:

  • 영구 노드(Persistent Znode): 클라이언트가 연결을 끊어도 유지된다.
  • 임시 노드(Ephemeral Znode): 생성한 클라이언트와의 연결이 끊기면 자동으로 삭제된다.

 

ZooKeeper는 트리 구조로 데이터를 저장한다.

트리의 각 노드를 Znode라고 부르며, 파일 시스템의 디렉토리처럼 데이터를 계층적으로 구성한다.

 

리더 선출 알고리즘

ZooKeeper의 대표 기능 중 하나는 리더 노드를 선출하는 알고리즘이다. 리더가 사라질 경우, 다른 노드들이 새 리더를 선출하여 시스템을 유지한다.

 


 

리더 선출 알고리즘 개요

ZooKeeper에서 리더를 선출하는 과정은 다음과 같은 3단계로 이루어진다:

 

1. 후보 등록

 

모든 노드는 election이라는 부모 Znode 하위에 자신을 나타내는 임시 Znode를 생성한다. 이때 Znode는 자동으로 고유한 순번이 붙는다.

 

2. 순서 확인

각 노드는 election 하위의 자식 Znode 목록을 조회하여, 자신이 생성한 노드가 몇 번째인지 확인한다.

 

3. 리더 결정

가장 작은 순번의 Znode를 생성한 노드가 리더가 된다. 그렇지 않은 노드는 리더의 지시를 따르는 일반 노드로서 동작한다.

이 구조 덕분에 리더가 다운되면 자동으로 다른 노드가 새로운 리더를 선출할 수 있다. 이는 장애 복구 및 고가용성(High Availability)에 매우 중요한 기능이다.

 


 

ZooKeeper의 장점

  • 높은 신뢰성과 가용성
    • 최소 3개 이상의 노드로 구성된 ZooKeeper 클러스터는 일부 노드가 장애를 일으켜도 전체 시스템은 정상 작동한다.
  • 쉬운 추상화 모델
    • 파일 시스템과 유사한 트리 구조의 데이터 모델은 개발자가 직관적으로 사용할 수 있도록 도와준다.
  • 자동 리더 선출 및 장애 감지 기능 내장
    • 복잡한 합의 알고리즘을 직접 구현하지 않아도 된다.
  • 다양한 시스템과 호환 가능
    • Kafka, Hadoop 등 다양한 시스템과 함께 안정적으로 동작한다.

 

마무리

분산 시스템을 설계할 때 반드시 고려해야 할 요소는 역할 분담, 상태 관리, 장애 대응이다. 이 모든 것을 일관되게 처리해주는 도구가 바로 ZooKeeper이다. 복잡한 알고리즘을 직접 구현하지 않아도 되고, 추상화된 인터페이스를 통해 쉽게 시스템을 구성할 수 있다는 점에서 ZooKeeper는 강력한 도구이다.

 

다음 글에서는 ZooKeeper의 Java API를 사용하여 직접 클러스터를 구성하고 리더 선출 알고리즘을 구현해보는 실습 내용을 다룰 예정이다.

반응형

댓글