본문 바로가기
+ 펴낸 책

엘라스틱 스택 개발부터 운영까지

by 책만 2021. 8. 3.

엘라스틱 스택 개발부터 운영까지

데이터 수집, 변환, 분석, 시각화를 위한

엘라스틱서치, 로그스태시, 비츠, 키바나의 모든 것

 

준영, 정상운 지음 | 박재호 감수

592쪽 | 35,000원 | 2021년 8월 19일 출간 | 185*240*29 | ISBN 9791189909321

판매처 | [교보문고] [YES24] [알라딘] [영풍문고] [인터파크]  + 전국 교보문고 매장

전자책 판매처 | [리디북스] [교보문고] [YES24] [알라딘] | ISBN 9791189909352 | PDF 포맷 | 

 

★ 정오표: https://www.onlybook.co.kr/entry/elasticstack-errata 

★ 예제 코드 다운로드: https://github.com/onlybooks/elasticstack 

 

데이터를 처리하는 데 서로 잘 맞지도 않는 오픈소스 기술들을 굳이 동원해야 할까?

제각각인 오픈소스들을 통합하고 운영하느라 지친 개발자와 운영자들을 위한 솔루션!

이제 엘라스틱 스택 기술 하나면 OK!

 

어느덧 엘라스틱 스택은 검색 엔진을 넘어서 데이터 처리 시스템의 최강자로 자리 잡았다.

이 책에서는 빠르게 변화하는 세상에서 엘라스틱 스택을 지렛대로 삼아 기업의 생존 능력을 극대화하는 방법을 체계적으로 정리한다.

 

엔터프라이즈 빅데이터 파이프라인을 만들어 기업의 데이터를 처리하고 싶다면?

기업 내에 검색 엔진을 구축해서 빠르게 자료를 검색하고 싶다면?

방대한 데이터를 잘 가공해서 저장한 후에 멋진 시각화로 인사이트를 얻고 싶다면?

여러 서버에서 데이터들을 가져와 하나로 통합한 다음에 추이를 보거나 통계를 내고 싶다면?

바로 이럴 때 엘라스틱 스택이 정답이다.

실습을 위한 물리적인 컴퓨터나 가상 머신만 준비한다면 나머지는 모두 이 책이 책임져줄 것이다.

 

이 책에서는 엘라스틱 스택을 사용해 데이터 중심 애플리케이션을 설계하고, 개발하며, 운영하는 과정에서 꼭 알아야 할 필수 지식을 구체적인 사례와 함께 설명한다.

 

| 이 책에서 다루는 내용 |

- 엘라스틱서치, 로그스태시, 비츠, 키바나에 대한 핵심적인 사용 방법 소개

- 엘라스틱 스택의 특성을 제대로 활용하는 방법을 보여주는 구체적인 프로젝트 사례

- 운영 과정에서 주의해야 하는 사항을 실무 관점에서 정리

 

| 이 책의 특징 |

- 엘라스틱 스택에 빠르게 친숙해지고 싶은 누구나 쉽게 따라 할 수 있는 풍부한 예제

- 검색 엔진 활용법뿐만 아니라, 빅데이터 파이프라인을 구성하는 방법

- 엘라스틱 스택의 모니터링은 물론, 수집된 데이터를 다양한 방식으로 시각화하는 방법

- 실제 데이터 수집부터 시각화까지 전체 과정을 엘라스틱 스택의 구성요소만으로 전개

- 한국어 형태소 분석기 적용 사례

- 공공 데이터와 GIS 데이터를 활용한 지도 시각화 사례

- 운영 과정에 필요한 클러스터/샤드 구성과 보안 강화 방법 소개

 

| 이 책의 대상 독자 |

- 데이터 처리, 검색, 변환, 분석, 시각화 업무를 수행해야 하는 현업 개발자

- 빅데이터의 고가용성, 안정성, 보안을 확보해야 하는 서버 운영자

- 단일 오픈소스 기술로 빅데이터 플랫폼을 설계하거나 도입하기 원하는 아키텍트

- 엘라스틱 스택 기술: 엘라스틱 서치, 로그스태시, 비츠, 키바나에 관심 있는 개발자나 운영자

 

 

| 이 책의 구성 |

1부 ‘엘라스틱 스택 개요’에서는 엘라스틱 스택의 역사, 용도, 구성요소를 알아보고 엘라스틱서치와 키바나 설치 방법을 알아본다.

1장 ‘엘라스틱 스택이란’에서는 엘라스틱의 변천사와 엘라스틱 스택의 구성요소, 엘라스틱 스택을 활용한 전문 검색 서비스, 로그 모니터링 같은 서비스 활용 방법과 빅데이터 플랫폼에서 엘라스틱 스택의 위상과 역할을 알아본다. 그리고 엘라스틱 스택과 여타 솔루션들의 차이점을 알아볼 것이다. 2장 ‘윈도우 실습 환경 구성’에서는 윈도우 환경에서 엘라스틱서치와 키바나 7.10.1 버전을 설치하는 방법을 알아본다.

 

2부 ‘엘라스틱 스택 구성요소’에서는 엘라스틱 스택의 구성요소인 엘라스틱서치, 키바나, 로그스태시, 비츠를 자세히 알아본다.

3장 ‘엘라스틱서치 기본’에서는 엘라스틱서치 인덱스, 도큐먼트를 알아보고 도큐먼트 CRUD와 인덱스 구조를 이해한다. 또한 매핑, 인덱스 템플릿, 분석기 등을 배우면서 엘라스틱서치에 도큐먼트를 저장하는 방법을 배운다. 4장 ‘엘라스틱서치: 검색’에서는 인덱스 쿼리에서 사용하는 BM25 알고리즘을 알아보고 전문 쿼리와 용어 수준의 쿼리의 차이점과 대표적인 쿼리들을 직접 실행하면서 검색 방법을 알아본다. 5장 ‘엘라스틱서치: 집계’에서는 통계 정보를 얻는 메트릭 집계, 도큐먼트를 나누는 버킷 집계, 여러 집계를 사용하는 파이프라인 집계를 배운다. 6장 ‘로그스태시’에서는 로그스태시와 JDK 설치 방법을 알아보고 파이프라인 작성법과 플러그인 사용법 등을 배운다. 또한 로그스태시 모니터링도 알아본다. 7장 ‘비츠’에서는 비츠 설치 방법과 파일비트를 이용해 비츠를 설치하고 실행하는 일련의 과정을 배운다. 또한 모듈을 이용하여 쉽게 비츠를 설정하는 방법과 모니터링까지 알아본다. 8장 ‘키바나’에서는 시각화 메뉴들 중 디스커버, 시각화, 대시보드, 캔버스, 맵스의 사용법을 알아본다.

 

