본문 바로가기
IT

[엘라스틱서치] ElasticSearch란? (개념, 장단점, 면접 질문)

by 유나니나노 2024. 3. 25.
반응형

 

ElasticSearch

Elasticsearch는 Apache Lucene 기반의 오픈소스, 분산, RESTful 검색 엔진입니다. 대량의 데이터를 신속하고 거의 실시간에 가까운 속도로 저장, 검색, 분석할 수 있도록 설계되었습니다. Elasticsearch는 주로 로그나 트랜잭션 데이터와 같은 대규모 데이터셋을 분석하고 검색하는 데 사용됩니다.

 

 

 

주요 특징

  • 분산 시스템: Elasticsearch는 데이터를 여러 노드에 분산하여 저장하므로, 시스템이 확장될 때 데이터의 양이 증가해도 처리 속도가 유지됩니다. 데이터는 자동으로 분할되어 여러 서버에 분산 저장되며, 이를 통해 높은 가용성과 확장성을 보장합니다.
  • 전문(Full-Text) 검색: Elasticsearch는 Lucene의 강력한 검색 기능을 활용하여 전문 검색을 지원합니다. 사용자가 특정 단어나 문구를 검색하면 관련도가 높은 문서를 빠르게 찾아낼 수 있습니다.
  • 다양한 데이터 처리 기능: Elasticsearch는 데이터의 색인 생성, 검색, 분석 등 다양한 기능을 제공합니다. JSON 형식의 문서를 직접 저장하고 검색 쿼리를 통해 복잡한 데이터 분석을 수행할 수 있습니다.
  • 실시간 검색: Elasticsearch는 저장된 데이터에 대해 거의 실시간으로 검색과 분석을 수행할 수 있습니다. 이는 로그 모니터링, 이벤트 모니터링 등 실시간 데이터 분석이 필요한 다양한 분야에서 활용됩니다.
  • RESTful API: Elasticsearch는 RESTful API를 제공하여, 다양한 프로그래밍 언어로 작성된 애플리케이션에서 쉽게 접근하고 사용할 수 있습니다. HTTP를 통해 데이터를 색인, 검색, 수정, 삭제할 수 있습니다.

 

활용 분야

  • 로그 분석: 시스템 로그, 웹 로그 등 대량의 로그 데이터를 실시간으로 분석하고 모니터링하는 데 사용됩니다.
  • 사이트 검색: 웹사이트나 애플리케이션 내에서 사용자가 원하는 정보를 빠르게 찾을 수 있도록 돕습니다.
  • 데이터 분석: 비즈니스 인텔리전스, 시장분석 등 다양한 데이터 분석 작업에 사용됩니다.

 

 

사용 이유

  • 빠른 검색 성능: Elasticsearch는 Lucene 기반으로 구축되어 있어, 대량의 데이터에 대한 빠른 검색과 실시간 분석을 가능하게 합니다. 이는 전문(Full-Text) 검색, 구조화된 검색, 데이터 분석 등 다양한 요구 사항을 빠르게 충족시킬 수 있음을 의미합니다.
  • 확장성: Elasticsearch는 수평적으로 확장 가능한 분산 시스템으로 설계되었습니다. 이는 데이터 양이 증가함에 따라 더 많은 서버를 추가하여 시스템을 확장할 수 있음을 의미하며, 이 과정에서도 검색 및 처리 성능을 유지할 수 있습니다.
  • 고가용성과 신뢰성: Elasticsearch의 분산 특성은 높은 가용성을 보장합니다. 데이터는 자동으로 여러 노드에 복제되므로, 어떤 서버에 장애가 발생해도 데이터 손실 없이 서비스를 지속할 수 있습니다.
  • 다양한 데이터 처리 기능: Elasticsearch는 단순한 검색뿐만 아니라, 복잡한 데이터 집계, 분석 기능을 제공합니다. 이를 통해 사용자는 로그 데이터 분석, 실시간 모니터링, 비즈니스 인텔리전스 등 다양한 분석 작업을 수행할 수 있습니다. 
  • 유연한 데이터 모델링: Elasticsearch는 JSON 형식의 문서를 사용하여 데이터를 저장합니다. 이는 구조화되지 않은 데이터를 쉽게 처리하고, 다양한 형태의 데이터를 유연하게 색인할 수 있음을 의미합니다.
  • 개발자 친화적: Elasticsearch는 RESTful API를 제공하여, 다양한 프로그래밍 언어로 쉽게 접근하고 사용할 수 있습니다. 이는 개발자가 복잡한 설정 없이도 Elasticsearch를 빠르게 통합하고 활용할 수 있음을 의미합니다.
  • 강력한 커뮤니티와 생태계: Elasticsearch는 널리 사용되는 오픈 소스 프로젝트로, 강력한 커뮤니티 자원과 풍부한 플러그인 생태계를 자랑합니다. 이는 사용자가 다양한 문제를 해결하고, 필요에 따라 시스템을 맞춤화할 수 있음을 의미합니다.

 

