- 분산 작업을 제어하기 위한 트리 형태의 데이터 저장소
- 분산 서버 간의 정보 공유, 서버 투입/제거 시 이벤트 처리, 서버 모니터링, 시스템 관리, 분산 락 처리, 장애 상황 판단 등의 분야에서 활용 가능
- 데이터를 디렉터리 구조로 저장하고, 데이터가 변경되면 클라이언트에게 어떤 노드가 변경됐는지 콜백을 통해서 알려줌
- 클러스터를 znode로 구성, znode 내 yaml 포맷을 통해 클러스터의 서버 정보를 저장 (YAML 포맷)
- Persistent Node : 한번 저장되고 나면 클라이언트와의 세션이 종료되어도 삭제되지 않고 유지되는 노드 (명시적으로 삭제되지 않는 한 해당 데이터는 삭제 또는 변경되지 않음)
- Ephemeral Node : 특정 노드를 생성한 클라이언트와의 세션이 유효한 동안 그 노드의 데이터가 유효한 노드 (세션 종료 시 자동 삭제)
- Sequence Node : 노드 생성 시 sequence number가 자동으로 붙는 노드 (분산 락 등을 구현)
- 주키퍼 클라이언트가 특정 znode에 watch를 걸어놓을 경우 해당 znode가 변경이 되었을 때 클라이언트로 콜백 호출을 날려 해당 클라이언트가 변경됨을 알게 됨
- 주키퍼 고가용성을 지원하기 위한 서버 그룹
- 서버 한 대는 쓰기 명령을 총괄하는 리더 역할을 수행하고, 나머지는 팔로어 역할을 수행
- 동장 방식 : 리더 주키퍼는 모든 팔로어 주키퍼에게 해당 쓰기를 수행할 수 있는지 질의 -> 팔로어 중 과반수로부터 쓸수 있다는 응답을 받으면 팔로어에게 데이터를 쓰도록 지시
- 큐 : Watcher와 Sequence Node를 통해 설계 가능, 데이터가 들어오면 Sequence Node의 Sequence를 추가하고, 해당 정보를 구독하는 서버는 콜백을 통해 Queue의 pub/sub 기능을 구현할 수 있음
- 서버 설정 및 클러스터 정보 : 각 클러스터 내의 서버 설정 및 해당 클러스터 정보를 저장하고, Watcher를 통해 해당 정보를 동기화함
- 글로벌 락 : 여러개의 서버로 구성된 분산 서버의 공유 자원을 접근해야 할 때 하나의 작업만이 발생해야 한다고 하면 그 작업에 Lock을 걸고 작업할 수 있는 기능을 구현함.
- 주키퍼는 수십, 수백대의 서버 및 이에 대한 클러스터 정보를 운영 및 관리하기 위한 오픈 소스
- AWS의 서비스 중 로드 밸런스 및 오토 스케일링 기반의 paas와 유사한 개념 (EC2, RDS, DynamoDB 등)
- 바퀴를 새롭게 개발할 필요 없이 AWS 클라우드 서버 임대를 이용할 경우 이와 비슷한 개념의 서비스를 AWS에서 제공함



