brunch

You can make anything
by writing

C.S.Lewis

by 에디의 기술블로그 Mar 23. 2019

Elasticsearch in IntelliJ IDEA

IntelliJ 에서 엘라스틱서치(Elasticsearch) 실행하기

Overview


정보 검색을 위한 가장 일반적인 라이브러리는 "루씬" 라이브러리이다. "루씬"을 기반으로 구현 된 검색엔진 오픈소스는 "Elasticsearch", "Solr" 인데, 필자가 지난 주부터 살짝 발을 담그고 있는 프로젝트에서 "Elasticsearch"를 도입하기로 결정하였고, 필자는 앞으로, "Elasticsearch" 에 대해서 조금 깊게 공부를 할 계획이다. 일단, 이 글은, "Elasticsearch" 를 인텔리J 에서 실행하는 방법에 대한 글인데, 사실 굳이 로컬 개발환경의 IDE 로 "Elasticsearch" 실행하지 않아도 서비스를 구축하는데는 전혀 무리가 없다. 필자는 처음에는 호기심으로 시작하였지만, "Elasticsearch"를 직접 설치하고 운영해야 하는 역할이라면 한번 쯤은 로컬 개발환경에서 직접 실행해보는 것도 의미가 있다고 판단하였다. 참고로, "Elasticsearch"를 IDE 에서 실행하는 방법에 대해서 국내 블로그 글이 몇개 있는데, 필자는 국내 블로그 글은 자세히 참고하지 않았다. 이유는, "Elasticsearch" 버전에 따라서 실행 방법이 조금씩 다르고, Gradle 버전과 JDK 버전도 각각 맞춰야 하기 때문에, 참고하기가 살짝 애매했다. 대신, 공식 레퍼런스를 참고하여 "Elasticsearch 6.6.2" 버전으로 진행하였다. 관련해서 자세한 내용은 레퍼런스를 참고하기를 바란다.

https://www.elastic.co/kr/blog/how-to-debug-elasticsearch-source-code-in-intellij-idea


오해가 있을것 같아서 한번 더 강조해서 얘기를 하자면.... 서비스를 구축하기 위해서 굳이 로컬 IDE에서 "Elasticsearch"를 실행할 필요는 전혀 없습니다. 일반적인 방법으로, "Elasticsearch"를 윈도우 또는 리눅스에 설치 및 연동하여 개발하면 됩니다. 또한, "Elasticsearch" 기본 기능으로 서비스하기 어려운 비즈니스 요구사항은 "플러그인"을 개발하여 "Elasticsearch"에 플러그인 연동하면 됩니다.  만약, 필자처럼 "Elasticsearch" 의 패키지 구조가 너무 궁금하고, 소스를 직접 수정해 보고 싶은 호기심이 있다면, 필자의 방법대로 해보길 바랍니다. 하지만 이런 방법이 있음에도 불구하고, 필자는 "Elasticsearch"를 직접 수정 및 빌드해서 실서비스를 할 계획은 전혀 없습니다. 플러그인을 따로 개발해서 연동하면 충분히 운영이 가능할 것이라는 판단입니다.(비록...Elasticsearch를 제대로 공부한 시간이 얼마 안되지만...) 플러그인에 대해서는 추후에 다시 글을 작성하겠습니다.


2019년 3월 23일(토) 기준으로 가장 최신 버전인 "Elasticsearch 6.6.2" 버전으로 진행하겠다. 참고로 현재, 7.X 베타 버전도 나온 상황이다. "Elasticsearch" 버전 업그레이드가 꽤 빠른 편이라서 이 글도 몇년 지나면 레거시가 될 것이다. 


디펜던시


"Elasticsearch 6.6.2" 를 IDE에서 실행하기 위해서는 로컬 PC 개발환경에서 JDK 1.11 버전이 반드시 필요하다. 필자의 PC 에서는 JDK 1.8 이 설치되어 있었는데, JDK 1.11 을 추가로 설정하고 PATH 경로를 변경하였다. CMD에서 java -version 를 실행했을 때 java version 11 이 찍혀야 한다.

국내 블로그 몇개를 보면 "Gradle"이 로컬에 반드시 설치가 되어야 한다는 글이 있는데, "Elasticsearch 6.6.2" 버전을 위해서는 굳이 로컬에 "Gradle"이 설치가 되지 않아도 된다. 



소스 다운로드 및 Gradle 실행


github에서 소스를 다운로드 하자. 

https://github.com/elastic/elasticsearch/tree/v6.6.2


다운로드 받은 소스의 루트 경로에서 아래 명령어를 실행하자.  


./gradlew idea 

Git Bash 또는 터미널 등 각자 편한 환경에서 실행하면 된다. 필자는 Git Bash 에서 실행하였다. 참고로, 이때 JDK 11 이 설치가 되어있지 않다면 정상적으로 실행이 되지 않는다. 해당 작업은 몇분 이상 걸린다. 필자의 집에 있는 PC가 너무 느려서 한참을 기다렸다. 



IntelliJ IDEA 에서 실행하기


IntelliJ 에서 소스를 Import 하자. Import Project 를 선택해서 build.gradle 를 선택하면 된다. 이때 반드시, JDK 설정을 맞춰야 한다.

참고로, 위 캡처에서 Gradle home 버전이 gradle-4.2 로 되어있는데, 필자의 PC에 설치된 Gradle 인데 이 작업이랑 상관 없다. Gradle Wrapper 로 실행될 것이고, Gradle 5.X 로 적용될 것이다. IDE 에서 소스를 정상적으로 Import 하는데 성공하였다면 run 명령어를 실행하자. 

./gradlew run --debug-jvm

해당 명령어도 한참을 기다렸다... 공식 레퍼런스에서는 몇분이라고 써있던데, 필자의 PC는 10분 이상 걸렸다. 암트 정상적으로 실행이 되었다면...

IntelliJ 에서 Run --> Attach to Process 를 실행하자. 

이렇게 진행하면 gradlew 를 실행했던 명령창에서 (필자는Git Bash) Elasticsearch 가 실행되는 Log 가 쭉 올라오는 것을 확인할 수 있다. 살짝 보니 "Elasticsearch" 를 일반적인 방법으로 설치 실행했을 때 나오는 로그와 같다. 


간단하게 테스트


정상적으로 Elasticsearch 가 실행된걸까? localhost:9200 포트를 날려보자. 

오.. 잘 된거 같다.  "Elasticsearch" 를 일반적인 방법으로 설치하지 않고, 소스코드와 IDE 를 사용해서 "Elasticsearch" 를 실행할 수 있었다. 이제, 소스코드를 수정해서 Elasticsearch 를 내 마음대로 수정해볼수 있었따. 하지만, 이 글은... 이정도로 마무리 하고 글을 마치겠다. "Elasticsearch" 에서 제공하는 기능만으로도 충분히 실서비스하기에 충분하고, 플러그인으로 부족한 기능을 대체하면 된다. 


다음 글은 아래의 주제 중 선택해서 오늘,내일 중에 글을 작성해볼까 한다. 아래 내용들 역시, 필자에게는 처음 접하는 내용들이라서, 아마 기초적인 내용이 될 것이다. 시간 여유가 있다면 루씬 기본 개념을 이해하고 싶기는 한데... 플러그인은 팀원한테 리뷰해달라고 시키고, 필자는 아마도 Thread Pool 관련해서 먼저 검토를 해야할 것 같기는 하다.


루씬 라이브러리 기본 개념 이해하기

Elasticsearch 플러그인 개발 및 연동

Elasticsearch 성능 개선을 위한 Thread Pool 설정 및 테스트


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari