MacOS에서는 Homebrew를 이용하여 Elasticsearch를 설치할 수 있다.
Elasticsearch를 설치하기 전에 Homebrew에서 tap
하는 과정이 필요하다.
tap
을 통해 Homebrew가 설치할 수 있는 repository를 추가하는 것이다.
brew tap elastic/tap
brew install elastic/tap/elasticsearch-full
위의 명령어를 통해 최신 버전의 Elasticsearch를 성공적으로 설치했다.
brew services start elastic/tap/elasticsearch-full
Elasticsearch의 기본 포트는 9200
이다.
curl -X GET localhost:9200
로 요청을 전달하면 설치된 Elasticsearch의 정보를 얻을 수 있다고 했다.
curl: (7) Failed to connect to localhost port 9200 after 0 ms: Couldn't connect to server
성공적으로 실행했다고 메시지가 뜨긴 하는데 localhost:9200
으로 요청하면 서버가 연결되지 않았다는 문구가 떴다.
설치된 내용을 확인하고 싶었는데 서버 연결이 되지 않아서 다양한 방법을 시도했다.
/opt/homebrew/etc/elasticsearch/elasticsearch.yml
의 설정 중에서 network.host
라는 항목이 있는데, 기본적으로 주석 처리가 되어있다. 이 부분의 주석을 해제하고, 127.0.0.1
또는 0.0.0.0
으로 변경해서 문제를 해결했다는 경우를 발견해서 적용해 봤다. 수정한 이후에 Elasticsearch를 실행했을 때, 여전히 같은 성공 문구와 같은 서버 연결 오류가 발생했다.
brew services start elastic/tap/elasticsearch-full
기존에 사용하던 brew services start
명령어는 백그라운드로 실행하는 것이라면 elasticsearch
라는 명령어로도 실행할 수 있다는 것을 알게 되었다. 해당 명령어를 사용하니 이번에는 새로운 문제가 발생했다.
오류까지는 아니었는데, elasticsearch
를 실행하니까 JAVA_HOME
을 사용하지 말고 ES_JAVA_HOME
을 사용하라는 경고 문구를 확인했다.
~/.zshrc
에 ES_JAVA_HOME
이라는 새로운 환경 변수를 추가했다.
bootstrap checks failed. you must address the points described in the following [1] lines before starting elasticsearch.
ES_JAVA_HOME
환경 변수를 추가한 이후에 발견한 또 다른 오류이다.
알고 보니까 elasticsearch.yml
에서 network.host
를 주석 해제하는 순간 외부의 연결을 허용하면서 bootstrap을 사용하려고 하느라 발생한 오류였던 것이었다.
... 다시 주석 설정했다.
ElasticsearchException[Failure running machine learning native code. This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To bypass this problem by running Elasticsearch without machine learning functionality set [xpack.ml.enabled: false].]
Elasticsearch에서 지원하는 머신 러닝 기능이 활성화되었는데, 이것에 대한 설정을 하나도 적용하지 않은 상태여서 발생한 오류였다.
당장은 사용하지 않으니 elasticsearch.yml
에 xpack.ml.enabled: false
를 추가로 작성하여 오류를 해결했다.
elasticsearch
curl -X GET localhost:9200
문제들을 해결하고 성공적으로 Elasticsearch에 대한 정보를 확인할 수 있었다.
참고한 문서도 그렇고 다들 설치 후에 쉽게 설치 정보를 확인하고 다음 단계로 넘어가는데 어쩌다 보니 나는 시작부터 이런저런 문제들과 마주하게 됐다.
이렇게 해결하고 나면 별것 아니었네 싶은 문제들을 마주할 때마다 같은 문제라도 해결에 정답은 없는 것 같다는 생각이 든다.
Elasticsearch는
network.host
를 통해 외부 IP와의 연결을 지원한다.
network.host
의 주석을 해제하거나 새로운 IP를 선언하면 동시에 Bootstrap을 포함한 다양한 기능들을 함께 사용한다고 인식되니 사용하지 않는 항목에 대한 설정과 예외 처리가 필요하다.
성공적으로 설치를 마쳤으니 SpringBoot에서 Elasticsearch를 이용하여 검색하는 기능을 구현하는 것을 공부할 예정이다.
감사합니다