아파치 주키퍼(Apache ZooKeeper)는 대규모 분산 시스템에서의 구성 정보 관리, 네임 서비스, 동기화, 그룹 서비스 등을 제공하기 위해 설계된 오픈소스 분산 코디네이션 서비스이다. Apache Software Foundation의 프로젝트 중 하나로, Java로 구현되었으며 Apache License 2.0 하에 배포된다.
개요
아파치 주키퍼는 분산 애플리케이션이 서로 협업하고 상태를 일관되게 유지하도록 돕는 중앙화된 서비스이다. 주된 기능은 다음과 같다.
- 구성 데이터 저장: 트리 구조(노드 기반)의 파일 시스템과 유사한 데이터 모델을 제공하여, 애플리케이션은 설정값이나 메타데이터를 저장·조회할 수 있다.
- 리더 선출 및 상태 동기화: 분산 환경에서 리더를 선출하고, 클러스터 내 노드들의 상태를 실시간으로 동기화한다.
- 그룹 관리: 클러스터 내 서버나 서비스 인스턴스의 그룹을 관리하고, 멤버십 변화를 감지한다.
- 잠금(Lock) 메커니즘: 순차적 또는 배타적 잠금을 제공하여 동시성 제어를 지원한다.
아키텍처
아파치 주키퍼는 주키퍼 서버(zookeeper server)와 클라이언트(zookeeper client)로 구성된다. 서버는 다수의 인스턴스로 구성된 주키퍼 앙상블(ensemble)을 이루며, 일반적으로 3, 5, 7개의 서버가 사용된다. 앙상블은 Zab(Ζookeeper Atomic Broadcast) 프로토콜을 이용해 상태 변화를 원자적으로 전파하고, 리더-팔로워 방식을 통해 쓰기 요청을 순서대로 처리한다.
- 리더: 쓰기 요청을 순차적으로 처리하고, 변경 사항을 팔로워에게 전파한다.
- 팔로워: 리더가 전송한 로그를 복제하고, 읽기 요청을 처리한다.
- 옵저버(Observer): 읽기 전용으로 동작하며, 로그 복제는 수행하지만 합의 과정에 참여하지 않는다. 이를 통해 읽기 부하를 분산시킬 수 있다.
클라이언트는 서버와 세션을 유지하며, 워치(watch) 메커니즘을 통해 데이터 변화에 대한 알림을 받을 수 있다. 워치는 일회성 이벤트이며, 변화가 감지되면 클라이언트에 콜백이 전달된다.
주요 특징
| 특징 | 설명 |
|---|---|
| 일관성 보장 | 모든 클라이언트가 동일한 순서로 업데이트를 관찰하도록 보장한다. |
| 고가용성 | 다수의 서버가 장애 복구를 자동으로 수행한다. |
| 간단한 API | 기본적인 CRUD, 워치, 동기화 메서드를 제공한다. |
| 확장성 | 읽기 전용 옵저버를 추가함으로써 읽기 스루풋을 향상시킬 수 있다. |
| 다양한 언어 바인딩 | Java 외에도 C, Python, Go 등 여러 언어용 클라이언트 라이브러리를 제공한다. |
역사
- 2008년: Yahoo!에서 내부 프로젝트로 시작되어 Apache Incubator에 편입되었다.
- 2010년 2월: Apache Incubator을 졸업하고 정식 프로젝트가 되었다.
- 2011년: 3.4.0 버전에서 Zab 프로토콜이 도입되어 안정적인 합의 메커니즘을 제공하였다.
- 이후: 3.x, 3.5.x, 3.6.x, 3.7.x 등 지속적인 업데이트가 이루어졌으며, 최신 3.8.x 버전은 보안 강화와 성능 개선을 포함한다.
사용 사례
아파치 주키퍼는 다음과 같은 분야에서 널리 활용된다.
- 분산 파일 시스템(예: HDFS)에서 네임노드의 메타데이터 관리.
- 메시징 시스템(예: Apache Kafka)에서 브로커 메타데이터와 컨슈머 오프셋 관리.
- 서비스 디스커버리 및 로드 밸런싱에서 인스턴스 등록·조회.
- 분산 락을 이용한 배치 작업 스케줄링.
- 컨피규레이션 관리 시스템에서 실시간 설정 변경 전파.
라이선스 및 커뮤니티
아파치 주키퍼는 Apache License 2.0 하에 배포되며, 전 세계 개발자와 기업이 참여하는 활발한 커뮤니티가 존재한다. 공식 메일링 리스트, JIRA 이슈 트래커, GitHub 저장소를 통해 버그 보고, 기능 개선, 보안 패치 등이 이루어진다.
참고
- 공식 웹사이트: https://zookeeper.apache.org
- Apache Software Foundation 프로젝트 페이지
- 주요 논문 및 기술 보고서: “ZooKeeper: Wait-free Coordination for Internet-scale Systems” (2010)
(본 문서는 2026년 현재 공개된 신뢰할 수 있는 자료를 기반으로 작성되었습니다.)