3부 ‘엘라스틱 스택 실전 활용’에서는 1부와 2부에서 배운 내용을 바탕으로 엘라스틱 스택으로 구현할 수 있는 몇 가지 프로젝트를 진행한다.

9장 ‘캐글 CSV 파일을 활용한 인덱스 작성’에서는 캐글에서 다운로드한 CSV 영화 파일을 엘라스틱 스택에 올린 다음 데이터를 분석해본다. 이 과정에서 로그스태시 루비 필터 등을 이용해 데이터를 정제하고, 매핑과 인덱스 템플릿을 이용해 인덱스를 생성한다. 10장 ‘로그스태시를 활용한 한글 트위터 데이터 분석’에서는 로그스태시 트위터 플러그인을 이용하여 소셜 데이터를 입수하는 방법을 배우고, 노리Nori 분석기로 한글 데이터를 분석하는 방법을 배운다. 인덱스를 다시 설계하는 방법과 키바나에서 실시간 데이터를 시각화하는 방법을 다룬다. 11장 ‘파이썬 클라이언트를 활용한 공공데이터 분석’에서는 파이썬을 이용한 엘라스틱서치 클라이언트 앱 개발 방법을 다룬다. 이 과정에서 공공 API를 사용하는 방법과 QGIS를 이용해 지도에서 활용할 수 있는 벡터 레이어를 만들고 시각화하는 방법을 배운다.

 

4부 ‘엘라스틱 운영’에서는 리눅스 환경에서 엘라스틱 스택 설치 방법과 클러스터의 기본이 되는 노드, 샤드, 인덱스와 그 설정에 대해 익힌다. 또한 실제 3대의 노드로 클러스터 구성까지 실습해본다. 12장 ‘리눅스 실습 환경 구성’에서는 리눅스 환경에서 엘라스틱서치와 키바나 7.10.1 버전을 설치하는 방법을 알아본다. 13장 ‘클러스터와 노드 구성’에서는 노드의 역할을 설명하고 클러스터 구성 가이드를 제공한다. 또한 핫/웜 구성 방법과 백업 방법을 알아보고 샤드와 샤드 최적화를 알아본다. 마지막으로 노드와 클러스터를 설정하는 방법을 배운다. 14장 ‘운영 클러스터 구축’에서는 운영을 위한 하드웨어 선정 가이드와 클러스터 구성 방법을 배우고 보안 기능을 활성화하는 방법을 익힌다. 마지막으로 운영에 필요한 사용자 역할을 구분하는 방법을 살펴본다.

 

| 이 책을 활용하기 위한 개발 환경 |

● 엘라스틱서치 7.10.1

● 키바나 7.10.1

● 로그스태시 7.10.1

● 파일비트 7.10.1

● 윈도우 10(2부, 3부에서 활용)

● 리눅스 우분투 18.04(4부에서 활용)

● JDK 8

● 파이썬 3.8

 

추천의 글

