검색을 구현해야 한다. 이전에는 직접 쿼리셋으로 구현하거나 drf에서 filtering 등을 이용했다. 다만 방대한 데이터를 검색할 때는 Elasticsearch를 이용하는 게 좋은데, 한 번도 써본 적이 없어서 적용에 앞서 개념을 이해하기 위해 포스팅을 쓴다.
정의
Elasticsearch 는 루씬 기반의 검색 엔진이다. HTTP 웹 인터페이스와 스키마에서 자유로운 JSON 문서와 함께 분산 멀티테넌트 지원 전문 검색 엔진을 제공한다. 방대한 양의 데이터를 신속하게 저장, 검색, 분석을 수행할 수 있다. Elasticsearch는 검색을 위해 단독으로 사용할 수도 있지만 ELK(Elasticsearch / Logstash / Kibana) 스택으로 사용되기도 한다.
멀티테넌트
Elasticsearch의 데이터들은 인덱스(Index)라는 논리적인 집합 단위로 구성되며 서로 다른 저장소에 분산되어 저장된다. 서로 다른 인덱스들을 별도의 커넥션 없이 하나의 질의로 묶어서 검색하고, 검색 결과들을 하나의 출력으로 도출할 수 있는데, Elasticsearch의 이러한 특징을 멀티테넌트라고 한다.
ELK 구성
- Logstash
다양한 소스(DB, csv 파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달 - Elasticsearch
Logstash로부터 받은 데이터를 검색 및 집계하여 필요한 정보를 획득 - Kibana
Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링
구성요소
- 클러스터(Cluster)
- 전체 데이터를 함께 보유하고 모든 노드에서 연합 인덱싱 및 검색 기능을 제공하는 하나 이상의 노드(서버) 모음
- 클러스터는 기본적으로 elasticsearch 라는 고유한 이름으로 식별
- 이 이름은 노드가 이름으로 클러스터에 참여하도록 설정된 경우 노드가 클러스터의 일부일 수 있기 때문에 중요
- 노드(Node)
- 노드는 클러스터의 일부이며 데이터를 저장하고 클러스터의 인덱싱 및 검색 기능에 참여하는 단일 서버
- 단일 클러스터에서 원하는 만큼 노드를 소유 가능
- 현재 네트워크에서 실행중인 다른 Elasticsearch 노드가 없는 경우 단일 노드를 시작하면 기본적으로 elaticsearch라는 새로운 단일 노드 클러스터가 생성
- 색인(index)
- 색인은 다소 유사한 특성을 갖는 문서의 컬렉션
- 색인은 이름(모두 소문자여야함)으로 식별되며 이 이름은 색인 작성, 검색, 갱신 및 삭제할 때 색인을 참조하는 데 사용
- RDB 관점에서 보면 DB에 해당
- Type
- 다른 종류의 data들을 같은 index에 저장하게 해주는 index의 ‘논리적인’ 부분을 의미
- 7.x 버전부터 해당 개념이 전체 삭제 -> deprecated
- RDB 관점에서 보면 Table에 해당
- Documments
- 문서는 색인을 생성할 수 있는 기본 정보 단위
- JSON으로 표현
- RDB 관점에서 Record
참고
https://ko.wikipedia.org/wiki/%EC%9D%BC%EB%9E%98%EC%8A%A4%ED%8B%B1%EC%84%9C%EC%B9%98
https://backtony.github.io/elk/2021-09-08-elk-1/#1-elk-%EC%8A%A4%ED%83%9D%EB%9E%80
https://steady-coding.tistory.com/573
'TIL' 카테고리의 다른 글
웹 서버와 Serverless (0) | 2023.04.20 |
---|---|
NCP 서버 접속용 IP를 주는 이유 (0) | 2023.02.04 |