전체 글

신승환의 기술 블로그
Elasticsearch

[Elasticsearch] 검색(Search)

검색과정이란? 검색과정은 요청된 검색어를 분석한 다음 해당 검색어를 토대로 Inverted Index에서 검색을 진행한 후에 매칭되는 결과를 검색결과로 표시해주는 일련의 행위를 말한다. Inverted Index Inverted Index 란 문자열을 분석한 결과를 저장하고 있는 구조체이다. 예를 들어 Elasticsearch에 위와 같은 두 개의 문서를 색인(Indexing) 시켰다고 가정해 보자. 첫 번째 Document id는 1 이고 두번째 Document id 는 2라고 가정하자. 그럼 Elasticsearch 엔진은 색인과정에서 문자열을 구성하고 있는 단어들을 분석기(analyzer)를 통해서 토큰으로 분류하고 해당 토큰이 어떤 문서에 있는지 정보를 추가해 줘서 오른쪽과 같은 inverted ..

Elasticsearch

[Elasticsearch] 색인 (Indexing)

색인(Indexing)이란 색인(Indexing)이란 문서를 분석하고 저장하는 과정을 색인이라고 한다. 색인의 과정을 도식화해보면 아래와 같다. 예를 들어서 SERVER 3개에 Elasticsearch 가 Cluster 형태로 구성되어 있다고 가정해 보자. 1) movie 인덱스에 1001번 아이디를 가진 데이터를 NODE A에 PUT 한다. 2) NODE A에서 Primary shard를 하나 생성하고 해당 서버가 아닌 다른 서버에 Replica shard 를 하나 생성해 준다. (shard 1, replica 1 이 기본값임) 그다음 현재 Primary shard의 데이터를 복사해 준다. 그럼 다음으로 NODE B로 id 가 1002인 데이터가 PUT 된다고 가정해 보자. 1) movie 인덱스에 1..

카테고리 없음

[Elasticsearch] Mapping 이란?

Mapping 이란? Mapping 이란 문서의 구조를 나타내는 정보라고 할 수 있다. ES 에서와 RDB 에서와 사용하는 단어는 아래와 같이 대응된다고 볼 수 있다. Elasticsearch RDBMS Index database mapping schema document row Elasticsearch를 스키마리스라고 해서 스키마가 없는 게 아니고 미리 정의하지 않아도 되는 것이다. Mapping 은 크게 동적 매핑(Dynamic Mapping)과 정적 매핑(Static Mapping)으로 나뉘게 된다. mapping 종류 정의 동적 매핑 (Dynamic Mapping) 처음 색인되는 문서를 바탕으로 매핑 정보를 Elasticsearch가 동적(자동)으로 생성한다. 정적 매핑 (Static Mappin..

카테고리 없음

[Elasticsearch] Index 란?

인덱스 (Index) 란? 문서가 저장되는 논리적인 공간이다. Es 에서 Index 는 RDBMS 에서 Database 와 대응되는 개념이라고 보면 된다. Es 의 용어와 RDBMS 의 용어를 비교해보면 아래의 표와 같이 이해할 수 있다. Elasticsearch RDBMS Index Database Mapping Schema Document Row 인덱스 설계 방법 인덱스를 설계하는 것은 ES 를 사용하기 위해 고려해야 하는 첫 단계이다. 인덱스 설계를 어떤 방향으로 하느냐에 따라서 문서의 구조 및 검색 쿼리 자체가 달라지게 된다. 예를들어 아래의 그림을 보자. 인덱스를 설계할때 movie 인덱스를 생성해서 관리해도 되고 각 장르마다 인덱스를 설계해서 관리해도 된다. 그럼 인덱스의 설계에 따라 어떤식으..

Elasticsearch

[Elasticsearch] Shard 란?

샤드(Shard) 란 인덱스가 색인되는 문서가 실제로 저장되는 공간을 의미한다. 하나의 인덱스는 반드시 하나 이상의 샤드를 가진다. 샤드는 크게 Primary shard , Replica shard로 나뉜다. 종류 역할 Primary shard 문서가 저장되는 원본 샤드이다. 색인과 검색 성능에 모두 영향을 준다. Replica shard Primary shard 의 복제 샤드이다. Primary shard 에 문제가 생기면 Replica shard 가 Primary shard 로 승격된다. 문서의 색인과정은 Primary shard 에서 먼저 분석 과정이 이루어지고 저장이 된 다음에 해당 문서가 Replica shard 로 복제되는 구조이다. Replica shard 의 개수보다 Primary shar..

Elasticsearch

[Elasticsearch] Cluster, Node 란?

Cluster, Node 란? 일반적인 Cluster 의 정의는 "여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합" 을 말한다. Elasticsearch 도 여러대의 노드(컴퓨터와 대응되는 개념) 들이 각자의 역할을 바탕으로 연결되어 하나의 시스템처럼 동작한다. Node 의 종류 1) 마스터 노드 (Master Node) : 클러스터 상태 관리 및 메타 데이터 관리 2) 데이터 노드 (Data Node) : 문서 색인 및 검색 요청 처리 3) 코디네이팅 노드 (Coordinating Node) : 검색 요청 처리 4) 인제스트 노드 (Ingest Node) : 색인되는 문서의 데이터 *전처리 *전처리 : 어떤 문서가 ES 내에 들어와서 저장이 되기 이전에 수정한다는 의미. 마스터..

Elasticsearch

[Elasticsearch] Elasticsearch 란?

Elasticsearch 란? 1. 루씬 기반의 오픈소스 검색 엔진이다. 루씬이란 자바 언어로 이루어진 정보 검색 라이브러리이다. 루씬 라이브러리를 통해서 색인과 검색을 가능하게 한다. json 기반의 문서를 저장하고 검색할 수 있으며 분석 작업도 가능하다. 2. 준 실시간 검색 시스템 실시간이라고 생각 될 만큼 색인된 데이터가 빠르게 검색된다. 3. 고가용성(HA)를 위한 클러스터를 구성할 수 있다. 한 대 이상의 노드로 클러스터를 구성하여 높은 수준의 안정성을 보장하고 부하 분산을 통해 안정적인 데이터 처리가 가능하다. 4. 동적 스키마 생성 가능 입력될 데이터들에 대해 미리 스키마를 정의하지 않아도 자동으로 스키마가 생성된다. 일반적으로 RDBMS 에서는 특정한 데이터를 저장하기 위해서는 스키마 지..

Kafka

[Kafka] Kafka 란?

Kafka 란 무엇인가? Kafka 는 가장 널리 쓰이고 있는 메시지 큐 솔루션 중 하나이다. 메시지 큐 (Message Queue) 는 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나로, 메시지 지향 미들웨어를 구현한 시스템을 말한다. 메시지 지향 미들웨어란 비동기 메시지를 사용하는 응용 프로그램들 사이에서 데이터를 송수신하는 것을 의미한다. 메시지 큐는 메시지를 임시로 저장하는 버퍼와 비슷한 역할을 수행한다. 메시지큐는 실시간으로 처리되지 않아도 크게 문제없는 작업에 많이 적용하고는 한다. 예를 들면, 이메일 전송과 같은 작업에서 메시지큐를 사용할 수 있다. 서비스에서 이미 이메일을 전송했고, 실제 받는 사람이 읽을 때까지 시간이 얼마나 걸릴지는 모르지만, 해당 작업이 ..

C,C++

[C,C++] 포인터 배열, 배열 포인터

C/C++ 를 쓸때마다 항상 헷갈리는 단어가 존재한다. 바로 "포인터 배열"과 "배열 포인터" 이다. 그럼 두 단어가 의미하는바가 어떤식으로 다른지 알아보자. 1. 포인터 배열 (Pointer Array) 포인터 배열은 말 그대로 "포인터의 배열"을 의미한다. 배열이란 단일 식별자를 통해 같은 자료형의 여러 변수에 접근할 수 있게 해주는 집계 데이터유형 이다. 즉, 같은 자료형의 변수를 일렬로 늘어놓은 형태라고 생각하면 된다. 포인터 배열은 변수 자체가 포인터를 의미하므로 포인터 변수를 일렬로 늘어놓은 데이터 유형이라고 생각하면 된다. #include using namespace std; int main() { int a = 10; int b = 20; int c = 30; int *ptr_array[3..

Kafka

[Kafka] Kafka 버전 확인

Kafka 2.0 이상에서는 버전을 확인하기 위해서는 bin 디렉토리 하위에 있는 kafka-topic.sh 파일을 실행시키면 된다. ### kafka 내의 bin 디렉토리로 이동후에 아래의 명령어 실행 ./kafka-topic.sh --version 또한 많은 서비스회사에서 Kafka 를 Zookeeper 위에 띄워놓고 운영한다. Zookeeper 도 비슷한 방식으로 버전을 확인할 수 있다. 일단, zookeeper-shell.sh 가 존재하는 kafka 내의 bin 디렉토리로 이동해주자 (위에서 카프카 버전 확인했던 디렉토리랑 같은 위치) 그 다음 zookeeper-shell.sh 로 접속해준다. ### 아래의 명령어를 실행시켜준다. ./zookeeper-shell.sh {ip address}:{po..

ssh9308
신승환의 기술 블로그