단점 및 고려사항

  • 리소스 요구사항: Elasticsearch는 고성능을 제공하지만, 이를 위해 상당한 양의 시스템 리소스를 필요로 합니다. 특히, 대량의 데이터를 처리하거나 높은 쿼리 부하를 처리하기 위해서는 충분한 메모리와 CPU가 필요할 수 있습니다.
  • 관리의 복잡성: Elasticsearch는 분산 시스템이므로, 클러스터 관리, 데이터 샤딩(Sharding), 복제(Replication) 등을 올바르게 설정하고 관리하는 것이 중요합니다. 이러한 관리 작업은 초보자에게는 복잡하게 느껴질 수 있으며, 잘못된 설정은 성능 저하나 데이터 손실로 이어질 수 있습니다.
  • 보안 고려사항: Elasticsearch는 기본적으로 보안 설정이 비활성화되어 있습니다. 따라서, 사용자 인증, 데이터 암호화, 접근 제어 등 보안 관련 설정을 직접 추가해야 합니다. 이는 추가적인 설정과 관리 작업을 필요로 하며, 잘못 구성할 경우 보안 취약점이 발생할 수 있습니다.
  • 업그레이드의 어려움: Elasticsearch의 버전을 업그레이드하는 과정은 때때로 복잡할 수 있습니다. 특히, 메이저 버전 간의 업그레이드는 호환성 문제를 유발할 수 있으며, 이는 데이터 마이그레이션 또는 인덱스 재구축을 필요로 할 수 있습니다.
  • 비용: Elasticsearch를 자체 서버에 배포할 경우, 하드웨어 및 운영 비용이 발생할 수 있습니다. 또한 Elasticsearch를 클라우드 서비스로 사용할 경우(ex: Amazon ElasticSearch Service, Elastic Cloud 등), 트래픽과 저장공간에 따라 비용이 증가할 수 있습니다.
  • 쿼리 언어의 복잡성: Elasticsearch의 쿼리 언어는 매우 강력하고 유연하지만, 복잡한 쿼리를 작성하고 최적화하는 데는 학습 곡선이 있습니다. 복잡한 검색 요구 사항을 충족시키기 위해서는 쿼리 언어에 대한 깊은 이해가 필요할 수 있습니다. 

 

