#4-1 Zookeeper란?
# Zookeeper: 분산 시스템의 조력자?
Zookeeper는 분산 시스템에서 필수적인 구성 요소다. 처음에는 이게 뭔가 싶었는데, 알고 보니 여러 서버를 조율하는 역할을 한다. 마치 오케스트라에서 지휘자가 하는 역할과 비슷하달까? 분산 환경에서는 여러 노드가 서로 정보를 공유하고 협력해야 하는데, 이를 안정적으로 관리해 주는 게 Zookeeper다.
## Zookeeper는 뭘 하는 걸까? 🤔
Zookeeper는 분산 시스템을 위한 **코디네이션 서비스**다. 여기서 말하는 코디네이션이란 서버 간의 상호작용을 조율하는 걸 의미한다. 단순한 데이터 저장소가 아니라, 노드 간의 정보 공유, 이벤트 관리, 동기화 같은 중요한 역할을 한다.
이걸 이해하려면 먼저 Zookeeper의 핵심 기능을 살펴봐야 한다.
## Zookeeper의 핵심 기능 📌
1. **분산 환경 관리**: 여러 서버가 동시에 동작하는 환경에서 일관성을 유지하는 역할을 한다.
2. **코디네이터 시스템**: 서버들 간의 조율을 담당하며, 락(lock)과 리더 선출 같은 중요한 작업을 수행한다.
3. **znode 구조**: 데이터를 **znode**라는 트리 구조로 관리하는데, 파일 시스템과 비슷한 방식이다.
> 여기서 znode는 zookeeper node의 약자다.
4. **고가용성**: 최소 3대 이상의 서버가 하나의 **앙상블(ensemble)**을 구성해서 운영된다. 한두 개의 서버가 죽어도 시스템이 유지된다.
5. **빠른 성능**: 데이터를 메모리에 저장하기 때문에 빠르게 접근할 수 있다. 다만, 영구 저장을 위해 주기적으로 디스크에 기록한다.
6. **다양한 기능**: **리더 선출, 락 관리, 그룹 멤버십, 네이밍 서비스** 같은 기능을 제공한다.
## 그런데 왜 "Zookeeper"일까? 🦁🐘🦒
이름부터 재미있다. Zookeeper(동물원 사육사)? 처음에는 왜 이런 이름이 붙었는지 의아했다. 그런데 생각해 보면 여러 개의 서버(각기 다른 동물들)를 통제하고 관리하는 역할을 하니, 꽤 적절한 이름이라는 생각이 든다.
## 앞으로 더 공부해야 할 부분 💭
Zookeeper는 Hadoop, HBase, Kafka 같은 분산 시스템에서 필수적으로 사용된다고 한다. 결국 zookeeper를 이해하지 못하면 제대로 된 분산 시스템을 설계하는 것도 어렵다고 생각한다. kafka를 실습해보면서 익숙해져야겠다.