SlideShare a Scribd company logo
1
김종민
kimjmin@gmail.com, jongmin.kim@elastic.co
검색엔진이 데이터를
다루는 방법
22
저는…
2015년 부터
Tech Evangelist (== 입개발자)
@Elastic
3
Elastic?
4
Elastic?
• Elasticsearch 라는 검색엔진을 개발한 회사입니다.
‒ (ELK Stack 으로 더 잘 알려져 있습니다.)
• 검색엔진은 우리 주변 여기저기에 있습니다.
• 요즘은 검색엔진이 데이터 분석에도 쓰입니다.
2017 데이터야 놀자
Elastic Stack
100% open source
6
https://db-engines.com/en/ranking/search+engine
7
2012년 설립.
현재 직원은 600명 정도. 한국은 7명.
본사는 네델란드 암스텔담과
캘리포니아 마운틴 뷰에 있습니다.
7
8
아파치 루씬 (Apache Lucene)
• Created by - Doug Cutting
• Written in - Java
• Apache Solr, Elasticsearch
9
RDBMS 에서는 데이터를 테이블 형태로 저장합니다.
열을 기준으로 인덱스를 만듭니다.
책의 맨 앞에 있는 제목 리스트와 같습니다.
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
10
검색엔진에서는 inverted index 라는 구조로 저장합니다.
RDBMS 와 반대 구조입니다.
텍스트를 다 뜯어서 검색어 사전을 만듭니다.
책의 맨 뒤에 있는 페이지를 가리키는 키워드 같습니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast 2 jumps 1
The 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
11
실제로는 이렇게 저장됩니다.
텍스트를 저장할 때 몇가지 처리 과정을 거칩니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
12
텍스트 처리 과정
대소문자를 변환 합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast  fast 2 jumps 1
The  the 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
13
텍스트 처리 과정
토큰을 (보통 ascii 순서로) 재 정렬합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
14
텍스트 처리 과정
불용어(stopwords, 검색어로서의 가치가 없는 단어들) 를 제거합니다.
a, an, are, at, be, but, by, do, for, i, no, the, to … 등등
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
15
텍스트 처리 과정
형태소 분석 과정을 거칩니다.
보통 ~s, ~ing 등을 제거하는 과정입니다.
한글은 의미 분석을 해야 해서 좀 더 복잡합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy  lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits  rabbit 2
jumping  jump 2
jumps  jump 1
16
텍스트 처리 과정
jumping, jumps가 jump 로 똑같이 바뀌었으므로 토큰을 병합 해 줍니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbit 2
jump 1 , 2
17
텍스트 처리 과정
동의어를 처리합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
18
검색 과정
검색어도 똑같이 텍스트 처리를 합니다.
“The lazy spiders” 라고 검색하면
The lazy rabbits
lazi
rabbit
1
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
2
19
검색엔진은
RDBMS 검색엔진
데이터 저장 방식 정규화 역정규화
전문(Full Text) 검색 속도 느림 빠름
의미 검색 불가능 가능
Join 가능 불가능
수정 / 삭제 빠름 느림
20
Elasticsearch 클러스터링 과정
대용량 검색을 위해서는 클러스터링이 필요합니다.
Elasticsearch는 데이터를 샤드(Shard) 단위로 분리해서 저장합니다.
10 2
3 4
노드 (Node)
Elasticsearch 실행 프로세스
샤드 (Shard)
루씬 검색 쓰레드
21
10 2
3 4
Elasticsearch 클러스터링 과정
노드를 여러개 실행시키면 같은 클러스터로 묶입니다.
Elasticsearch
클러스터(Cluster)
22
20 1 4 3
Elasticsearch 클러스터링 과정
샤드들은 각각의 노드들에 분배되어 저장됩니다.
23
20 3 41 04 13 2
무결성과 가용성을 위해 샤드의 복제본을 만듭니다.
같은 내용의 복제본과 샤드는 서로 다른 노드에 저장됩니다.
Elasticsearch 클러스터링 과정
24
20 3 41 04 13 2
시스템 다운이나 네트워크 단절 등으로 유실된 노드가 생기면
Elasticsearch 클러스터링 과정
25
20 3 41 04 13 2
4
0
복제본이 없는 샤드들은 다른 살아있는 노드로 복제를 시작합니다.
Elasticsearch 클러스터링 과정
26
20 3 41 13 2
4
0
노드의 수가 줄어들어도 샤드의 수는 변함 없이 무결성을 유지합니다.
Elasticsearch 클러스터링 과정
27
20 3 41 13 2
4
0
처음 쿼리 수행 명령을 받은 노드는 모든 샤드에게 쿼리를 전달합니다.
1차적으로 모든 샤드(또는 복제본에서) 검색을 실행합니다.
검색 과정 – Query Phase
client
28
20 3 41 13 2
4
0
“from + size” 크기의 결과 큐를 처음 명령 받은 노드로 리턴합니다.
리턴된 결과는 루씬 doc id 와 랭킹 점수만 가지고 있습니다.
노드는 리턴된 결과들을 가지고 랭킹 점수 기반으로 정렬합니다.
검색 과정 – Query Phase
client
29
20 3 41 13 2
4
0
정렬된 값 기반으로 유효한 샤드들에 검색 결과들을 요청합니다.
검색 과정 – Fetch Phase
client
30
20 3 41 13 2
4
0
전체 문서 내용(_source) 등의 정보가 리턴되어 클라이언트로 전달됩니다.
검색 과정 – Fetch Phase
client
31
검색엔진에서는
정확한 검색을 위한
랭킹 알고리즘이
정말 정말 중요합니다.
32
랭킹 알고리즘
보통은 TF/IDF 를 많이 씁니다. Elasticsearch 5.0 부터는
BM25 라는 알고리즘을 사용합니다.
33
TF / IDF
• Term Frequency
‒ 찾는 검색어가 문서에 많을수록 해당 문서의 정확도가 높습니다.
• Inverse Document Frequency
‒ 전체 문서에서 많이 출현한 (흔한) 단어일수록 점수가 낮습니다.
Term Frequency / Inverse Document Frequency
34
검색 랭킹이 중요한 이유
• 사용자들은 대부분 처음 나온 결과만 봅니다.
• 결과값이 큰 내용을 fetch 하는 것은 상당히 부하가 큽니다.
• 1~1,000 을 fetch 하는 것이나 990~1,000 을 fetch 하는 것이나 쿼리 작업
규모가 비슷합니다.
• 구글도 랭킹이 중요하긴 마찬가지…
2017 데이터야 놀자
35
루씬 세그먼트(Segment)
Inverted Index, Doc Value, 원본 문서 등등을 저장하고 있는 단위 파일입니다.
샤드 세그먼트문서
• 루씬은 inverted index를 하나의 거
대한 파일이 아니라 여러개의 작은
파일 단위로 저장합니다.
• 입력 버퍼가 가득 차거나, 1초 마다
하나씩 생성됩니다.
• 한번 생성된 세그먼트는 변경되지
않습니다. (immutable)
36
문서 변경/삭제 과정
• update는 없습니다. 모두 delete & insert 입니다.
• 문서를 삭제하면 삭제되었다는 상태만 표시하고 검색에서 제외합니다.
• 나중에 세그먼트 병합 과정에서 삭제된 문서를 빼고 나머지 문서들을 모아
새로운 세그먼트를 만듭니다.
‒ 그래서 문서를 삭제 하더라도 세그먼트 병합을 하기 전 까지 스토리지 용량은 줄어들지 않
습니다.
• 세그먼트 병합은 비용이 큰 동작입니다.
‒ 디스크 I/O 작업입니다.
‒ 시스템이 느려집니다.
‒ 가능하면 사용자들이 적은 시간에 하는것이 좋습니다.
한먼 생성된 세그먼트는 변경되지 않습니다.
37
세그먼트 병합(Segment Merge)
http://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
7
8
9
10
12
13
15
38
세그먼트 병합(Segment Merge)
http://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html
• 오래된 세그먼트는 크기가 크고
최근 생성된 세그먼트는
상대적으로 크기가 작습니다.
• 오래된 문서를 삭제하는 것은
더욱 비용이 큽니다.
• 날짜별로 저장 영역(인덱스)를
구분하는 것이 바람직합니다.
‒ Elasticsearch 에서는 여러 인덱스를
묶어서 검색할 수 있는
멀티테넌시를 지원합니다.
39
Elasticsearch 사용하시려면
• 로그는 가능하면 날짜별로 나눠서 저장하세요.
• 원본 데이터는 항상 잘 가지고 계세요. 새로 부어야 하는 경우가 많습니다.
• 세그먼트 병합은 사용하지 않는 시간에.
40
https://www.elastic.co/kr/
https://www.facebook.com/groups/elasticsearch.kr
감사합니다.

