개발/Elasticsearch

Elasticsearch IntelliJ 에서 디버깅 하는방법

개발 호사가 2023. 4. 8. 15:01

Elasticsearch는 오픈소스 검색엔진입니다. Elasticsearch를 개발하거나 운영하다 보면 내부에서 어떻게 호출되고 있는지가 궁금 해질 때가 있습니다. 이 때 Elasticsearch를 IntlliJ에서 디버깅 하는 방법에 대해 설명하겠습니다.

환경은 다음과 같습니다.

Mac OS

IntelliJ 2022.2.3

 

1. Elasticsearch를 IntelliJ에서 열기

먼저 Github에서 Elasticsearch source를 clone 받습니다.

git clone https://github.com/elastic/elasticsearch.git

 

그 다음 받은 Elasticsearch 소스를 IntelliJ에서 Open 해야하는데요, 그 전에 몇가지 체크 사항이 있습니다. IntelliJ IDEA 버전이 2020.1 Java 17 이상을 사용해야 합니다. (ES 8.7기준) https://www.jetbrains.com/help/idea/sdk.html#define-sdk 링크를 보고 JDK 17 SDK를 셋업 해 줍니다.

위 요구사항이 맞으면 IntelliJ IDEA에서

  1. File -> Open 을 선택
  2. Github에서 받은 소스 root 경로에서 build.gradle 파일 선택 후 Open.
  3. 팝업창이 뜨면 Open as Project

 

2. IntelliJ 리모트 디버깅 설정

IntelliJ debug remote

IntelliJ 에서 Remote JVM Debug를 실행 해 줍니다. 기본 3개(5007, 5008, 5009) 세팅이 돼 있습니다. 그중 5007 Port 리모트 디버거를 실행합니다.

 

3. Gradle을 이용 해 Elasticsearch를 디버그 모드로 실행

elasticsearch 소스 root 경로로 이동해서 아래 명령어를 실행합니다.

./gradlew run --debug-jvm

이렇게 되면 기본적으로 basic license, debug 모드로 실행 되게 됩니다.

이렇게 실행 하고 나서 http://127.0.0.1:9200/ 로 접근하게 되면 id, password 입력하라고 나오는데, 이 때 기본값은 

id: elastic-admin
pwd: elastic-password

 

gradle run 추가 실행 옵션들이 많으니 자세한 정보는 다음 링크를 참고하세요 (https://github.com/elastic/elasticsearch/blob/main/TESTING.asciidoc#other-useful-arguments)

 

- 연결 성공 시 이미지

연결 성공 시 IntelliJ Debug console 이미지

4. 소스에서 Break point 설정

IntelliJ Source 에서 break point 설정하고 elasticsearch 에 해당 코드 라인을 실행하는 명령어를 치게 되면 해당 라인부터 디버깅이 가능 해 집니다.

Ex) org/elasticsearch/action/admin/cluster/stats/ClusterStatsResponse.java 에 해당 라인 브레이크 포인트를 걸고 

http://127.0.0.1:9200/_cluster/stats 호출하면 아래처럼 자세하게 디버깅이 가능 해 집니다.

 

마무리

이렇게 Elasticsearch를 IntelliJ 에서 디버깅 하는 방법에 대해 작성 해 보았습니다. 이 방법을 통해 shards들이 어떻게 데이터를 주고 받는지 Search Object 가 어떤식으로 동작하게 되는지 자세하게 디버깅하며 분석 할 수 있게 되었습니다.

이렇게 소스를 분석해 보면서 나중에는 Elasticsearch Contributor가 될 수도 있지 않을까 하는 생각을 해 봅니다.

 

참고

https://github.com/elastic/elasticsearch/blob/main/TESTING.asciidoc

 

GitHub - elastic/elasticsearch: Free and Open, Distributed, RESTful Search Engine

Free and Open, Distributed, RESTful Search Engine. Contribute to elastic/elasticsearch development by creating an account on GitHub.

github.com

https://github.com/elastic/elasticsearch/blob/main/CONTRIBUTING.md

 

반응형