엘라스틱은 단순 DB가 아닌 수집/변환/분석/시각화 전체로 구성된 하나의 플랫폼으로서 소프트웨어 다운로드 수만 수억 건에 이를 정도로 많은 사랑을 받고 있지만 정작 국내에선 참고할 만한 마땅한 서적이 많지 않았던 것이 현실이었다. 게다가 버전이 워낙 빠르게 업그레이드되기 때문에 그동안 집필을 하다가 포기하는 경우도 다반사였다. 이 책은 이제 막 엘라스틱을 배우고자 하는 분들이나 그동안 어렴풋하게만 알고 있던 엔지니어에게 권장하고 싶은 책이며. 엘라스틱 소속의 전문 엔지니어가 집필에 참여했기 때문에 그 전문성과 함께 직접 필드에서 경험했던 현실성이 수반된 전문 서적으로서 강력 추천하는 바이다.
- 김관호 / Elastic 영업상무
작은 오픈소스 라이브러리로 시작해서 엔터프라이즈에서 사용 가능한 소프트웨어로 성장하고, 주변 소프트웨어 생태계를 만들고 확장하여 '스택' 혹은 '에코'라는 키워드가 붙는 소프트웨어가 간혹 있습니다. 루씬(Lucene)으로 시작한 엘라스틱서치는 지난 20여 년간 이런 독보적인 길을 걸어왔습니다. 엘라스틱서치는 검색 엔진으로 시작해서 NoSQL로 성장했고, 이제는 복잡한 데이터를 처리하고 관리하는 빅데이터 핵심 기술로 인정받고 있습니다. 그리고 로그 및 인덱스 정보를 관리하는 데이터 플랫폼으로 성장했습니다. 
뉴욕증권거래소(NYSE)에 상장된 엘라스틱 사는 큰 규모의 자본력을 동원해 엘라스틱 스택을 공격적으로 개발하고 있으며, 그 결과물이 오픈소스와 개발자 커뮤니티에서 폭넓게 사용되는 견고한 기술 생태계를 만들었습니다. 허나 주변에 엘라스틱서치를 사용하고 경험한 개발자는 굉장히 많지만, 엘라스틱서치가 다루는 데이터의 특성 때문인지 엘라스틱서치 인프라와 데이터를 관리하는 체계를 폭넓게 경험한 개발자는 극히 드뭅니다. 게다가 실무에서 활용 가능한 정보를 찾기도 꽤 어렵습니다. 이 때문에 『엘라스틱 스택 개발부터 운영까지』라는 책이 출간된다는 소식을 들으니 너무나 반갑습니다. 
엘라스틱 서치는 클라우드에서도 필수 기술로 자리 잡고 있습니다. AWS, 마이크로소프트 애저와 GCP 모두 엘라스틱서치 서비스를 제공하고 있고, 오라클 OCI에도 다음 분기에 엘라스틱서치 서비스를 공개할 예정입니다. 이처럼 모든 클라우드 서비스 제공사가 엘라스틱서치 서비스를 제공하는 것을 보면, 이 기술이 오늘날 IT 인프라스트럭처에서 얼마나 중요한 위치를 차지하고 있는지 확인할 수 있습니다. 
이 책은 엘라스틱 인프라, 데이터 관점에서 엘라스틱 관리를 다룹니다. 또한 개발 인터페이스를 엘라스틱 스택이 관리하는 데이터 플랫폼 관점을 소개합니다. 엘라스틱 스택 구축, 사용 및 관리가 궁금한 모든 분에게 적극 추천합니다.
- 김태완 / 유튜브 Σ민수아빠 채널, 한국 오라클
모든 소프트웨어가 그렇겠지만 엘라스틱스택과 같은 대용량 데이터를 다루는 시스템에서는 소프트웨어가 품은 철학(소프트웨어가 나온 목적) 및 정확한 용어와 개념을 알고 시작하는 것이 매우 중요하다. 가령 엘라스틱서치에서 말하는 인덱스를 관계형 데이터베이스에서의 인덱스와 같다고 오해하면 그다음부터 나오는 어떤 설명도 이해되지 않을 것이다. 이런 면에서 이 책은 전반에 걸쳐 엘라스틱 스택의 개념, 사용법, 활용 예제부터 엘라스틱서치의 운영에 이르기까지, 모든 개발과 운영에 필요한 핵심 내용을 알려준다. 
지금까지 여러 출판사에서 출간된 다양한 엘라스틱 기술서를 읽어봤지만 이 책보다 더 체계적이고도 자세히 설명한 도서를 보지 못했다. 이런 체계적인 구조의 설명이 가능한 데에는 저자진의 엘라스틱 스택 전반에 대한 깊고도 풍부한 이해에서 비롯됐을 것이다. 특히 이 책에서 다루는 실습들, 즉 캐글의 데이터셋이나 한글 트위터 데이터, 공공 데이터를 엘라스틱서치에 저장하고 분석하는 예제는 매우 실용적이다.
엘라스틱스택을 활용해 시스템을 구축/운영하려는 개발자 혹은 운영자가 있다면 반드시 이 책을 먼저 읽어보기를 권한다. 
- 안승규 / SKT Cloud Native 개발팀, 쿠버네티스 코리아 그룹 대표
정말 기다렸던 최신 버전의 엘라스틱 스택 책이 드디어 나와서 기쁘다. 먼저, 이 책을 집필해준 저자분들에게 감사를 표하고 싶다. 처음 엘라스틱 스택을 시작하는 분들은 물론, 오랫동안 사용했던 분들까지 모두에게 도움이 될 수 있도록 무엇 하나 놓치는 부분 없이 꼼꼼하게 친절하게 설명해준다. 하지만 그렇다고 장황하게 너무 많은 걸 담지도 않았으며, 꼭 필요한 내용을 선택해 비중을 잘 조절해 구성했다. 
이 책은 한 권만으로도 엘라스틱 스택을 이해하고 활용할 수 있도록 데이터 수집, 검색, 시각화 방법을 자세하게 설명해준다. 그리고 기술을 전달하는 데만 그치지 않고, 배운 내용을 잘 활용할 수 있도록 다양한 예제 프로젝트도 제공한다. 
이 책에서 가장 마음에 들었던 부분은 사람들이 엘라스틱 스택을 사용하다가 맞닥뜨리는 공통적인 질문과 실수에 대한 내용이다. 저자진은 이런 사항까지도 책에 잘 녹여서 담아냈으며, 독자들이 놓치지 않도록 한 번 더 강조해준다. 저자진의 깊은 내공과 오랜 경력을 다시 한번 느낄 수 있는 좋은 책이다.
- 임재봉 / Elastic 엔지니어
저는 수년 전 화력 발전소의 주요 기기에 탑재된 센서 데이터를 수집하여 학습한 결과를 기반으로 이상 징후를 판단하는 프로젝트를 리딩하고 있었습니다. 작은 팀이었지만 2~3년간 열심히 개발한 제품은 한 고객의 관심을 끌었고, 한 개 발전소에서 십여 개의 발전소로 확대 적용하겠다고 결정하게 됩니다. 단일 사이트를 기반으로 제작한 저희 제품은 여러 사이트에 적용해야 할 제품이 되었고, 제가 가장 먼저 품은 걱정거리는 어떻게 해야 여러 사이트의 데이터를 한곳으로 수집하여 효율적으로 전체 시스템을 운영할 수 있을까였습니다. 오픈 소스 기반으로 개발한 제품이었기에 데이터 수집, 가공, 시각화에 적합한 오픈 소스가 무엇이 있을까 검색을 하다가 어렵지 않게 엘라스틱 스택(당시엔 ELK 스택이라 부름)에 다다랐습니다. 적용 가능성 여부를 확인하기 위해 엘라스틱서치와 키바나를 제 윈도우 노트북에 내려받아 설치하고 일부 데이터를 집어넣어 테스트를 하는 동안 저는 놀라움을 금치 못했습니다. 반나절도 되지 않는 시간 동안, 저는 제가 지난 3년간 개발한 제품보다 더 견고하고 아름다우면서 훌륭한 제품을 아무런 사전 지식 없이 가지고 놀고 있었던 것입니다. 게다가 오픈 소스 버전임에도 엄청나게 많은 기능을 사용할 수 있었습니다. 
당시 저의  가장 큰 질문은 왜 이 제품이 생각보다 국내에서 잘 알려지지 않았을까, 였습니다. 제 나름대로 현존하는 기술들의 장단점을 비교해보고 업무에 맞는 기술을 선정해 아키텍처를 결정하고 개발 팀을 이끌며 제품을 만들던 저에게도 엘라스틱서치는 그렇게 잘 알려진 제품이 아니었습니다. 이유를 생각해보니, 한국어로 적힌 책이 그 당시에 존재하지 않았으며, 그나마 있던 책들도 엘라스틱서치의 검색 엔진 특징을 설명한 검색 관련 책뿐이었습니다. 공식 레퍼런스 문서도 모두 영문이었으며, 당시만 해도 국내 엔지니어들이 자유자재로 찾아보면서 실무에 적용하기에는 제약이 많았던 것이 사실입니다. 저는 그런 이유로 엘라스틱 스택 기술을 사용하고자 하는 사용자에게 도움을 주고 제가 겪었던 경험을 나누려는 마음에 엘라스틱 회사에 기술지원 엔지니어로 합류하게 됐습니다. 
그 이후로 수년이 지났지만, 지금까지도 엘라스틱 스택을 전반적으로 다루는 책은 찾아보기 어려웠습니다. 따라서 이 책이 엘라스틱을 제대로 배우고자 하는 한국 엔지니어들의 목마름을 한 번에 해소할 수 있을 것이라 생각합니다.
이 책으로 여러분은 엘라스틱 스택을 처음부터 개념과 함께 깊이 이해하고, 실제 공공 데이터를 활용해 데이터 수집, 가공, 시각화 실습을 해보며, 실무에서 반드시 알아야 할 운영 지식을 습득할 수 있습니다. 특히, 저자진 중에는 엘라스틱에서 수년간 근무를 하며 다양한 고객들이 겪은 문제를 해결하고 있는 엔지니어의 경험이 오롯이 녹아 있습니다. 장담하건대, 이 책은 그 어떤 책에서도 볼 수 없는 핵심 노하우를 제대로 익힐 수 있는 책이 될 것입니다. 최신 버전(7.10)의 주요 팁들이 곳곳에 숨어 있으니 하나도 놓치지 않고 필독해보시기 바랍니다.
오늘날 글로벌 검색 엔진 1위인 엘라스틱 스택의 위상은 나날이 높아지고 있습니다. 이제 소프트웨어 산업에서 일하는 사람이라면 누구든지 한 번쯤은 들어 봤을 기술이며, 정말 다양한 도메인 영역에서 수많은 문제를 해결하고 있습니다. 현재 엘라스틱 스택을 다룰 수 있는 엔지니어를 찾지 못해 고민이 많다는 기업의 하소연을 쉽게 접할 수 있습니다. 심지어 모 대학에서는 엘라스틱 기반 엔지니어를 양성하기 위한 프로젝트를 진행하고 있으며, 졸업 후 취업까지 쉽게 연계되는 것을 심심치 않게 봅니다. 모쪼록 이 책이 엘라스틱 엔지니어를 양성하는 데 주춧돌과 같은 바이블이 되길 바랍니다. 여러분도 도전해보세요! 
- 조인석 / Elastic 수석 기술지원 엔지니어

지은이 

김준영

학창시절 제2의 봉준호 같은 유명한 영화감독이 되고 싶었지만 스스로에 대한 확신이 없어서 성균관대 컴퓨터공학과에 입학했다. 대학 시절 삼성전자 소프트웨어 맴버십과 병역특례, 대학 서버실 관리를 하면서 컴퓨터 프로그래밍의 매력에 푹 빠졌다. 삼성전자에서 타이젠(Tizen) 운영체제를 개발했고 현재는 SK텔레콤에서 데이터 분석 업무를 담당하고 있다. 2014년도에 컴퓨터시스템응용 기술사 자격증을 취득했다.

2008년 회사에서 깃(Git)을 처음 도입했던 시절이 기억난다. 리눅스 개발팀이었던 우리 부서는 기존에 사용하던 유료 형상관리 툴 대신 리누스 토발즈(리눅스 창시자)가 만들었다는 새로운 형상관리 툴인 깃을 도입하기로 결정했다. 하지만 당시 깃은 초창기 버전이라 사용자 편의 기능이 거의 없었고, 모두들 사용법에 익숙하지 않아 사용하기 버거워 했다. 제품 릴리스가 코앞인데 개발자끼리 커밋이 얽히기라도 하면 밤을 새워서 깃 히스토리를 정리해야 했다. 지금 생각해 보면 원격 저장소, 스테이징 에어리어 같은 깃의 기본 개념들을 이해하지 않고 튜토리얼에서 제공하는 사용법 정도만 익혀서 바로 실전에 적용한 것이 문제였던 듯하다. 도구를 제대로 사용하는 것도 힘들었고 문제가 발생했을 때 해결하기도 힘겨웠다. 
그 이후로도 많은 프레임워크, 라이브러리, 프로그램등을 사용했지만 항상 가슴속에 답답함이 있었다. 영어로 적힌 개발 문서를 보는 어려움도 있고 코드 작성 이외의 시간을 낭비라고 생각했던 문화도 있었다. 프레임워크를 온전히 이해하지 못하고 주먹구구식으로 사용하다보니 기능을 100% 활용하지 못하는 것 같았다. 간혹 문제가 발생하거나 코드 작성이 힘들면 구글과 스택오버플로우의 도움을 받았다. 인터넷에서 발견한 코드들과 누군가의 질문에 친절하게 답변해주는 답변자들에 대한 감사함을 느꼈지만, 동시에 ‘왜 나는 코드 작성이 힘들었을까?’, ‘왜 나는 응용을 하지 못했을까?’ 하는 스스로에 대한 실망이 공존했다. 당연한 이야기지만 기초 지식이 없기 때문에 이해력이나 응용력이 좋을 수가 없었다.
이번에 책을 쓰면서 가장 중점을 둔 포인트가 바로 이 지점이었다. 이 책을 통해 독자들에게 엘라스틱 스택이라는 프레임워크의 기초와 기본을 알려주고 싶었다. 독자들이 적어도 자신이 사용하는 프레임워크의 기초 지식을 습득하고 코드를 작성했으면 하는 바람이 있었다. 중요한 부분은 여러 번 반복해서 완전히 이해하게 설명했고, 지면의 한계로 덜 중요한 부분은 과감히 생략했다. 혹시나 설명이 부족한 부분들은 온라인 문서 링크를 남겨뒀다. 이 책의 설명은 대부분 공식 문서나 엘라스틱 블로그에도 있는 내용이지만 인터넷에서 조각조각 배워 나가는 것보다 독자들이 이 책을 통해 먼저 큰 그림을 이해하면 더할 나위 없겠다. 프레임워크의 기초나 뼈대를 이해하면 한번 검색을 해도 더 스마트하게 검색하고 누군가의 코드와 설명, 혹은 질문과 답변들을 더 쉽게 이해하고 오래 기억할 수 있기 때문이다.
또한, 책을 쓰면서 신경을 쓴 또 다른 포인트는 기존 엘라스틱 책들과의 차별성이다. 처음 책을 기획할 때에는 시중에 전혀 없었던 엘라스틱 스택 활용서를 쓰려고 했다. 하지만 기본을 더 중시하자는 출판사의 의견에 따라서 엘라스틱 스택 설명과 활용, 그리고 운영 전반에 관한 책으로 변경했다. 대신 엘라스틱서치만을  깊게 다루는 기존 책들과 다르게 차별점을 두어, 엘라스틱서치 분량을 줄이고 로그스태시, 비트, 키바나 등 전반적인 엘라스틱 스택 분량을 늘렸다. 그리고 모든 것을 설명할 수 없다면 지엽적인 것들은 버리고, 대신 기초가 되는 부분들을 더 강조하고 활용 사례까지 보여주는 것으로 변경했다.
마지막으로, 엘라스틱을 만든 샤이 배넌과 엘라스틱을 발전시킨 수많은 참여자들, 그리고 더 깊이 뿌리를 파고 내려가면 루씬을 만들고 분산 시스템을 만들고 그 밖에 지금의 컴퓨터 환경을 만들기 위해 노력했던 수많은 개발자들에게 감사를 보낸다.

 