More Related Content

What's hot

Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
DaeMyung Kang
 
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txtElasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
용진 조
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
NAVER D2
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
NAVER D2
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
DaeMyung Kang
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
Jin wook
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Yooseok Choi
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
DaeMyung Kang
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
YoungHeon (Roy) Kim
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Yongho Ha
 
Plazma - Treasure Data’s distributed analytical database -
Plazma - Treasure Data’s distributed analytical database -Plazma - Treasure Data’s distributed analytical database -
Plazma - Treasure Data’s distributed analytical database -
Treasure Data, Inc.
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
NAVER D2
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
종민 김
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝
NAVER D2
 
[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)
NAVER D2
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
NAVER D2
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
흥래 김
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
Juhong Park
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
Hyojun Jeon
 

What's hot (20)

Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txtElasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
Plazma - Treasure Data’s distributed analytical database -
Plazma - Treasure Data’s distributed analytical database -Plazma - Treasure Data’s distributed analytical database -
Plazma - Treasure Data’s distributed analytical database -
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝
 
[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
 

Similar to 검색엔진이 데이터를 다루는 법 김종민

Real-time full-text search with Luwak and Samza
Real-time full-text search with Luwak and SamzaReal-time full-text search with Luwak and Samza
Real-time full-text search with Luwak and Samza
명현 이
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
Gruter
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
Wonha Ryu
 
elasticsearch
elasticsearchelasticsearch
elasticsearch
승우 백
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)
크몽
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
NAVER D2
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
ultrasuperrok
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조
Choonghyun Yang
 
