분산 시스템 환경에서 중요한 역할을 담당하는 Apache ZooKeeper(아파치 주키퍼), 혹시 여러분이 사용 중인 버전의 지원이 언제까지 유지되는지 확인해 보셨나요? 시스템 운영 중에 갑작스런 보안 패치 중단이나 기술 지원 종료로 당황하지 않도록, 오늘은 ZooKeeper(주키퍼)의 버전별 지원 종료 일정을 자세히 알아보겠습니다.
1. Apache ZooKeeper란? 분산 코디네이션의 핵심
Apache ZooKeeper는 분산 애플리케이션을 위한 고신뢰성 코디네이션 서비스입니다. 원래 Yahoo!에서 개발되어 현재는 Apache Software Foundation의 최상위 프로젝트로 운영되고 있습니다.
ZooKeeper의 주요 기능은 다음과 같습니다:
- 분산 구성 서비스(Distributed Configuration Service): 클러스터 전체의 설정 정보를 중앙에서 관리
- 동기화 서비스(Synchronization Service): 분산 환경에서의 프로세스 동기화
- 네이밍 레지스트리(Naming Registry): 분산 시스템의 서비스 디스커버리
Facebook(Meta), Twitter, LinkedIn, Netflix 등 수많은 대기업들이 핵심 인프라로 활용하고 있으며, 특히 Apache Kafka의 메타데이터 관리에 핵심적으로 사용되어 왔습니다.
2. ZooKeeper 지원 정책 이해하기
Apache ZooKeeper 커뮤니티는 독특한 지원 정책을 운영합니다. 동시에 두 개의 릴리즈 브랜치만 지원하는데, 이는 ‘stable’과 ‘current’ 버전입니다.
지원 정책의 핵심 원칙
- Stable 버전: 안정적이고 검증된 버전으로 프로덕션 환경에 권장
- Current 버전: 최신 기능이 포함된 버전으로 새로운 기능 테스트용
- EOL 예고 기간: 새로운 마이너 버전 출시 후 약 6개월 후 이전 stable 버전 EOL 발표
- Grace Period: EOL 발표 전까지 보안 및 중요 버그 수정만 제공
새로운 마이너 버전이 출시되면 기존 stable 버전은 곧 지원이 종료되며, 약 6개월의 유예 기간을 거쳐 공식적으로 End-of-Life가 선언됩니다.
3. 버전별 상세 지원 종료 일정표
주요 버전 시리즈별 EOL 현황
다음 표는 Apache ZooKeeper의 각 버전별 지원 종료 일정을 정리한 것입니다:
버전 시리즈 | 첫 릴리즈 | 마지막 릴리즈 | EOL 발표일 | 지원 상태 | 다운로드 가능 기간 |
---|---|---|---|---|---|
3.4.x | 2011년 11월 | 3.4.14 (2019년 3월) | 2021년 6월 1일 | ❌ EOL | 2022년 6월 1일까지 |
3.5.x | 2019년 5월 | 3.5.10 (2022년 2월) | 2022년 6월 1일 | ❌ EOL | 2023년 6월 1일까지 |
3.6.x | 2020년 3월 | 3.6.4 (2022년 12월) | 2022년 12월 30일 | ❌ EOL | 2023년 12월 30일까지 |
3.7.x | 2021년 7월 | 3.7.2 (2023년 12월) | 2024년 2월 2일 | ❌ EOL | 2025년 2월 2일까지 |
3.8.x | 2022년 2월 | 3.8.5 (2024년 9월) | 미정 | ✅ Stable | 현재 지원 중 |
3.9.x | 2023년 7월 | 3.9.4 (2024년 10월) | 미정 | ✅ Current | 현재 지원 중 |
3.10.x | 계획 중 | 개발 중 | 미정 | 🔄 개발 중 | Java 17 최소 요구 |
세부 패치 버전별 완전한 릴리즈 목록
3.9.x 시리즈 (Current – 현재 지원 중):
버전 | 릴리즈 날짜 | 주요 특징 | Java 버전 |
---|---|---|---|
3.9.4 | 2024년 10월 | CVE 수정, 로그백 업그레이드 | Java 8+ |
3.9.3 | 2024년 6월 | 보안 패치, 성능 개선 | Java 8+ |
3.9.2 | 2024년 3월 | 버그 수정 릴리즈 | Java 8+ |
3.9.1 | 2024년 1월 | 버그 수정 릴리즈 | Java 8+ |
3.9.0 | 2023년 7월 | 새로운 Admin Server API, Watch 개선 | Java 8+ |
3.8.x 시리즈 (Stable – 현재 지원 중):
버전 | 릴리즈 날짜 | 주요 특징 | Java 버전 |
---|---|---|---|
3.8.5 | 2024년 9월 | 버그 수정, CVE 패치 | Java 8+ |
3.8.4 | 2023년 11월 | Jetty 업그레이드, 보안 수정 | Java 8+ |
3.8.3 | 2023년 5월 | 버그 수정 릴리즈 | Java 8+ |
3.8.2 | 2023년 2월 | 버그 수정 릴리즈 | Java 8+ |
3.8.1 | 2022년 10월 | 버그 수정 릴리즈 | Java 8+ |
3.8.0 | 2022년 2월 | 새로운 주요 기능, 성능 개선 | Java 8+ |
현재 지원되는 버전 (2024년 12월 기준)
현재 Apache ZooKeeper 커뮤니티에서 공식 지원하는 버전은 다음과 같습니다:
- 3.8.x 시리즈 (Stable): 3.8.5가 최신 버전
- 3.9.x 시리즈 (Current): 3.9.4가 최신 버전
향후 3.10.x 버전 계획
Apache ZooKeeper 개발진은 3.10.0 버전을 계획 중이며, 주요 변경사항은 다음과 같습니다:
- Java 17 최소 요구사항: 기존 Java 8에서 Java 17로 업그레이드
- Jetty 12.x 업그레이드: 최신 보안 표준 지원
- 성능 최적화: 메모리 사용량 개선 및 처리 성능 향상
- 새로운 기능: Admin Server API 확장 및 모니터링 기능 강화
4. 지원 종료된 버전들의 상세 정보
EOL 버전별 세부 릴리즈 정보
3.7.x 시리즈 – 2024년 2월 2일 EOL
버전 | 릴리즈 날짜 | 주요 특징 | Java 버전 |
---|---|---|---|
3.7.2 | 2023년 12월 | 마지막 릴리즈, CVE 수정 | Java 8+ |
3.7.1 | 2022년 5월 | 버그 수정, TLS 개선 | Java 8+ |
3.7.0 | 2021년 7월 | TLS 1.3 지원, Admin Server 개선 | Java 8+ |
3.6.x 시리즈 – 2022년 12월 30일 EOL
버전 | 릴리즈 날짜 | 주요 특징 | Java 버전 |
---|---|---|---|
3.6.4 | 2022년 12월 | 마지막 릴리즈, Log4j 제거 | Java 8+ |
3.6.3 | 2021년 4월 | 보안 패치, 안정성 개선 | Java 8+ |
3.6.2 | 2020년 9월 | 버그 수정 릴리즈 | Java 8+ |
3.6.1 | 2020년 5월 | 호환성 개선 | Java 8+ |
3.6.0 | 2020년 3월 | 새로운 주요 기능 추가 | Java 8+ |
3.5.x 시리즈 – 2022년 6월 1일 EOL
버전 | 릴리즈 날짜 | 주요 특징 | Java 버전 |
---|---|---|---|
3.5.10 | 2022년 2월 | 마지막 릴리즈, CVE 수정 | Java 8+ |
3.5.9 | 2021년 1월 | 보안 패치 | Java 8+ |
3.5.8 | 2020년 5월 | 버그 수정 | Java 8+ |
3.5.7 | 2020년 1월 | 안정성 개선 | Java 8+ |
3.5.0-3.5.6 | 2019-2019 | 초기 릴리즈들 | Java 8+ |
3.4.x 시리즈 – 2021년 6월 1일 EOL
버전 | 릴리즈 날짜 | 주요 특징 | Java 버전 |
---|---|---|---|
3.4.14 | 2019년 3월 | 마지막 릴리즈 | Java 7+ |
3.4.13 | 2018년 7월 | 보안 수정 | Java 7+ |
3.4.12 | 2018년 5월 | 버그 수정 | Java 7+ |
3.4.11 | 2017년 11월 | Java 9 지원 추가 | Java 7+ |
3.4.0-3.4.10 | 2011-2017 | 초기 안정 버전들 | Java 6+/7+ |
Java 버전 호환성 매트릭스
ZooKeeper 버전 | 최소 Java 버전 | 권장 Java 버전 | 테스트된 최대 버전 | 빌드 요구사항 |
---|---|---|---|---|
3.10.x (계획) | Java 17 | Java 17+ | Java 21 | Java 17+ |
3.9.x | Java 8 | Java 11+ | Java 21 | Java 8+ |
3.8.x | Java 8 | Java 11+ | Java 17 | Java 8+ |
3.7.x | Java 8 | Java 11+ | Java 17 | Java 8+ |
3.6.x | Java 8 | Java 8+ | Java 15 | Java 8+ |
3.5.x | Java 8 | Java 8+ | Java 15 | Java 8+ |
3.4.x | Java 7 | Java 8+ | Java 11 | Java 7+ |
중요한 보안 취약점 히스토리
CVE 번호 | 영향 버전 | 수정 버전 | 심각도 | 설명 |
---|---|---|---|---|
CVE-2024-12798 | 3.9.0-3.9.3 | 3.9.4+ | 높음 | Logback 취약점 |
CVE-2024-6763 | 3.7.0-3.7.1 | 3.7.2+ | 중간 | Jetty HTTP 취약점 |
CVE-2023-43642 | 3.8.0-3.8.3 | 3.8.4+ | 높음 | Snappy-java 취약점 |
CVE-2021-34429 | 3.6.0-3.6.2, 3.7.0 | 3.6.3+, 3.7.1+ | 높음 | Jetty 취약점 |
Log4Shell | 3.5.x 이하 | 3.6.4+ | 치명적 | Log4j 원격 코드 실행 |
5. 업그레이드 가이드라인과 마이그레이션 경로
권장 업그레이드 경로 매트릭스
현재 버전 | 1단계 업그레이드 | 2단계 업그레이드 | 최종 목표 | 예상 소요 시간 |
---|---|---|---|---|
3.4.x | → 3.5.10 | → 3.8.5 | → 3.9.4 | 2-3주 |
3.5.x | → 3.6.4 | → 3.8.5 | → 3.9.4 | 1-2주 |
3.6.x | → 3.7.2 | → 3.8.5 | → 3.9.4 | 1주 |
3.7.x | → 3.8.5 | → 3.9.4 (선택) | – | 3-5일 |
3.8.x | → 3.9.4 (선택) | – | – | 1-2일 |
버전별 업그레이드 주의사항
3.4.x → 3.5.x 업그레이드 시:
- ⚠️ Java 8 필수: Java 7 지원 중단
- 🔧 Configuration 변경: 일부 설정 파라미터 변경 필요
- 📊 새로운 메트릭: JMX 메트릭 구조 변경
3.5.x → 3.6.x 업그레이드 시:
- 🔐 보안 강화: SASL 인증 방식 개선
- 📝 Audit Log: 새로운 감사 로그 기능 추가
- 🚀 성능 개선: 메모리 사용량 최적화
3.6.x → 3.7.x 업그레이드 시:
- 🔒 TLS 1.3: 새로운 암호화 프로토콜 지원
- 🎛️ Admin Server: REST API 확장
- 🐛 Log4j 제거: reload4j로 교체
3.7.x → 3.8.x 업그레이드 시:
- 📈 성능 향상: 처리량 및 지연시간 개선
- 🔧 새로운 설정: 추가 구성 옵션 제공
- 🛡️ 보안 패치: 다수의 CVE 수정
3.8.x → 3.9.x 업그레이드 시:
- 🎯 새로운 API: Admin Server API 확장
- 👀 Watch 개선: 향상된 이벤트 처리
- 📊 모니터링: 새로운 메트릭 및 진단 도구
Rolling Upgrade 지원 매트릭스
업그레이드 경로 | Rolling 지원 | 다운타임 | 클라이언트 호환성 |
---|---|---|---|
3.4.x → 3.5.x | ✅ 지원 | 없음 | 역호환 |
3.5.x → 3.6.x | ✅ 지원 | 없음 | 역호환 |
3.6.x → 3.7.x | ✅ 지원 | 없음 | 역호환 |
3.7.x → 3.8.x | ✅ 지원 | 없음 | 역호환 |
3.8.x → 3.9.x | ✅ 지원 | 없음 | 역호환 |
3.x → 3.10.x | ⚠️ 확인 필요 | 미정 | Java 17 필요 |
클라이언트 호환성 표
서버 버전 | 3.4.x 클라이언트 | 3.5.x 클라이언트 | 3.6.x 클라이언트 | 3.7.x 클라이언트 | 3.8.x 클라이언트 | 3.9.x 클라이언트 |
---|---|---|---|---|---|---|
3.4.x | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
3.5.x | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
3.6.x | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
3.7.x | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
3.8.x | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
3.9.x | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
6. Confluent Platform과 ZooKeeper 지원 일정
Confluent Platform에서도 ZooKeeper 지원 종료를 발표했습니다. Confluent Platform 7.9.x가 ZooKeeper를 포함하는 마지막 버전이며, 8.0.x부터는 KRaft 아키텍처로 완전히 전환됩니다.
Confluent의 ZooKeeper 지원 일정
- Standard Support: 2027년 2월 19일까지 지원
- Platinum Support: 2028년 2월 19일까지 지원
이는 Confluent Platform 7.9.x 릴리즈 이후 각각 2년, 3년간 지원을 의미합니다.
7. 마이그레이션을 위한 실무 체크리스트
사전 준비 단계별 체크리스트
1단계: 현재 환경 분석 (1-2일)
- [ ] 현재 ZooKeeper 버전 확인
# 방법 1: 서버 상태 확인
echo "stat" | nc localhost 2181 | grep "ZooKeeper version"
# 방법 2: 로그 파일 확인
grep "Server environment" zookeeper.out
# 방법 3: JMX를 통한 확인
jconsole localhost:9999 # JMX 포트 연결
- [ ] Java 버전 호환성 확인
- [ ] 클라이언트 애플리케이션 호환성 점검
- [ ] 현재 설정 파일 백업 (
zoo.cfg
,myid
, 로그 설정) - [ ] 클러스터 토폴로지 문서화
2단계: 백업 및 테스트 환경 구축 (2-3일)
- [ ] 데이터 디렉토리 전체 백업
# 데이터 및 로그 디렉토리 백업
tar -czf zookeeper-backup-$(date +%Y%m%d).tar.gz \
/var/lib/zookeeper/data \
/var/lib/zookeeper/logs \
/etc/zookeeper/zoo.cfg
- [ ] 스냅샷 백업 생성
- [ ] 테스트 클러스터 구축
- [ ] 업그레이드 시나리오 테스트
3단계: 업그레이드 실행 계획 (1일)
- [ ] 롤링 업그레이드 순서 결정
- [ ] 다운타임 창구 협의
- [ ] 롤백 절차 수립
- [ ] 모니터링 도구 준비
버전별 상세 업그레이드 절차
Rolling Upgrade 표준 절차:
# 1. Follower 노드부터 업그레이드
# 노드 1 업그레이드
systemctl stop zookeeper
# 새 버전 설치
systemctl start zookeeper
# 헬스체크 확인
echo "ruok" | nc localhost 2181
# 2. 다음 Follower 노드 (동일한 절차)
# 3. Leader 노드는 마지막에 업그레이드
업그레이드 후 검증 체크리스트
기능 검증:
- [ ] 클러스터 상태 확인 (
echo "stat" | nc localhost 2181
) - [ ] 리더 선출 정상 작동 확인
- [ ] 클라이언트 연결 테스트
- [ ] 데이터 무결성 확인
- [ ] 성능 메트릭 비교
보안 검증:
- [ ] TLS/SSL 연결 테스트
- [ ] SASL 인증 확인
- [ ] ACL 권한 테스트
Kafka 연동 환경 추가 고려사항:
ZooKeeper를 Kafka와 함께 사용하는 경우:
- [ ] Kafka 브로커와의 호환성 확인
- [ ] 메타데이터 마이그레이션 테스트
- [ ] 컨슈머 그룹 정보 무결성 확인
- [ ] KRaft 모드 마이그레이션 계획 수립 (Kafka 3.3+)
자동화 스크립트 예제
헬스체크 스크립트:
#!/bin/bash
# zk-health-check.sh
ZK_HOSTS="zk1:2181,zk2:2181,zk3:2181"
for host in $(echo $ZK_HOSTS | tr "," "\n"); do
response=$(echo "ruok" | nc ${host/:/ } 2>/dev/null)
if [ "$response" != "imok" ]; then
echo "ALERT: $host is not responding correctly"
exit 1
fi
done
echo "All ZooKeeper nodes are healthy"
버전 확인 스크립트:
#!/bin/bash
# check-zk-versions.sh
for host in zk1 zk2 zk3; do
echo "=== $host ==="
ssh $host "echo 'stat' | nc localhost 2181 | grep 'ZooKeeper version'"
done
8. 보안 관점에서의 EOL 버전 위험성
지원이 종료된 ZooKeeper 버전을 계속 사용하는 것은 다음과 같은 보안 위험을 수반합니다:
주요 보안 위험
- CVE 패치 중단: 새로 발견되는 보안 취약점에 대한 패치 제공 중단
- Log4j 취약점: 과거 버전들은 Log4j 관련 CVE에 노출될 수 있음
- TLS/SSL 지원: 최신 암호화 표준 지원 부족
특히 2021년 Log4Shell 취약점 사태에서 보듯이, 오래된 버전의 라이브러리 사용은 심각한 보안 위험을 초래할 수 있습니다.
Apache ZooKeeper는 분산 시스템의 핵심 인프라이므로, 버전 관리가 매우 중요합니다. 현재 EOL된 버전을 사용 중이라면 즉시 업그레이드 계획을 수립하시길 추천드립니다.
- 현재 지원되는 3.8.x 또는 3.9.x 버전 사용
- 정기적인 버전 업데이트 계획 수립
- 보안 패치 및 릴리즈 노트 모니터링
- 테스트 환경에서의 충분한 검증 후 프로덕션 적용
주요 참고 자료:
- Apache ZooKeeper 공식 릴리즈 페이지
- ZooKeeper 3.9.4 릴리즈 노트
- ZooKeeper 3.8.5 릴리즈 노트
- EndOfLife.date – ZooKeeper
- Confluent Platform ZooKeeper 지원 정책
- Apache ZooKeeper 업그레이드 FAQ
- ZooKeeper GitHub 저장소
추가 유용한 링크: