SlideShare une entreprise Scribd logo
1  sur  40
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
감사합니다.

Contenu connexe

Tendances

webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 
Elasticsearch 한글 형태소 분석기 Nori 노리
Elasticsearch 한글 형태소 분석기 Nori 노리Elasticsearch 한글 형태소 분석기 Nori 노리
Elasticsearch 한글 형태소 분석기 Nori 노리종민 김
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나종민 김
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulSeungYong Oh
 
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?Juhong Park
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝NAVER D2
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into ElasticsearchKnoldus Inc.
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]MongoDB
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneRahul Jain
 
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교Amazon Web Services Korea
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 

Tendances (20)

webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
Elasticsearch 한글 형태소 분석기 Nori 노리
Elasticsearch 한글 형태소 분석기 Nori 노리Elasticsearch 한글 형태소 분석기 Nori 노리
Elasticsearch 한글 형태소 분석기 Nori 노리
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
 
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into Elasticsearch
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of Lucene
 
Amazon DynamoDB 키 디자인 패턴
Amazon DynamoDB 키 디자인 패턴Amazon DynamoDB 키 디자인 패턴
Amazon DynamoDB 키 디자인 패턴
 
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 

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

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 2014Gruter
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)크몽
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스NAVER D2
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기AWSKRUG - AWS한국사용자모임
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리ultrasuperrok
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조Choonghyun Yang
 
1 mysql아키텍쳐 v1
1 mysql아키텍쳐 v11 mysql아키텍쳐 v1
1 mysql아키텍쳐 v1resoliwan
 
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 StackElasticsearch
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106SangHoon Lee
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipelineJongho 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 & iosNAVER D2
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용Junyi Song
 

Similaire à 검색엔진이 데이터를 다루는 법 김종민 (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발표자료
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
 
코딩테스트 합격자 되기 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발표용
 

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

  • 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 사용하시려면 • 로그는 가능하면 날짜별로 나눠서 저장하세요. • 원본 데이터는 항상 잘 가지고 계세요. 새로 부어야 하는 경우가 많습니다. • 세그먼트 병합은 사용하지 않는 시간에.

Notes de l'éditeur

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