1 mysql아키텍쳐 v1
1 mysql아키텍쳐 v11 mysql아키텍쳐 v1
1 mysql아키텍쳐 v1
resoliwan
 
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
Hyeshik Chang
 
What’s Evolving in the Elastic Stack
What’s Evolving in the Elastic StackWhat’s Evolving in the Elastic Stack
What’s Evolving in the Elastic Stack
Elasticsearch
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
SangHoon Lee
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
Jongho Woo
 
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
Woong Seok Kang
 
오라클 DB 아키텍처와 튜닝
오라클 DB 아키텍처와 튜닝오라클 DB 아키텍처와 튜닝
오라클 DB 아키텍처와 튜닝
철민 권
 
[1B6]Realm a database for android & ios
[1B6]Realm a database for android & ios[1B6]Realm a database for android & ios
[1B6]Realm a database for android & ios
NAVER D2
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용
Junyi Song
 

Similar to 검색엔진이 데이터를 다루는 법 김종민 (20)

Real-time full-text search with Luwak and Samza
Real-time full-text search with Luwak and SamzaReal-time full-text search with Luwak and Samza
Real-time full-text search with Luwak and Samza
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 
elasticsearch
elasticsearchelasticsearch
elasticsearch
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
 
Hadoop발표자료
Hadoop발표자료Hadoop발표자료
Hadoop발표자료
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조
 
1 mysql아키텍쳐 v1
1 mysql아키텍쳐 v11 mysql아키텍쳐 v1
1 mysql아키텍쳐 v1
 
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
 
What’s Evolving in the Elastic Stack
What’s Evolving in the Elastic StackWhat’s Evolving in the Elastic Stack
What’s Evolving in the Elastic Stack
 
