왜 Elasticsearch는 Java로 개발되었을까? Compass부터 Lucene까지

2024. 11. 10. 17:00카테고리 없음

728x90
이 글은 팀원의 단순한 한마디 "왜 Elasticsearch 는 C 나 C++ 이 아니고 Java 로 개발했어요?
성능을 고려한다면 Java 보단 다른게 좋지 않나?" 라는 의문에서 시작된 글입니다.

Elasticsearch란?

Elasticsearch is a search engine based on Apache Lucene. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.

출처 : https://en.wikipedia.org/wiki/Elasticsearch#External_links

Elasticsearch는 Apache Lucene을 기반으로 한 분산형 검색 엔진입니다.
2010년 Shay Banon 에 의해 처음 출시되었으며, 현재 Elastic NV 에서 개발 및 유지보수하고 있습니다.
Elasticsearch는 대규모 데이터를 효율적으로 처리하고, 빠르고 유연한 검색 기능을 제공하기 위한 도구입니다.

Compass: ElasticSearch 의 이전 단계

사실 Elasticsearch 이전에 Shay Banon 은 검색 엔진 프레임워크를 개발했는데, 이는 바로 Compass 라는 프로젝트입니다.

Elasticsearch 이전 Compass 의 로고

Compass 를 버린 이유

이 Compass 프로젝트는 v2 까지 개발이 된 상태였고, v3 를 개발한 상태였습니다.
하지만 이미 만들었다면 왜 굳이 만들었나? 라는 의문이 들게 됩니다. 다음과 같은 단점들이 존재했습니다.

Compass 의 단점 3가지
1. 확장성 부족 →분산 아키텍처를 지원하지 않아 대규모 데이터 처리에 한계

2. 운영 복잡성 → 클러스터 관리나 고가용성 같은 기능이 부족

3. 언어 종속성 → 주로 Java Application 에만 맞춰짐
분산 아키텍쳐, 클러스터 관리, 고가용성이 검색 엔진에서 필요한 이유?
1. 대규모 데이터와 높은 트래픽 처리

2. 장애 대응과 고가용성 확보

3. 확장성 및 유연한 리소스 관리

4. 복잡한 쿼리와 지리적 분산 처리

정리하자면 Compass 는 확장 가능하지 못한 Archi.를 가져있었지만, 현대 사회는 확장성에 유리한 분산 검색 엔진을 요구했습니다.
그래서 아얘 별도의 프로젝트를 기획하게 되는데, 이 프로젝트가 바로 Elasticsearch 입니다.

Elasticsearch 의 특징

크게 다음과 같은 5가지를 Elasticsearch 의 특징으로 집을 수 있습니다.

특징
==================
1. 분산 처리
2. Multitenancy 지원
3. 풀 텍스트 검색
4. HTTP 인터페이스
5. Schemaless Json 문서 저장
Multitenancy 란?
==================
단일 소프트웨어 인스턴스로 서로 다른 여러 사용자 그룹에 서비스를 제공할 수 있는 소프트웨어 아키텍처

출처 : https://www.redhat.com/ko/topics/cloud-computing/what-is-multitenancy
스키마리스 JSON 문서 저장이란?
====================================

: 데이터 구조를 미리 말하지 않아도, 그냥 넣으면 알아서 저장해주는 기능
즉, 그냥 데이터를 넣으면 Elasticsearch가 알아서 정리

Elasticsearch 는 고로 Compass 의 단점을 보완하여 나오게 된

  1. 확장에 유리하고(확장성)
  2. 사용에 용이하고(사용성 / HTTP, JSON 사용)
  3. 빠른 검색 속도 (Lucene 기반)

라는 특징을 가진 검색 엔진입니다.

Elsticsearch 와 Apache Lucene 의 관계

Elasticsearch 는 Apache Lucene 이라는 프로젝트를 기반으로 해 Lucene 이 제공하는 검색 & 인덱싱 기능을 활용합니다. Elasticsearch 의 빠른 검색 성능은 사실 Lucene 이 빠르기에 가능하다! 라고도 말할 수 있습니다.

그렇다면 Lucene 이란?

Apache Lucene™ is a high-performance, full-featured search engine library written entirely in Java. It is a technology suitable for nearly any application that requires structured search, full-text search, faceting, nearest-neighbor search across high-dimensionality vectors, spell correction or query suggestions.

→ 요약 : 그냥 성능좋고 기능도 많은 Java 로 쓴 검색 엔진이다~

출처 : https://lucene.apache.org/core/

