25.03.21 TIL Elasticsearch

신성훈·2025년 3월 21일
0

TIL

목록 보기
153/162

Elasticsearch란?

Elasticsearch는 분산형 검색 및 분석 엔진으로 대량의 데이터를 빠르게 검색하고 분석하는 데 사용된다. JSON 문서를 기반으로 데이터를 저장하며 Apache Lucene(Java 기반의 오픈소스 검색 라이브러리로 검색 및 색인(indexing) 기능을 제공하는 핵심 기술)을 기반으로 한 강력한 검색 기능을 제공한다.

  • 주요 특징:
    • 실시간 검색 및 분석
    • 분산 아키텍처로 확장성 보장
    • JSON 기반 문서 저장
    • RESTful API 제공

1. Elasticsearch의 핵심 개념

1) Cluster(클러스터)

  • Elasticsearch는 클러스터 단위로 동작하며 하나 이상의 노드(Node)로 구성된다.
  • 클러스터 내에서 데이터를 분산 저장하고 검색 및 분석 요청을 처리한다.

2) Node(노드)

  • 클러스터에 속하는 개별 서버 또는 인스턴스
  • 데이터 저장, 검색, 인덱싱 등의 작업 수행

3) Index(인덱스)

  • RDBMS의 데이터베이스와 유사한 개념
  • 특정 주제에 대한 문서들을 저장하는 논리적 공간

4) Document(문서)

  • Elasticsearch의 기본 저장 단위로 JSON 형식의 데이터
  • 예제:
    {
        "name": "John Doe",
        "age": 30,
        "email": "john@example.com"
    }

5) Shard(샤드) & Replica(복제본)

  • 샤드(Shard): 데이터를 여러 부분으로 나누어 저장하여 확장성과 성능을 높임
  • 복제본(Replica): 장애 대비를 위해 샤드의 복사본을 생성하여 데이터 안정성 보장

2. Elasticsearch의 동작 방식

  1. 데이터 저장: JSON 형식의 문서를 Index에 저장
  2. 인덱싱: 데이터를 Lucene 기반의 역색인(Inverted Index) 구조로 변환
  3. 검색(Querying): 검색 요청 시 역색인을 활용하여 빠르게 결과 반환
  4. 분산 처리: 클러스터 내 여러 노드가 역할을 분담하여 고가용성 보장

3. Elasticsearch의 주요 기능

1. Full-Text Search (전문 검색)

  • 자연어 검색 및 키워드 검색을 최적화하여 빠르게 검색 결과 제공
  • 예제:
    {
        "query": {
            "match": { "name": "John" }
        }
    }

2. Aggregations (집계 분석)

  • 데이터 분석을 위한 다양한 통계 및 집계 기능 제공
  • 예제:
    {
        "aggs": {
            "average_age": { "avg": { "field": "age" } }
        }
    }

3. Multi-Node Clustering (다중 노드 클러스터링)

  • 여러 개의 노드를 연결하여 확장성과 고가용성을 보장

4. Elasticsearch 사용하기

1. Spring Boot 프로젝트에 Elasticsearch 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2. Repository 인터페이스 생성

@Repository
public interface UserRepository extends ElasticsearchRepository<User, String> {
    List<User> findByName(String name);
}

3. Elasticsearch에 데이터 저장 및 검색

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public void saveUser(User user) {
        userRepository.save(user);
    }
    
    public List<User> searchUser(String name) {
        return userRepository.findByName(name);
    }
}

5. Elasticsearch의 장점과 단점

장점

  • 빠른 검색 속도 → 역색인 구조를 활용하여 데이터 검색 성능 극대화
  • 확장성(Scalability) → 샤드 및 복제본을 이용한 분산 처리 가능
  • JSON 기반의 유연한 데이터 저장 → 다양한 형태의 데이터 처리 가능
  • RESTful API 지원 → 손쉬운 통신 및 외부 시스템과의 연동 용이

단점

  • 데이터 일관성 문제 → 실시간 검색을 우선시하여 RDBMS보다 데이터 정합성이 낮을 수 있음
  • 리소스 사용량 많음 → 대량의 데이터를 저장하고 검색할 경우 높은 CPU, 메모리 요구
  • 운영 및 튜닝 난이도 → 적절한 샤드 설정 및 성능 최적화를 위한 추가 작업 필요

6. 마무리

Elasticsearch는 강력한 검색 및 분석 기능을 제공하며 대량의 데이터를 빠르게 처리할 수 있다는 점에서 매우 유용하다. 하지만 RDBMS와는 다른 개념으로 동작하므로 적절한 데이터 모델링 및 성능 최적화가 필요하다.
Spring Boot와 연동하면 손쉽게 Elasticsearch를 활용할 수 있으므로 검색 기능이 필요한 웹 애플리케이션 개발 시 적극 고려해야 할 기술이라고 생각한다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글