▣ 01장: 엘라스틱서치 소개1.1 엘라스틱서치의 기본 콘셉트1.2 라이선스 정책1.3 실습 환경 구축__1.3.1 엘라스틱서치 설치__1.3.2 키바나 설치__1.3.3 샘플 데이터 적재__1.3.4 Cerebro 설치▣ 02장: 엘라스틱서치 기본 동작과 구조2.1 엘라스틱서치 기본 동작 빠르게 둘러보기__2.1.1 문서 색인__2.1.2 문서 조회__2.1.3 문서 업데이트__2.1.4 문서 검색__2.1.5 문서 삭제2.2 엘라스틱서치 구조 개괄2.3 엘라스틱서치 내부 구조와 루씬__2.3.1 루씬 flush__2.3.2 루씬 commit__2.3.3 세그먼트__2.3.4 루씬 인덱스와 엘라스틱서치 인덱스__2.3.5 translog▣ 03장: 인덱스 설계3.1 인덱스 설정__3.1.1 number_of_shards__3.1.2 number_of_replicas__3.1.3 refresh_interval__3.1.4 인덱스 설정을 지정하여 인덱스 생성3.2 매핑과 필드 타입__3.2.1 동적 매핑 vs. 명시적 매핑__3.2.2 필드 타입__3.2.3 doc_values__3.2.4 fielddata__3.2.5 _source__3.2.6 index__3.2.7 enabled3.3 애널라이저와 토크나이저__3.3.1 analyze API__3.3.2 캐릭터 필터__3.3.3 토크나이저__3.3.4 토큰 필터__3.3.5 내장 애널라이저__3.3.6 애널라이저를 매핑에 적용__3.3.7 커스텀 애널라이저__3.3.8 플러그인 설치를 통한 애널라이저 추가와 한국어 형태소 분석__3.3.9 노멀라이저3.4 템플릿__3.4.1 인덱스 템플릿__3.4.2 컴포넌트 템플릿__3.4.3 레거시 템플릿__3.4.4 동적 템플릿__3.4.5 빌트인 인덱스 템플릿3.5 라우팅__3.5.1 인덱스 내에서의 _id 고유성 보장__3.5.2 인덱스 매핑에서 라우팅을 필수로 지정하기▣ 04장: 데이터 다루기4.1 단건 문서 API__4.1.1 색인 API__4.1.2 조회 API__4.1.3 업데이트 API__4.1.4 삭제 API4.2 복수 문서 API__4.2.1 bulk API__4.2.2 multi get API__4.2.3 update by query__4.2.4 delete by query4.3 검색 API__4.3.1 검색 대상 지정__4.3.2 쿼리 DSL 검색과 쿼리 문자열 검색__4.3.3 match_all 쿼리__4.3.4 match 쿼리__4.3.5 term 쿼리__4.3.6 terms 쿼리__4.3.7 range 쿼리__4.3.8 prefix 쿼리__4.3.9 exists 쿼리__4.3.10 bool 쿼리__4.3.11 constant_score 쿼리__4.3.12 그 외 주요 매개변수__4.3.13 검색 결과 정렬__4.3.14 페이지네이션4.4 집계__4.4.1 집계 기본__4.4.2 메트릭 집계__4.4.3 버킷 집계__4.4.4 파이프라인 집계4.5 서비스 코드에서 엘라스틱서치 클라이언트 이용__4.5.1 저수준 REST 클라이언트__4.5.2 고수준 REST 클라이언트__4.5.3 자바 클라이언트▣ 05장: 서비스 환경에 클러스터 구성5.1 운영 환경을 위한 설정과 클러스터 구성__5.1.1 노드 설정과 노드 역할__5.1.2 그 외 필요한 주요 설정5.2 클러스터 구성 전략__5.2.1 마스터 후보 노드와 데이터 노드를 분리__5.2.2 마스터 후보 노드와 투표 구성원__5.2.3 서버 자원이 많지 않은 경우__5.2.4 서버 자원이 굉장히 많이 필요한 경우__5.2.5 사양이 크게 차이나는 서버 자원을 활용해야 하는 경우__5.2.6 조정 전용 노드__5.2.7 한 서버에 여러 프로세스 띄우기5.3 보안 기능 적용__5.3.1 모든 보안 기능을 적용하지 않은 상태__5.3.2 TLS 부트스트랩 체크__5.3.3 클러스터 최초 기동 시 자동 보안 설정 이용__5.3.4 키바나와 브라우저 사이에 TLS 적용__5.3.5 수동으로 엘라스틱서치 노드 간의 통신에 TLS 적용__5.3.6 수동으로 기본 인증 설정__5.3.7 수동으로 REST API 호출에 TLS 적용▣ 06장: 클러스터 운영6.1 클러스터 설정 API6.2 cat API를 통한 클러스터 관리와 모니터링6.3 인덱스 운영 전략__6.3.1 템플릿과 명시적 매핑 활용__6.3.2 라우팅 활용__6.3.3 시계열 인덱스 이름__6.3.4 alias__6.3.5 롤오버__6.3.6 데이터 스트림__6.3.7 reindex__6.3.8 shrink로 샤드 개수 줄이기__6.3.9 split으로 샤드 개수 늘이기__6.3.10 다중 필드__6.3.11 타입이 계속 변경되는 데이터__6.3.12 루씬 텀 길이 제약__6.3.13 대량 색인이 필요할 때6.4 샤드 운영 전략__6.4.1 샤드의 크기와 개수 조정__6.4.2 모든 노드가 충분히 일을 하고 있는지__6.4.3 미래에 데이터가 커질 것을 고려__6.4.4 테스트 수행6.5 롤링 리스타트6.6 스냅샷과 복구__6.6.1 스냅샷 저장소 등록과 설정__6.6.2 스냅샷을 생성하고 조회하기__6.6.3 스냅샷에서 인덱스 복구하기__6.6.4 스냅샷 삭제하기__6.6.5 스냅샷 생명 주기 관리6.7 명시적으로 세그먼트 병합하기6.8 샤드 할당 필터링과 데이터 티어 구조__6.8.1 노드 속성과 샤드 할당 의식__6.8.2 클러스터 단위 샤드 할당 필터링__6.8.3 인덱스 단위 샤드 할당 필터링__6.8.4 데이터 티어 구조6.9 인덱스 생명 주기 관리6.10 서킷 브레이커6.11 슬로우 로그 설정6.12 버전 업그레이드__6.12.1 사전에 챙겨야 할 사항__6.12.2 롤링 업그레이드__6.12.3 풀 리스타트 업그레이드__6.12.4 엘라스틱 스택 업그레이드▣ 07장: 운영 도중 발생하는 장애 대응7.1 장애 징후 탐지를 위한 사전 모니터링 등록__7.1.1 메트릭비트로 지표 데이터를 수집하고 스택 모니터링으로 확인하기__7.1.2 키바나의 얼럿 기능으로 알람 받기__7.1.3 다른 대안으로 구성하기7.2 장애 발생 시 대응7.3 자주 발생하는 장애 유형__7.3.1 키바나에서 과도한 요청 인입__7.3.2 GC로 인한 stop-the-world 상황__7.3.3 디스크 풀 상황__7.3.4 미할당 샤드가 남았는데 샤드 할당이 더 이상 진행되지 않는 상황__7.3.5 댕글링 인덱스__7.3.6 장애 복구 작업 도중 새 인덱스가 생성될 때__7.3.7 날짜가 넘어가는 순간에 대량으로 새 인덱스가 생성되며 부하가 몰려 죽는상황__7.3.8 특정 노드의 성능이 떨어지는 상황7.4 샤드 복구 전략__7.4.1 샤드 복구 기본__7.4.2 샤드 복구 진행 상황 확인__7.4.3 샤드 복구 속도 조정__7.4.4 샤드 복구 우선순위 조정7.5 원활한 장애 복구를 위한 서비스 구조 설계__7.5.1 앞쪽에 메시지 큐를 둔다__7.5.2 멱등하게 설계한다__7.5.3 용도나 중요도별로 클러스터를 분리해야 한다▣ 08장: 엘라스틱서치의 내부 동작 상세8.1 엘라스틱서치의 데이터 분산 처리 과정__8.1.1 쓰기 작업 시 엘라스틱서치 동작과 동시성 제어__8.1.2 읽기 작업 시 엘라스틱서치 동작__8.1.2 체크포인트와 샤드 복구 과정8.2 엘라스틱서치의 검색 동작 상세__8.2.1 엘라스틱서치 검색 동작 흐름__8.2.2 루씬 쿼리의 매칭과 스코어링 과정__8.2.3 캐시 동작▣ 09장: 커스텀 플러그인을 이용한 엘라스틱서치 커스터마이징과 실전 운영9.1 커스텀 플러그인이 필요한 이유9.2 플러그인 기본__9.2.1 플러그인 기본 관리__9.2.2 플러그인 기본 구조__9.2.3 플러그인 개발 시 유의할 사항9.3 Hello World 플러그인 제작__9.3.1 플러그인 프로젝트 생성과 기본 구조 잡기__9.3.2 Plugin과 ActionPlugin9.4 엘라스틱서치와 플러그인의 테스트 코드 작성__9.4.1 테스트 코드 작성을 위한 기본 설정__9.4.2 엘라스틱서치 테스트 프레임워크로 테스트 코드 작성__9.4.3 REST 레이어 테스트9.5 ActionFilter로 위험한 액션 차단 및 변조하기__9.5.1 ActionFilter를 사용하는 플러그인 구현__9.5.2 엘라스틱서치 기동 과정과 ActionFilter의 동작 상세__9.5.3 createComponents로 플러그인 구성요소 등록__9.5.4 LifecycleComponent로 생명 주기를 가진 구성요소 관리9.6 특정 조건을 만족할 때를 감지하여 알람 보내기__9.6.1 persistent 타입의 task 동작__9.6.2 PersistentTaskPlugin 구현__9.6.3 플러그인에 권한 부여하기9.7 인덱스 내 일부 데이터만 덤프하기__9.7.1 덤프 플러그인 작성__9.7.2 플러그인에 권한을 강제로 부여하기__9.7.3 HDFS에 덤프9.8 데이터 변경분을 카프카로 발급하기__9.8.1 IndexingOperationListener로 문서 작업 추적__9.8.2 카프카로 메시지 발급