Lucene 은 1999년 Doug Cutting 에 의해 개발된 Java 기반 Text 검색 라이브러리입니다.
Lucene 은 Elasticsearch 뿐만 아니라, 동시에 Solr 등 여러 검색 엔진의 기반 기술이기도 합니다.

Lucene 의 특징
===================
  1. Scalable, High-Performance Indexing
  2. Powerful, Accurate and Efficient Search Algorithms
  3. Cross-Platform Solution

출처 : https://lucene.apache.org/core/

그렇다면 왜 Apache Lucene Project 는 Java 로 이루어져 있을까?

그렇다면 사실 Elasticsearch 가 왜 Java 로 이루어져 있냐? 라는 질문에 대한 대답은 사실

왜 Apache Lucene Project 는 Java 로 이루어져 있을까?

라는 질문에 대답을 해야 합니다.

Elasticsearch 는 Lucene 기반 이기에 Java 로 이루어져 있고, Lucene 은 100% Java 로 이루어져 있습니다.

100% Java 로 이루어진 Lucene 프로젝트 설명

보통 구글링을 하게 되면 Lucene 왜 Java 로 이루어져 있나 라는 글들을 찾아보면 다음과 특징을 설명합니다.

1. 플랫폼 독립성: Java 는 운영체제와 무관하게 동작할 수 있어 다양한 환경에서 실행 가능.
2. 개발 생산성: 메모리 관리와 표준 라이브러리를 통해 개발 속도가 빠름.
3. 커뮤니티: Java 는 생태계는 풍부한 도구와 라이브러리를 제공합니다.

이러한 이유들은 사실 분산 데이터 처리 프레임워크인 Hadoop 에서도 찾아볼 수 있습니다.

Apache Hadoop

Doug Cutting 은 Hadoop 을 개발하고 나서 한 인터뷰에서 Hadoop 의 개발 언어를 Java 를 선택한 이유에 대해 이렇게 말했습니다 :

"Java offers a good compromise between developer productivity and runtime performance. Developers benefit from a simple, powerful, type-safe language with a wide range of high-quality libraries. Performance is generally good enough.”

출처 : https://zipcodewilmington.com/blog/3-modern-apps-and-companies-that-use-java/

Hadoop 은 대규모 데이터를 분산 환경에서 처리하기 위한 프레임워크로, I/O 작업이 많고 클러스터 환경에서 운영됩니다.
이러한 환경에서는 성능도 중요하겠지만 안정성, 생산성, 그리고 유지보수 용이성이 더 중요한 요소로 작용합니다.

Lucene도 이와 비슷한 맥락에서 Java를 선택했습니다.
Lucene은 텍스트 검색 엔진 라이브러리로, 다양한 환경에서 동작해야 하고 개발자들이 쉽게 활용할 수 있어야 합니다.

고로 다시 한번, Java 를 택한 이유는

  1. 플랫폼 독립성
  2. 생산성
  3. 커뮤니티 지원

측면에서 선택을 했다고 볼 수 있습니다.

결국, "충분히 빠른 성능"과 "개발 생산성" 간의 균형이 Lucene과 Hadoop 모두 Java를 선택하게 만든 핵심 이유라고 볼 수 있습니다.
이는 Elasticsearch 역시 자연스럽게 Java로 개발된 이유를 설명해줍니다.

정리

"왜 Java인가?"라는 의문은 성능이라는 한 가지 관점만으로는 답을 찾기 어렵습니다.
개발 생산성, 커뮤니티, 그리고 다양한 환경에서의 호환성까지 고려해야만 답이 보이는 질문입니다.
그리고 이러한 성능과 생산성 이 2가지의 적절한 합의점이 Java 다!

번외 : 다른 검색 엔진은 무엇이 있고, 어떤 언어를 사용할까?

전세계 검색 엔진 순위 TOP 10

  • Elasticsearch: Java로 개발, Apache Lucene 기반. Java의 플랫폼 독립성과 개발 생산성을 활용.
  • Splunk: C++, Python, JavaScript로 작성. 높은 성능과 대규모 데이터 처리를 위해 C++ 사용, 인터페이스 개발에 Python과 JavaScript 활용.
  • Apache Solr: Java로 작성. Apache Lucene 기반으로 확장성과 유연성을 제공.
  • OpenSearch: Java로 개발. Elasticsearch의 포크로 동일한 기술 스택 사용.
  • Algolia: C++로 작성. 빠른 검색과 낮은 지연 시간을 위해 최적화

 

 

728x90