[Java] 주키퍼 서버 / 클라이언트 (다운로드 및 설정)

2024. 3. 20. 12:15기술 창고/Java

728x90
SMALL

주키퍼는 분산 시스템 설계하는 데에 있어 유요한 도움을 주는 서버 및 도구입니다.

오늘은 이 주키퍼 서버 및 클라이언트를 다운로드 하고 설정하는 방법에 대해서 정리해보겠습니다.

 

 

분산 시스템을 어떻게 개발할 것인가?

지금 현재 컴퓨터가 여러 대 있지도 않고 클라우드 기기를 여러 대 사놓고 원격으로 개발하는 일은 매우 불편하고 비용도 많이 듭니다.

하지만 일반적으로 분산 시스템 개발은 정해진 방식으로 진행되는데, 이 방식이 보통 여러분 기기에서 로컬로 진행할 수 있습니다.

따라서 개발환경(IDE)에 맞춰 로컬에서 코드를 작성하고, 디버깅하고, 테스트할 수 있습니다.

 

일반적으로 로컬에서 개발을 마친 다음에 개발한 프로그램을 검증하기 위해 클러스터 같은 플랫폼에 배포하고 품질 검증을 거칩니다.

그러고 나서 실제 운영 클러스터에 배포합니다.

 

 

설치 과정

https://zookeeper.apache.org/releases.html

 

Apache ZooKeeper

<!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or ag

zookeeper.apache.org

 

다운받을 버전의 주키퍼를 선택해줍니다.

저는 최신화 버전이 아닌 안정된 버전인 stable 버전을 선택했습니다.

 

 

여러가지 옵션이 적용된 파일이 존재하지만 기본 파일을 받아줍니다.

 

 

다운로드 받은 파일을 압축 해제하고, 여러 파일들이 존재하는 것을 확인할 수 있는데 여기서 중요한 것은 bin 폴더입니다.

이 bin 폴더에는 주키퍼를 실행하고 제어하는 스크립트들이 존재합니다.

 

 

다시 상위 경로로 돌아와서 모든 로그를 저장할 logs 폴더를 만들어줍니다.

 

 

그리고 conf 폴더 경로로 들어가보면 3개 정도의 설정 파일들을 볼 수 있는데, 여기서 확인해야할 파일은 zoo_sample 설정 파일입니다.

(저는 일단 이 zoo_sample 이라는 이름은 길기 때문에 줄여서 그냥 zoo 로 이름을 변경해주었습니다.)

 

이 zoo 설정 파일은 주키퍼가 동작하는 동안 사용됩니다.

이 파일이 주키퍼를 독립 실행형(Standalone) 서버로 실행되도록 설정해줍니다.

즉, 클러스터로 동작하는 대신 단일 프로세스로 실행됩니다.

 

 

이 zoo 파일을 실행하여 dataDir 항목을 방금 만든 logs 폴더 경로로 지정해줍니다.

이제 모든 로그들은 해당 경로로 들어가지게 될 것입니다.

 

아래의 clientPort는 소통하고자 하는 클라이언트의 포트 번호를 지정해줍니다.

만지지 않아도 됩니다.

이후, ctrl + s 를 눌러 저장해줍니다.

 

 

이제 주키퍼를 실행해보겠습니다.

저는 윈도우 환경이기 때문에 cmd로 실행하였습니다.

(!! 주키퍼를 실행할 때 반드시 JDK가 컴퓨터에 설치되어있고, 시스템 변수에 JAVA_HOME 환경 설정이 지정되어 있어야 합니다.)

 

우선, cd 명령어를 통해 주키퍼 bin 폴더 경로로 진입해주고, dir  명령어를 통해 파일들이 존재하는지 확인해줍니다.

그리고 만약, 윈도우 환경이면 zkServer.cmd 를, MAC과 같은 환경이면 zkServer.sh 를 실행해줍니다.

 

이러한 화면이 나온다면 정상적으로 실행된 것입니다.

 


 

이제 주키퍼와 통신할 Java 코드를 작성하기 이전에, 주키퍼 내부 동작을 시각화하고 디버그하는 데 도움이 되는 커맨드라인 도구에 대해 알아보겠습니다.

 

!! 이 커맨드라인 도구를 사용할 때 반드시 skServer 가 실행된 상태를 유지하고 있어야 합니다 !!

 

bin 폴더 내부에 있는 zkCli는 주키퍼와 연결하여 우리가 자바 코드를 작성하지 않고도 주키퍼 커맨드를 보낼 수 있도록 도와줍니다.

 

실행해보면 아까 봤던 2181 클라이언트 포트 번호를 통해 실행되는 것을 알 수 있습니다.

마찬가지로, 저는 윈도우 환경이기 때문에 zkCli.cmd 를 실행하였습니다.

 

실행 후 help 명령어를 통해 사용 가능한 커맨드 명령어들을 확인할 수 있습니다.

 

 

[ ls 명령어 ]

ls 명령어는 입력한 경로에 현재 주키퍼가 생성한 z노드들 리스트를 확인시켜주는 명령어입니다.

현재 / 루트 디렉토리에 생성된 z노드를 확인하려고 했으나 당연히도 아무런 생성을 해주지 않았기 때문에 아무런 노드가 확인되지 않는 것을 볼 수 있습니다.

 

 

[ create 명령어 ]

create 명령어는 말 그대로 노드를 생성하는 명령어입니다.

create /{생성할 노드} {데이터} 명령어 형식을 통해 노드를 생성합니다.

위의 이미지에 보이는 것처럼 parent라는 노드를 생성하고 "some parent data" 텍스트 데이터를 넣어주었습니다.

다시 ls 명령어를 통해 확인해보면,  parent라는 노드가 생성된 것을 확인할 수 있습니다.

 

만약 특정 노드에 하위 노드를 생성하고 싶으면 특정 노드에 생성 노드를 붙여 생성하면 됩니다.

create /{특정 노드}/{생성 노드} {데이터} 명령어 형식을 통해 노드를 생성합니다.

ls 명령어를 통해 하위 노드를 확인할 때에도 ls {특정 노드} 명령어를 입력하여 생성된 하위 노드를 확인할 수 있습니다.

 

 

[ get 명령어 ]

특정 노드에 대한 정보를 확인하려면 get 명령어를 사용합니다.

get /{노드} 명령어 형식을 통해 정보를 확인합니다.

아까 생성 시 넣어주었던 some parent data, some child data 정보가 확인되는 것을 볼 수 있습니다.

 

 

[ delete 명령어 ]

노드를 삭제할 때는 delete 명령어를 사용합니다.

delete /{노드} 명령어 형식을 통해 특정 노드를 삭제할 수 있습니다.

다만, 해당 노드에 하위 노드가 생성이 된 상태라면 위의 이미지와 같이 삭제되지 않습니다.

이럴 때 모두 한번에 삭제하기 위해서는 deleteall 명령어를 사용합니다.

deleteall /{노드} 명령어 형식을 통해 특정 노드와 해당 노드의 하위 노드들을 한 번에 삭제할 수 있습니다.

 

 

 

이렇게 주키퍼를 설치하고 도움이 되는 커맨드라인 도구들을 간단하게 알아보았습니다.

다음에는 본격적으로 주키퍼를 활용하는 내용을 정리해보도록 하겠습니다.

728x90
반응형
LIST