DS_04
DS_04DS_04
DS_04
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
 
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
 
오라클 DB 아키텍처와 튜닝
오라클 DB 아키텍처와 튜닝오라클 DB 아키텍처와 튜닝
오라클 DB 아키텍처와 튜닝
 
[1B6]Realm a database for android & ios
[1B6]Realm a database for android & ios[1B6]Realm a database for android & ios
[1B6]Realm a database for android & ios
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용
 
Mongodb index
Mongodb indexMongodb index
Mongodb index
 

검색엔진이 데이터를 다루는 법 김종민

  • 2. 22 저는… 2015년 부터 Tech Evangelist (== 입개발자) @Elastic
  • 4. 4 Elastic? • Elasticsearch 라는 검색엔진을 개발한 회사입니다. ‒ (ELK Stack 으로 더 잘 알려져 있습니다.) • 검색엔진은 우리 주변 여기저기에 있습니다. • 요즘은 검색엔진이 데이터 분석에도 쓰입니다. 2017 데이터야 놀자
  • 7. 7 2012년 설립. 현재 직원은 600명 정도. 한국은 7명. 본사는 네델란드 암스텔담과 캘리포니아 마운틴 뷰에 있습니다. 7
  • 8. 8 아파치 루씬 (Apache Lucene) • Created by - Doug Cutting • Written in - Java • Apache Solr, Elasticsearch
  • 9. 9 RDBMS 에서는 데이터를 테이블 형태로 저장합니다. 열을 기준으로 인덱스를 만듭니다. 책의 맨 앞에 있는 제목 리스트와 같습니다. DOC TEXT 1 The quick brown fox jumps over the lazy dog 2 Fast jumping rabbits
  • 10. 10 검색엔진에서는 inverted index 라는 구조로 저장합니다. RDBMS 와 반대 구조입니다. 텍스트를 다 뜯어서 검색어 사전을 만듭니다. 책의 맨 뒤에 있는 페이지를 가리키는 키워드 같습니다. TOKEN (TERM) DOC TOKEN (TERM) DOC Fast 2 jumps 1 The 1 lazy 1 brown 1 over 1 dog 1 quick 1 fox 1 rabbits 2 jumping 2 the 1
  • 11. 11 실제로는 이렇게 저장됩니다. 텍스트를 저장할 때 몇가지 처리 과정을 거칩니다. TOKEN (TERM) DOC TOKEN (TERM) DOC brown 1 lazi 1 dog 1 over 1 fast 1 , 2 quick 1 , 2 fox 1 rabbit 2 jump 1 , 2
  • 12. 12 텍스트 처리 과정 대소문자를 변환 합니다. TOKEN (TERM) DOC TOKEN (TERM) DOC Fast  fast 2 jumps 1 The  the 1 lazy 1 brown 1 over 1 dog 1 quick 1 fox 1 rabbits 2 jumping 2 the 1
  • 13. 13 텍스트 처리 과정 토큰을 (보통 ascii 순서로) 재 정렬합니다. TOKEN (TERM) DOC TOKEN (TERM) DOC brown 1 lazy 1 dog 1 over 1 fast 2 quick 1 fox 1 rabbits 2 jumping 2 the 1 jumps 1 the 1
  • 14. 14 텍스트 처리 과정 불용어(stopwords, 검색어로서의 가치가 없는 단어들) 를 제거합니다. a, an, are, at, be, but, by, do, for, i, no, the, to … 등등 TOKEN (TERM) DOC TOKEN (TERM) DOC brown 1 lazy 1 dog 1 over 1 fast 2 quick 1 fox 1 rabbits 2 jumping 2 the 1 jumps 1 the 1
  • 15. 15 텍스트 처리 과정 형태소 분석 과정을 거칩니다. 보통 ~s, ~ing 등을 제거하는 과정입니다. 한글은 의미 분석을 해야 해서 좀 더 복잡합니다. TOKEN (TERM) DOC TOKEN (TERM) DOC brown 1 lazy  lazi 1 dog 1 over 1 fast 2 quick 1 fox 1 rabbits  rabbit 2 jumping  jump 2 jumps  jump 1
  • 16. 16 텍스트 처리 과정 jumping, jumps가 jump 로 똑같이 바뀌었으므로 토큰을 병합 해 줍니다. TOKEN (TERM) DOC TOKEN (TERM) DOC brown 1 lazi 1 dog 1 over 1 fast 2 quick 1 fox 1 rabbit 2 jump 1 , 2
  • 17. 17 텍스트 처리 과정 동의어를 처리합니다. TOKEN (TERM) DOC TOKEN (TERM) DOC brown 1 lazi 1 dog 1 over 1 fast 1 , 2 quick 1 , 2 fox 1 rabbit 2 jump 1 , 2
  • 18. 18 검색 과정 검색어도 똑같이 텍스트 처리를 합니다. “The lazy spiders” 라고 검색하면 The lazy rabbits lazi rabbit 1 DOC TEXT 1 The quick brown fox jumps over the lazy dog 2 Fast jumping rabbits 2
  • 19. 19 검색엔진은 RDBMS 검색엔진 데이터 저장 방식 정규화 역정규화 전문(Full Text) 검색 속도 느림 빠름 의미 검색 불가능 가능 Join 가능 불가능 수정 / 삭제 빠름 느림
  • 20. 20 Elasticsearch 클러스터링 과정 대용량 검색을 위해서는 클러스터링이 필요합니다. Elasticsearch는 데이터를 샤드(Shard) 단위로 분리해서 저장합니다. 10 2 3 4 노드 (Node) Elasticsearch 실행 프로세스 샤드 (Shard) 루씬 검색 쓰레드
  • 21. 21 10 2 3 4 Elasticsearch 클러스터링 과정 노드를 여러개 실행시키면 같은 클러스터로 묶입니다. Elasticsearch 클러스터(Cluster)
  • 22. 22 20 1 4 3 Elasticsearch 클러스터링 과정 샤드들은 각각의 노드들에 분배되어 저장됩니다.
  • 23. 23 20 3 41 04 13 2 무결성과 가용성을 위해 샤드의 복제본을 만듭니다. 같은 내용의 복제본과 샤드는 서로 다른 노드에 저장됩니다. Elasticsearch 클러스터링 과정
  • 24. 24 20 3 41 04 13 2 시스템 다운이나 네트워크 단절 등으로 유실된 노드가 생기면 Elasticsearch 클러스터링 과정
  • 25. 25 20 3 41 04 13 2 4 0 복제본이 없는 샤드들은 다른 살아있는 노드로 복제를 시작합니다. Elasticsearch 클러스터링 과정
  • 26. 26 20 3 41 13 2 4 0 노드의 수가 줄어들어도 샤드의 수는 변함 없이 무결성을 유지합니다. Elasticsearch 클러스터링 과정
  • 27. 27 20 3 41 13 2 4 0 처음 쿼리 수행 명령을 받은 노드는 모든 샤드에게 쿼리를 전달합니다. 1차적으로 모든 샤드(또는 복제본에서) 검색을 실행합니다. 검색 과정 – Query Phase client
  • 28. 28 20 3 41 13 2 4 0 “from + size” 크기의 결과 큐를 처음 명령 받은 노드로 리턴합니다. 리턴된 결과는 루씬 doc id 와 랭킹 점수만 가지고 있습니다. 노드는 리턴된 결과들을 가지고 랭킹 점수 기반으로 정렬합니다. 검색 과정 – Query Phase client
  • 29. 29 20 3 41 13 2 4 0 정렬된 값 기반으로 유효한 샤드들에 검색 결과들을 요청합니다. 검색 과정 – Fetch Phase client
  • 30. 30 20 3 41 13 2 4 0 전체 문서 내용(_source) 등의 정보가 리턴되어 클라이언트로 전달됩니다. 검색 과정 – Fetch Phase client
  • 31. 31 검색엔진에서는 정확한 검색을 위한 랭킹 알고리즘이 정말 정말 중요합니다.
  • 32. 32 랭킹 알고리즘 보통은 TF/IDF 를 많이 씁니다. Elasticsearch 5.0 부터는 BM25 라는 알고리즘을 사용합니다.
  • 33. 33 TF / IDF • Term Frequency ‒ 찾는 검색어가 문서에 많을수록 해당 문서의 정확도가 높습니다. • Inverse Document Frequency ‒ 전체 문서에서 많이 출현한 (흔한) 단어일수록 점수가 낮습니다. Term Frequency / Inverse Document Frequency
  • 34. 34 검색 랭킹이 중요한 이유 • 사용자들은 대부분 처음 나온 결과만 봅니다. • 결과값이 큰 내용을 fetch 하는 것은 상당히 부하가 큽니다. • 1~1,000 을 fetch 하는 것이나 990~1,000 을 fetch 하는 것이나 쿼리 작업 규모가 비슷합니다. • 구글도 랭킹이 중요하긴 마찬가지… 2017 데이터야 놀자
  • 35. 35 루씬 세그먼트(Segment) Inverted Index, Doc Value, 원본 문서 등등을 저장하고 있는 단위 파일입니다. 샤드 세그먼트문서 • 루씬은 inverted index를 하나의 거 대한 파일이 아니라 여러개의 작은 파일 단위로 저장합니다. • 입력 버퍼가 가득 차거나, 1초 마다 하나씩 생성됩니다. • 한번 생성된 세그먼트는 변경되지 않습니다. (immutable)
  • 36. 36 문서 변경/삭제 과정 • update는 없습니다. 모두 delete & insert 입니다. • 문서를 삭제하면 삭제되었다는 상태만 표시하고 검색에서 제외합니다. • 나중에 세그먼트 병합 과정에서 삭제된 문서를 빼고 나머지 문서들을 모아 새로운 세그먼트를 만듭니다. ‒ 그래서 문서를 삭제 하더라도 세그먼트 병합을 하기 전 까지 스토리지 용량은 줄어들지 않 습니다. • 세그먼트 병합은 비용이 큰 동작입니다. ‒ 디스크 I/O 작업입니다. ‒ 시스템이 느려집니다. ‒ 가능하면 사용자들이 적은 시간에 하는것이 좋습니다. 한먼 생성된 세그먼트는 변경되지 않습니다.
  • 38. 38 세그먼트 병합(Segment Merge) http://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html • 오래된 세그먼트는 크기가 크고 최근 생성된 세그먼트는 상대적으로 크기가 작습니다. • 오래된 문서를 삭제하는 것은 더욱 비용이 큽니다. • 날짜별로 저장 영역(인덱스)를 구분하는 것이 바람직합니다. ‒ Elasticsearch 에서는 여러 인덱스를 묶어서 검색할 수 있는 멀티테넌시를 지원합니다.
  • 39. 39 Elasticsearch 사용하시려면 • 로그는 가능하면 날짜별로 나눠서 저장하세요. • 원본 데이터는 항상 잘 가지고 계세요. 새로 부어야 하는 경우가 많습니다. • 세그먼트 병합은 사용하지 않는 시간에.

Editor's Notes

  1. 저는 현재 Elastic 이라는 오픈소스 검색엔진 회사에서 Tech Evangelist 로 일을 하고 있습니다. Tech Evangelist 를 딱히 정의하기는 어려운데, 저는 입개발자 라고 보통 이야기 하고요, 해당 기술을 잘 모르던 사람에게 해당 기술 또는 제품에 대한 흥미를 불어넣어 주는 것이 가장 중요한 역할이라고 할 수 있을 것 같습니다. 영업, 기술영업들과는 약간 다른데요, 영업들은 보통 숫자(돈, 기간 등)를 가지고 이야기를 하고요, 저희는 보통 그런것을 배제하고 코어 기술들에 대한 이야기들을 합니다. 그래서 커뮤니티 밋업 이나 컨퍼런스 같은 곳에서 발표를 하는 것이 중요한 Action Item 입니다.