Backup

mac / elasticsearch autocomplete 설정기 (1)

두라미 2024. 3. 12. 17:00

아래 기재된 내용은, autocomplete을 사용하기 위해, 로컬에 elasticsearch로 세팅을 해본 과정에 대해 적은 것 입니다. 계속 추가중에 있습니다. 시간순에 따라 번호를 넘버링한 것으로, 꼭 맞는 절차만 포함된 것이 아닙니다. 최선의 설정인지에 대해서 확인하지 못했습니다. 이점 참고 부탁드립니다. 


 

환경 


https://github.com/elastic/homebrew-tap/issues/157

 

 

1-1) homebrew. 이걸로 설치 안되네요. 위와 같은 오류를 저도 겪었습니다. 

 

 

https://www.elastic.co/guide/en/elasticsearch/reference/8.10/targz.html#install-macos

 

1-2) 위 방법으로 설치 가능하네요.  

 

curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.4-darwin-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.4-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c - 
tar -xzf elasticsearch-8.10.4-darwin-x86_64.tar.gz
cd elasticsearch-8.10.4/

 

 

이하 elasticsearch.yml의 config는 

elasticsearch-8.10.4/config/elasticsearch.yml 여기서 해야됨

 

2) ES_HOME 설정 해준다.

저는 zshrc에서 설정해줌

 

source ~/.zshrc로 확인한 모습

 

3) elasticsearch autocomplete example 로 검색해 봤어요. 

https://docs.elastic.co/search-ui/tutorials/elasticsearch

https://docs.elastic.co/search-ui/api/react/components/search-box

https://docs.elastic.co/search-ui/solutions/ecommerce/autocomplete

 

4) /Users/doorahmie/elasticsearch-8.10.4 이 경로에서 

./bin/elasticsearch 명령어를 통해 실행시킴.

 

5) curl localhost:9200 요청을 날리니 

curl: (52) Empty reply from server

위와 같은 결과를 리턴했습니다. 

 

elastic 커뮤니티 답변(2023년 4월)에 따르면, 이는  "xpack.security.enabled: true"인 설정때문에 그렇다고 하네요. 저는 yml파일에서 이를 false로 변경했어요. 이 블로그도 참고

 

그리고서는 https로 요청 보냈어요. 응답 제대로 안와서 보니까 

https://stackoverflow.com/questions/62658941/error-write-eproto-34557064error100000f7ssl-routinesopenssl-internalwrong

 

Error: write EPROTO 34557064:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER

Error: write EPROTO 34557064:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:../../third_party/boringssl/src/ssl/tls_record.cc:242: The issue was that I was trying to POST to https

stackoverflow.com

위와 같은 답을 얻어, 

 

음.. 비로소 호출이 정상적으로 되었네요.

 

 

위의 과정이 만족스럽지 못하고 로컬 서버에 https로 접근하고 싶은 사람도 분명히 있을 것입니다. 

그렇다면 자기 자신이 ca(certificate authority, 인증기관, 인증)이 되면 됩니다. 그에 대한 자료 가 여기 있습니다. 물론 브라우저는 ca 인증서를 발급할 수 있는 소수의 알려진 기관 것을 신뢰하겠죠. 

아래 더보기도 클릭해주세용

더보기

.crt 파일은 보통 웹사이트나 온라인 서비스에서 사용될 SSL/TLS 인증서를 포함하고 있습니다.

이 파일은 웹 서버가 방문자의 브라우저에게 자신의 신원을 확인하고, 데이터를 안전하게 암호화하여 전송하는 데 사용됩니다. 일반적으로 .crt 파일을 사용하여 연결하는 과정은 다음과 같습니다:

 

1. **인증서 발급**: 먼저 웹 서버 운영자는 SSL/TLS 인증 기관(Certificate Authority, CA)으로부터 인증서를 발급받습니다. 이 인증서는 서버의 신원을 확인하는 데 사용됩니다.

2. **인증서 설치**: 발급받은 .crt 파일을 웹 서버에 설치합니다. 이를 통해 웹 서버는 클라이언트(브라우저)에게 자신의 신원을 증명할 수 있게 됩니다.

3. **웹사이트 접속**: 이제 사용자가 해당 웹 사이트에 접속하면, 웹 브라우저는 웹 서버에 연결을 시도합니다. 이때 웹 서버는 .crt 파일을 사용하여 자신의 신원을 확인하고, 안전한 연결을 설정합니다.

4. **SSL/TLS 핸드셰이크**: 클라이언트와 서버 간에 SSL/TLS 핸드셰이크가 발생합니다. 이 과정에서는 데이터를 안전하게 암호화하기 위한 암호화 키를 교환하고, 서로의 신원을 확인합니다.

5. **안전한 통신**: 핸드셰이크가 완료되면, 클라이언트와 서버 간에 안전한 연결이 설정됩니다. 이후 모든 데이터는 암호화되어 전송되며, 중간에서 도청되거나 조작되는 것을 방지합니다. 따라서 .crt 파일은 웹 서버가 방문자에게 자신의 신원을 증명하고, 안전한 통신을 위한 암호화된 연결을 설정하는 데 사용됩니다.

 

 

 

 

++ 수정

https://www.elastic.co/guide/en/elasticsearch/reference/8.10/targz.html#_connect_clients_to_elasticsearch

위의 document에 따르면, 이미 생성되어 저장되는 crt를 활용하라는 것 같습니다. 위의 글에는 제가 disable 하는 방법이나, 따로 만드는걸 얘기했는데 그럴 필요 없이 클라이언트로써 접근할때   elasticsearch가 자동으로 만든 인증서를 사용하면 될것같아요. 위에 있는 저의 방법들은 바보 같은 내용이었네요. ㅎㅎ

구글링 답변들도 항상 주의하면서 읽어야 하는데요. 근데 또 인간이 모든 document를 다 읽을수도 없는거죠. 휴리스틱하게 어느정도까지 읽어야할지는 어쩌면 기본 computer science 지식이 결정하는 것 같습니다. ㅜㅜ 에공. 

Start the Elastic Stack with security enabled automatically 글도 참고하세요..! 또한 좌측 가이드 글을 봤을때 

일반적으로 elasticsearch를 구성하는 디렉토리는 아래와 같겠네요. 

근데 지금 제가 로컬 mac에다 설치해서 그렇지 다른 os였으면 저도 /etc/ 하위에 설정했을겁니다. (ㅋㅋㅋ)