정상운

개발자로서 첫발을 내딛은 회사에서 일하다 엘라스틱 스택 기술에 흠뻑 빠져들었다. 이후 열성적으로 키바나와 로그스태시 플러그인에 컨트리뷰션하고 엘라스티콘(Elastic{ON}) 서울에서 발표도 하며 여러 대외 활동을 이어가다가 결국 전업으로 삼게 됐다. 지금은 엘라스틱 스택의 개발사인 엘라스틱에서 서포트 엔지니어로 일하며 인간 디버거 역할을 수행하고 있다.

로그 모니터링 시스템을 구축하기 위해 엘라스틱 스택(당시에는 ELK 스택이라고 불리웠다)을 처음 접했을 때를 돌이켜보면 다소 혼란과 혼동의 연속이었다. 그때 엘라스틱서치라고 하면, 인덱싱을 통해 빠른 전문(Full-text) 검색을 수행할 수 있는 도구라거나, 관계형 데이터베이스에 신뢰할 수 있는 데이터를 보관하고 부가적으로 색인을 도와주는 정도라고 이해했다. 하지만 조금 더 파보니 원본 데이터를 저장할 수도 있고 레플리카 구성을 통해 신뢰도도 높일 수 있다는 사실을 알게 됐으며, 데이터베이스처럼 활용할 수도 있겠다는 생각을 했다. 빠른 검색 및 집계 성능은 당시 개발하던 모니터링 솔루션의 성능 문제를 획기적으로 해결해 줄 수 있으리라 여겨졌으며, 직접 로그스태시와 키바나를 사용해보고 난 뒤에는 내가 다른 기술로 직접 구현하는 것보다는 차라리 엘라스틱 스택을 더 잘 활용하는 편이 낫겠다는 생각이 들었다. 실제로 간단하게 구축했던 엘라스틱 스택이 기존에 상상하지 못하던 수준의 로그를 가뿐하게 처리하는 모습을 보고서는, 바야흐로 엘라스틱 스택의 시대가 왔음을 직감했다. 
데이터 플랫폼을 구축하기 위해선 데이터의 수집, 정제, 보관, 검색, 시각화 등 다양한 기능을 구현해야 할 뿐 아니라 성능, 유연성 등을 고려해 여러 소프트웨어들을 조사하고 한데 묶어낼 필요가 있다. 이제는 잘 알려진 기술 중 하나인 엘라스틱 스택은 이 모든 요소를 포함함은 물론, 손쉬운 배포, 편리한 사용성, 확장성, 뛰어난 성능, 높은 내결함성 및 고가용성을 자랑해 그 자체만으로도 완전한 데이터 플랫폼을 구성할 수 있는, 그야말로 전천후 소프트웨어 스택의 위상에 올랐다.
하지만 많은 특징을 내포하고 있고 배포도 쉬운 만큼, 좀 더 제대로 사용하기 위해선 데이터 플랫폼 전반, 클러스터링, 분산 처리, 인덱싱 등 많은 기반 지식이 필요하다. 깊은 이해 없이 사용하다가 어느 순간 성능이나 보안 등 운영 측면에서 뜻밖의 문제에 맞닥뜨리기도 한다. 뿐만 아니라 엘라스틱 스택의 장점이자 단점인 빠른 업데이트와 그에 따른 추가 기능들은 사용자로 하여금 어떤 기능을 어디서부터 활용하면 좋을지 헷갈리게 만들기도 한다.
나는 이 책에 엘라스틱 스택의 구조와 동작 원리에 대해 오해 없이 정확한 정보를 담고자 노력했다. 방대한 엘라스틱 스택의 기능을 모두 담지는 못하더라도 가장 핵심적인 내용들을 추려 독자들로 하여금 엘라스틱 스택의 기능을 좀 더 다양하게 체험할 수 있게 하고 싶었다. 나아가 고성능 검색엔진 엘라스틱서치와 그를 서포트하는 주변 소프트웨어가 아니라, 스택으로서 각각의 역할을 완벽하게 소화하는 스택 내 제품들의 매력을 알려주고 싶었다.
엘라스틱 스택은 국내 커뮤니티도 잘 활성화되어 있을 뿐만 아니라 우리나라 사용자들의 오픈소스 기여도 많이 이뤄지고 있다. 이 책을 통해 엘라스틱의 매력이 충분히 전달되길 바라며, 나아가 엘라스틱 커뮤니티와 오픈소스의 기여자가 늘어났으면 하는 바람이다.

 