면접 예상 질문 및 답변

  • Elasticsearch의 기본 개념과 작동 원리를 알려주세요.
    • Elasticsearch는 Apache Lucene을 기반으로 하는 오픈 소스, 분산, RESTful 검색 엔진입니다. JSON 문서를 저장하고, 이를 인덱싱하여 빠르게 검색할 수 있게 합니다. 핵심 기능은 전체 텍스트 검색과 함께 복잡한 검색 쿼리를 지원하는 것입니다. 데이터는 샤드로 분할되어 있어 여러 노드에 분산 저장되며, 이를 통해 고가용성과 확장성을 제공합니다.
  • Elasticsearch에서 인덱싱은 어떻게 이루어지나요?
    • 문서가 Elasticsearch에 제출되면, 그 문서는 JSON 형식으로 변환되어 인덱스에 저장됩니다. 각 문서는 고유한 ID로 식별되며, Elasticsearch는 문서의 내용을 분석하여 역색인을 생성합니다. 이 역색인은 검색 시 문서를 빠르게 찾는 데 사용됩니다.
  • 대용량 데이터를 다룰 때 Elasticsearch의 성능을 어떻게 최적화하나요?
    • 성능 최적화를 위해 샤딩과 리플리케이션을 적절히 구성합니다. 샤딩은 데이터를 분산시켜 처리 능력을 높이는 반면, 리플리케이션은 데이터의 안정성과 가용성을 보장합니다. 또한, 불필요한 데이터를 정리하는 인덱스 라이프사이클 관리, 캐싱 전략을 사용하여 응답 시간을 단축시키고, 필요에 따라 쿼리를 최적화하여 불필요한 데이터 로드를 줄입니다.
  • Elasticsearch에서 데이터 모델링은 어떻게 접근하나요?
    • Elasticsearch에서는 데이터를 비정규화하여 저장하는 것이 일반적입니다. 관계형 데이터베이스와 달리, 검색 속도를 최적화하기 위해 종종 하나의 큰 문서로 데이터를 합치는 Epsormalization 접근 방식을 사용합니다. 이는 조인 연산 없이도 빠른 검색과 집계를 가능하게 합니다.
  • Elasticsearch의 쿼리 DSL에 대해 설명해 주세요.
    • Elasticsearch의 쿼리 DSL은 JSON 형식으로 쿼리를 정의하는 강력한 방식입니다. 이를 통해 텍스트, 숫자, 날짜 등 다양한 유형의 데이터에 대해서 정확하고 복잡한 검색 쿼리를 실행할 수 있습니다. 기본적인 검색부터 시작하여 불리언 연산, 필터링, 집계 등 복잡한 연산도 지원합니다.
  • Elasticsearch 클러스터의 모니터링과 관리는 어떻게 하나요?
    • Elasticsearch 클러스터의 상태와 성능을 모니터링하기 위해 Elasticsearch 자체의 API, Kibana, Elastic Stack의 X-Pack 등을 사용할 수 있습니다. 이들 도구를 통해 클러스터의 상태, 노드의 상태, 쿼리 성능, 샤드의 상태 등을 실시간으로 확인하고 문제를 진단할 수 있습니다. 또한, 클러스터 설정을 조정하고, 인덱스 관리, 백업과 복구 작업 등도 수행할 수 있습니다.
  • Elasticsearch와 관련된 보안 조치에는 어떤 것들이 있나요?
    • Elasticsearch의 보안 조치에는 여러 가지가 있습니다. 먼저, 통신의 암호화를 통해 데이터 전송 과정에서의 보안을 강화할 수 있습니다. 이는 HTTPS를 사용하여 구현할 수 있습니다. 또한, 사용자 인증과 권한 부여를 통해 데이터에 대한 접근을 제어할 수 있으며, 이는 X-Pack 보안 기능을 통해 설정할 수 있습니다. 로깅과 감사 로그를 활용하여 시스템 내의 활동을 모니터링하고 기록하는 것도 중요한 보안 조치 중 하나입니다.
  • Elasticsearch의 주요 단점은 무엇이라고 생각하나요?
    • Elasticsearch의 주요 단점 중 하나는 관리와 운영의 복잡성입니다. 대규모 클러스터의 경우, 리소스 관리, 성능 최적화, 보안 설정 등을 올바르게 관리하는데 상당한 노력이 필요합니다. 또한 데이터 일관성 보장 측면에서도 때때로 도전적일 수 있으며, 이는 Elasticsearch가 최종 일관성 모델을 사용하기 때문입니다. 또한, 업그레이드 과정이 복잡하고 리소스 집약적일 수 있으며, 이는 특히 대규모 데이터를 다룰 때 중요한 고려사항입니다.
  • ElasticSearch 프로젝트에서 겪었던 가장 큰 도전은 무엇이었고, 어떻게 해결했나요?
    • 참여했던 프로젝트에서의 담당은 데이터 조회 API 개발이었는데 복잡한 쿼리를 작성하고 이를 최적화하는 과정이 가장 어려웠던 도전이었습니다. 공식 문서와 쿼리 속도 테스트, 그리고 캐싱 시스템과 같은 전략을 활용하여 서비스의 안정성에 기여했습니다. 
  • 대용량 데이터를 빠르게 검색하기 위해 쿼리를 어떻게 최적화할 수 있을까요?
    • 쿼리의 실행 시간을 줄이기 위해 불필요한 필드는 제외하고, 검색에 필요한 필드만 제한할 수 있습니다. 또한, 적절한 샤딩 전략을 사용하고, 검색 결과의 크기를 제한하는 것도 중요합니다. 집계 작업의 경우, 사전 계산된 집계를 사용하거나, 적절한 집계 크기를 설정하여 성능을 향상할 수 있습니다. 
  • 수백만 개의 문서를 안정적으로 조회하기 위해 어떤 기능을 사용할 수 있나요?
    • Scroll API를 사용할 수 있습니다. 초기 검색 시점의 스냅숏을 유지하며, 데이터를 작은 청크로 나누어 순차적으로 조회할 수 있게 해 줍니다.
    • Search After 기능을 사용하면 페이징을 통해 대량의 데이터를 효율적으로 조회할 수 있습니다. 특정 문서 이후의 데이터를 조회하는 방식으로, 실시간 데이터와 빠른 응답 속도가 중요한 경우에 유용합니다.

 

오늘은 Elasticsearch에 대해서 알아보았습니다.

대용량 검색 관련해서 Impala도 함께 알아보면 좋습니다!

2024.03.27 - [IT] - [Hadoop] Impala란? (개념, 특징, 장단점, 면접 대비)

 

[Hadoop] Impala란? (개념, 특징, 장단점, 면접 대비)

Impala는 Coludera에 의해 개발되었으며, Apache Hadoop 생태계 위에서 실시간, 대용량 데이터 분석을 목적으로 하는 오픈 소스 대용량 병렬 처리(SQL) 쿼리 엔진입니다. Impala의 주요 목적은 사용자가 Hadoo

yuna-ninano.tistory.com

 

 

반응형