감수자

박재호

포항공과대학교 컴퓨터공학과 학부와 대학원을 졸업했다. 임베디드 시스템 개발, 기업용 백업 소프트웨어 개발, 방송국 콘텐츠 수신제한 시스템 개발과 운영 지원, 클라우드에서 동작하는 서비스 개발에 이르기까지 다양한 실무 경험을 토대로 고성능 고가용성 시스템을 설계하고 있다. 코스닥 상장사인 엑셈 CTO로 인공지능과 스마트팩토리 관련 개발을 총괄했으며, 클라우드용 모니터링 시스템을 위한 아키텍처 설계도 주도했다. 『마이크로서비스 도입, 이렇게 한다』(책만, 2021), 『Clean Code 클린 코드』(인사이트, 2013)와 『피플웨어』(인사이트, 2014)를 비롯해 번역하고 집필한 책이 40여 권에 이른다.

각종 기술 소식을 다루는 블로그 ‘컴퓨터 vs 책’(https://jhrogue.blogspot.com/)과 개발자를 위한 유튜브 '채널 박재호'(https://www.youtube.com/c/박재호dev)를 운영하며, 개발자들을 위한 각종 교육과 세미나도 지속적으로 진행하고 있다.

감수를 위해 이 책 초고부터 교정지까지 본문을 여러 차례 반복해서 읽게 되었는데 그때마다 엘라스틱 스택의 각기 다른 핵심 기능과 활용법이 눈에 쏙쏙 들어오는 신기한 경험을 했다. 보통 기술서를 여러 번 읽으면 약간은 지루하다는 생각이 들기 마련인데 이 책은 읽을 때마다 뭔가 중요한 내용을 배우고 있다는 느낌을 받았다. 엘라스틱을 한 번도 접한 적이 없는 개발자뿐만 아니라 어느 정도 엘라스틱에 익숙하다고 생각하는 개발자도 이 책을 손에 들면 감수자의 말에 공감하게 될 것이다. 
이 책에서는 모든 것을 포괄적으로 설명하기 위해 중요한 내용과 그렇지 않은 내용을 전반에 여기저기 흩트려 놓는 대신, 철저하게 파레토 법칙에 따라 80% 효과를 얻을 수 있는 20%에 집중한다. 따라서 본문 전개 과정에서 속도감과 응집력이 상당히 높다. 또한 카탈로그에 나온 API나 기능 설명에 그치지 않고 핵심을 빠르게 학습하기 위한 좋은 예제가 설명 뒤에 바로 이어지며, 책 전반에 걸쳐 추상적인 이론을 손에 잡히는 구체적인 사례로 바꿔낸다. 엘라스틱 스택을 언제 어디서 어떻게 잘 활용할 수 있는지 고민하면서 인터넷에 올라온 단편적인 지식을 수집하다 지친 분들이라면 이 책이 갈증을 해소해주는 오아시스처럼 보일 것이다.
본문에도 나오지만 엘라스틱 스택은 설치부터 실제 활용까지 그 사용법이 크게 어렵지 않기 때문에 그냥 곧바로 써봐도 될 것 같다는 생각이 들 수도 있다. 하지만 입문하기 쉽다고 해서 마스터하기도 쉽다고 보기는 어렵다. 엘라스틱 스택은 빅데이터 파이프라인 전체를 구축할 수 있는 강력한 기능을 제공하기 때문에 실제 알아야 할 내용이 매우 많으므로, 사용하면서 배우고, 배우면서 사용하는 능동적인 학습이 필수다. 능동적인 학습 과정에서 큰 도움을 주는 이 책의 주요 특성 중 하나는 목적지향적인 설명이다. 앞뒤 맥락 없이 무조건적으로 이런저런 기능이 있다고 설명하는 대신, 이런저런 일을 하려면 엘라스틱의 어떤 기능을 활용해야 할지를 잘 설명한다. 예를 들어, 유사한 기능이 두 가지 있을 때 정확한 차이점과 구체적인 사용법을 알아야 기능이나 비기능(성능과 저장 공간 절약) 측면에서 원하는 목적을 달성할 수 있는데, 이 책에서는 각각에 대해 의도와 핵심을 설명하고 비교를 통해 상황에 맞는 선택지를 제시한다. 또한 개발 과정을 벗어나 실제 운영 과정에서 고려해야 하는 (정말 양보하기 어려운 필수) 사안에 대해서도 풍부한 그림과 시나리오를 활용해 내부 동작 방식까지 파고들면서 그렇게 해야 하는 이유와 구체적인 지침을 명확하게 정리해준다.
이 책에서 숨겨진 주인공은 바로 엘라스틱 스택 활용 부문에 나오는 프로젝트 삼총사다. 빅데이터 관련 프로젝트를 진행할 때 여러 가지 오픈 소스를 활용해 복잡하게 연결하는 대신 엘라스틱 스택만으로 데이터 수집부터 시각화까지 한 번에 끝내는 비법이 궁금했을텐데, 이 책에서는 예제를 위한 예제가 아닌 캐글/트위터/공공데이터에서 가져온 실제 데이터를 토대로 한국어까지 깔끔하게 처리하면서 지도 위에 시각화하는 전 과정을 압축적으로 보여준다. 이 과정에서 엘라스틱 스택을 구성하는 개별 구성요소를 연결하는 방법뿐만 아니라 부드럽게 연계하기 위한 필터 활용은 물론이고 실제 비즈니스 논리 구현 과정에 필요한 프로그래밍에 이르기까지 빠짐없이 다루므로, 엘라스틱 스택을 제대로 활용하는 유스 케이스나 실무 사례로도 손색이 없다는 생각이다.
저자진이 자신들의 풍부한 현업 실무 경험을 바탕으로 심사숙고해서 선별한 내용을 가득 담은 이 책을 지렛대로 삼아, 아무쪼록 엘라스틱 스택의 풍부한 기능과 강력한 성능을 독자 여러분이 마주치는 현업의 문제를 풀어가는 과정에 적극적으로 활용할 수 있으면 좋겠다.

 

차례

1부 | 엘라스틱 스택 개요

1장 엘라스틱 스택이란

__1.1 엘라스틱서치의 탄생

__1.2 엘라스틱 스택으로 발전

__1.3 엘라스틱 스택의 구성요소

____1.3.1 엘라스틱서치: 분산 검색 엔진

____1.3.2 키바나: 시각화와 엘라스틱서치 관리 도구

____1.3.3 로그스태시: 이벤트 수집과 정제를 위한 도구

____1.3.4 비츠: 엣지단에서 동작하는 경량 수집 도구

____1.3.5 기타 솔루션

__1.4 엘라스틱 스택의 용도

____1.4.1 전문 검색 엔진

____1.4.2 로그 통합 분석

____1.4.3 보안 이벤트 분석

____1.4.4 애플리케이션 성능 분석

____1.4.5 머신러닝

__1.5 빅데이터 플랫폼의 일부로 동작하는 엘라스틱 스택

____1.5.1 엔터프라이즈 데이터 버스인 카프카와 연동

____1.5.2 하둡 생태계와 연동

____1.5.3 관계형 데이터베이스와 연동

__1.6 유사 제품과의 비교

____1.6.1 엘라스틱서치의 유사 제품군

____1.6.2 로그스태시/비츠의 유사 제품군

____1.6.3 키바나의 유사 제품군

____1.6.4 엘라스틱 스택의 유사 제품군

__1.7 체계적인 문서화와 활발한 공동체 지원

__1.8 정리

 

2장 윈도우 실습 환경 구성

__2.1 설치 준비

__2.2 엘라스틱서치 설치

____2.2.1 엘라스틱서치 다운로드

____2.2.2 엘라스틱서치 실행

__2.3 키바나 설치

____2.3.1 키바나 다운로드

____2.3.2 키바나 실행

__2.4 엘라스틱 스택 라이선스 확인

__2.5 특정 버전 다운로드

__2.6 정리

 

2부 | 엘라스틱 스택 구성요소

3장 엘라스틱서치 기본

__3.1 준비 작업

____3.1.1 엘라스틱서치 요청과 응답

____3.1.2 키바나 콘솔 사용법

____3.1.3 시스템 상태 확인

____3.1.4 샘플 데이터 불러오기

__3.2 인덱스와 도큐먼트

____3.2.1 도큐먼트

____3.2.2 인덱스

__3.3 도큐먼트 CRUD

____3.3.1 인덱스 생성/확인/삭제

____3.3.2 도큐먼트 생성

____3.3.3 도큐먼트 읽기

____3.3.4 도큐먼트 수정

____3.3.5 도큐먼트 삭제

__3.4 응답 메시지

__3.5 벌크 데이터

__3.6 매핑

____3.6.1 다이내믹 매핑

____3.6.2 명시적 매핑

____3.6.3 매핑 타입

____3.6.4 멀티 필드를 활용한 문자열 처리

__3.7 인덱스 템플릿

____3.7.1 템플릿 확인

____3.7.2 템플릿 설정

____3.7.3 템플릿 우선순위

____3.7.4 다이내믹 템플릿

__3.8 분석기

____3.8.1 분석기 구성

____3.8.2 토크나이저

____3.8.3 필터

____3.8.4 커스텀 분석기

__3.9 정리

 

4장 엘라스틱서치: 검색

__4.1 쿼리 컨텍스트와 필터 컨텍스트

__4.2 쿼리 스트링과 쿼리 DSL

____4.2.1 쿼리 스트링

____4.2.2 쿼리 DSL

__4.3 유사도 스코어

____4.3.1 스코어 알고리즘(BM25) 이해하기

____4.3.2 IDF 계산

____4.3.3 TF 계산

__4.4 쿼리

____4.4.1 전문 쿼리와 용어 수준 쿼리

____4.4.2 매치 쿼리

____4.4.3 매치 프레이즈 쿼리

____4.4.4 용어 쿼리

____4.4.5 용어들 쿼리

____4.4.6 멀티 매치 쿼리

____4.4.7 범위 쿼리

____4.4.8 논리 쿼리

____4.4.9 패턴 검색

__4.5 정리

 

5장 엘라스틱서치: 집계

__5.1 집계의 요청-응답 형태

__5.2 메트릭 집계

____5.2.1 평균값/중간값 구하기

____5.2.2 필드의 유니크한 값 개수 확인하기

____5.2.3 검색 결과 내에서의 집계

__5.3 버킷 집계

____5.3.1 히스토그램 집계

____5.3.2 범위 집계

____5.3.3 용어 집계

__5.4 집계의 조합

____5.4.1 버킷 집계와 메트릭 집계

____5.4.2 서브 버킷 집계

__5.5 파이프라인 집계

____5.5.1 부모 집계

____5.5.2 형제 집계

__5.6 정리

 

6장 로그스태시

__6.1 로그스태시 소개

____6.1.1 로그스태시 특징

__6.2 로그스태시 설치

____6.2.1 JDK 설치

____6.2.2 로그스태시 다운로드

____6.2.3 로그스태시 실행

__6.3 파이프라인

____6.3.1 입력

____6.3.2 필터

____6.3.3 출력

____6.3.4 코덱

__6.4 다중 파이프라인

____6.4.1 다중 파이프라인 작성

__6.5 모니터링

____6.5.1 API를 활용하는 방법

____6.5.2 모니터링 기능 활성화

__6.6 정리

 

7장 비츠

__7.1 비츠 소개

__7.2 비츠 설치

__7.3 파일비트

____7.3.1 파일비트 아키텍처

____7.3.2 파일비트 다운로드

____7.3.3 파일비트 실행

____7.3.4 파일비트 설정

____7.3.5 모듈

__7.4 모니터링

__7.5 그 밖의 비츠 사용하기

__7.6 정리

 

8장 키바나

__8.1 키바나 소개

____8.1.1 인덱스 패턴

__8.2 디스커버

____8.2.1 쿼리바, 필터바, 타임피커

__8.3 시각화

____8.3.1 막대 그래프

____8.3.2 히트맵

____8.3.3 TSVB(Time Series Visual Builder)

__8.4 대시보드

____8.4.1 대시보드 만들기

__8.5 캔버스

____8.5.1 엘라스틱서치 SQL

__8.6 맵스

____8.6.1 윈도우 웹 서버 구축

____8.6.2 사용자 지정 타일맵과 GeoJSON 적용

____8.6.3 클러스터와 그리드

____8.6.4 GeoJSON 적용하기

____8.6.5 타일맵 서비스

__8.7 정리

 

3부 | 엘라스틱 스택 실전 활용

9장 캐글 CSV 파일을 활용한 인덱스 작성

__9.1 실습 진행 방식

__9.2 실습 준비 작업

__9.3 CSV 파일 가져오기

__9.4 키바나 데이터 비주얼라이저를 이용한 파일 가져오기

____9.4.1 데이터 Discover

__9.5 로그스태시를 이용한 파일 가져오기

____9.5.1 CSV 파일 읽기

____9.5.2 날짜/시간 타입으로 파싱

____9.5.3 루비 필터를 이용한 파싱

__9.6 인덱스 매핑

____9.6.1 인덱스 매핑을 적용하여 로그스태시 데이터 저장

____9.6.2 템플릿을 적용하여 로그스태시 데이터 저장

__9.7 키바나에서 간단히 분석해보기

____9.7.1 지난 10년 동안 어떤 영화 장르가 가장 많이 만들어졌는가?

____9.7.2 할리우드 영화 중 평점 높은 영화는 수익이 났을까? 예산은 얼마나 썼을까?

__9.8 정리

 

10장 로그스태시를 활용한 한글 트위터 데이터 분석

__10.1 실습 진행 방식

__10.2 실습 준비 작업

____10.2.1 트위터 개발자 정보

__10.3 로그스태시 수행

__10.4 검색과 한글 형태소 분석기

__10.5 리인덱싱

__10.6 실시간 데이터 시각화

__10.7 정리

 

11장 파이썬 클라이언트를 활용한 공공데이터 분석

__11.1 실습 진행 방식

__11.2 실습 준비 작업

____11.2.1 서울 열린데이터 인증키 발급받기

____11.2.2 파이썬 3.8 설치

____11.2.3 QGIS 설치

____11.2.4 맵 시각화 타입 추가

__11.3 서울 행정동별 인구 분석하기

____11.3.1 로그스태시로 공공데이터 가져오기

____11.3.2 QGIS 이용한 사용자 벡터 레이어 생성

____11.3.3 서울에서 일인 가구가 많은 지역은 어디일까?

____11.3.4 서울에서 외국인이 많은 곳은 어디일까?

__11.4 서울 공공와이파이 지도 만들기

____11.4.1 오픈 API를 이용한 공공데이터 가져오기

____11.4.2 파이썬을 이용한 오픈 API 실행

____11.4.3 파이썬 엘라스틱서치 클라이언트

____11.4.4 파이썬 클라이언트 앱

____11.4.5 bulk API를 이용한 인덱스

____11.4.6 서울시 공공와이파이 위치 시각화하기

__11.5 정리

 

4부 | 엘라스틱 운영

12장 리눅스 실습 환경 구성

__12.1 버추얼박스에서 우분투 설치하기

__12.2 엘라스틱서치 설치

____12.2.1 wget을 이용한 설치

____12.2.2 리눅스 패키지 매니저를 이용한 설치

__12.3 키바나 설치

____12.3.1 wget을 이용한 설치

____12.3.2 리눅스 패키지 매니저를 이용한 설치

__12.4 정리

 

13장 클러스터와 노드 구성

__13.1 HTTP 계층과 전송 계층

__13.2 노드

____13.2.1 마스터 노드

____13.2.2 데이터 노드

____13.2.3 인제스트 노드

____13.2.4 그 밖의 노드들

____13.2.5 전용 노드

__13.3 노드 구성과 시스템 구성

____13.3.1 소규모 클러스터

____13.3.2 대규모 클러스터

____13.3.3 핫/웜/콜드 노드 구성

__13.4 클러스터 백업

____13.4.1 리포지토리 등록

____13.4.2 스냅샷 찍기

____13.4.3 스냅샷 복원

__13.5 샤드

____13.5.1 프라이머리 샤드와 레플리카 샤드

____13.5.2 샤드 할당 과정

____13.5.3 샤드 상태 모니터링

__13.6 샤드 개수와 크기 구성 가이드

____13.6.1 샤드 개수 가이드

____13.6.2 샤드 크기 가이드

__13.7 설정

____13.7.1 클러스터 설정

____13.7.2 노드 설정

____13.7.3 인덱스 설정

__13.8 정리

 

14장 운영 클러스터 구축

__14.1 성능과 안정성을 위한 운영 클러스터 고려사항

____14.1.1 노드 구성 계획

____14.1.2 하드웨어 선정

____14.1.3 엘라스틱서치 버전 선정

__14.2 클러스터 구성

____14.2.1 노드 설치

____14.2.2 개발 모드와 운영 모드

____14.2.3 운영 모드 설정

____14.2.4 실행과 구성 확인

__14.3 보안 기능 설정

____14.3.1 인증서 생성

____14.3.2 노드 간 통신 암호화

____14.3.3 HTTP 클라이언트 통신 암호화

____14.3.4 클러스터 시작과 빌트인 사용자 설정

____14.3.5 키바나와 엘라스틱서치 간 통신 암호화

____14.3.6 키바나와 브라우저 간 통신 암호화

__14.4 사용자 등록과 관리

____14.4.1 사용자 역할 정의

____14.4.2 사용자 추가와 역할 할당

__14.5 정리

댓글