Table of Contents
강의 정보
- AWS x 경희대 캠퍼스타운 여름 AWS 특강
- 강의자: 주식회사 로이드케이
intro
- 빅데이터
- 규모가 크고, 다양하고, 빠르게 증가하는(+ 진실되고 가치있는) 데이터
- 이 데이터를 어떻게 보고, 어떻게 하는지 결정하는 인사이트는 경험으로 만든다.
- 검색
- 지금은 검색 기능이 일상화된 생활과 사회
- 예전엔 데이터가 기업에서 생산되었는데(거래 대행 등), 지금은 개인이 데이터를 생산한다. → 기하급수적으로 비정형 데이터 생산됨
- 데이터가 증가해서 → 검색 결과로 보여줄 데이터도 많아졌는데 → 필요한 정보는 더 빠르게 찾고 싶다 → 딱 필요한 것만 보여주는 게 중요하다
- 사용자는 편하게 쓰지만 검색이라는 게 원래 고민할 게 참 많다. 좋은 검색의 기준은 정확률과 재현율.
- 정확률: 전체에서 맞힌 것의 비율(전체 문서 중 필요에 맞게 잘 검색한 문서의 비율)
- 재현율: 정답 중 제대로 맞힌 것의 비율(필요한 문서 중 검색 결과에 나온 것의 비율)
- elasticsearch는 진입장벽이 낮아서 선호도가 높고, 오픈소스라 무료로 사용 가능하다. 오픈소스 커뮤니티가 활발해 도움 받기도 좋다.
- 기존 기술 대비 ealsticsearch의 장점
- 정형뿐 아니라 비정형 데이터도 저장 가능
- 역방향 인덱스 방식으로 검색 속도가 빠름
- n-gram 기반 full-text 검색 가능. 유의어, 동의어, 형태소 기반 자연어 처리 등 가능.
- 쿼리를 통해 데이터를 조회하면서 데이터 시각화를 위한 UI 제공
elasticsearch
elasticsearch는 검색 및 분석 엔진으로, 다양한 모듈과 함께 구성된다. 공식 사이트의 설명에 따르면 다음과 같다.
Elasticsearch는 검색 및 분석 엔진입니다. Logstash는 여러 소스에서 동시에 데이터를 수집하여 변환한 후 Elasticsearch 같은 “stash”로 전송하는 서버 사이드 데이터 처리 파이프라인입니다. Kibana는 사용자가 Elasticsearch에서 차트와 그래프를 이용해 데이터를 시각화할 수 있게 해줍니다.
참고: https://www.elastic.co/kr/what-is/elk-stack
보통의 검색 엔진과 달리 elasticsearch는 데이터가 커질 경우 메모리를 늘리는 게 아니라 분산시켜서 스케일을 낮추고, 데이터 유실을 대비해 복제본을 잘 만들어둔다. 그래서 확장력과 복원력이 좋다. 다만 검색 성능이 분산된 기기들의 물리적 사양에 영향을 받으므로 다수의 기기를 쓸 경우 사양을 동일하게 맞추는 걸 일반적으로 권장한다. 또한 메모리가 서로 다를 경우 데이터 분산 과정에서 오류가 발생할 수 있으므로 마찬가지로 동일한 사양을 쓰는 게 좋다.
elasticsearch는 NoSQL 방식으로 데이터를 저장한다. RDB와의 차이는 다음과 같다.
RDB | NoSQL | |
---|---|---|
데이터 저장 모델 | 테이블 | json |
개발 목적 | 데이터 중복 감소 | 확장 가능성, 수정 가능성 |
예시 | Oracle, MySQL | Elasticsearch, MongoDB |
스키마 | 엄격한 데이터 구조 | 유연한 데이터 구조 |
장점 | * 명확한 데이터 구조 보장 * 데이터 중복 없이 한 번만 저장 | * 유연하고 자유로운 데이터 구조 * 새로운 필드 추가 자유로움 * 수평적 확장 용이 |
단점 | * 시스템의 크기에 따른 복잡한 쿼리 * 수평적 확장이 힘들어서 비용이 큰 수직적 확장 사용 | * 명확한 데이터 구조 보장 X * 데이터 중복 발생 가능 |
주 사용 환경 | * 데이터 구조가 명확함 * 데이터 업데이트가 잦은 시스템 | * 데이터 구조가 명확하지 않음 * 업데이트가 자주 일어나지 않음 |
elasticsearch는 영문 대소문자 및 띄어쓰기와 무관한 검색, 형태소 분석, 사전 기반 검색, 연관어 추출, 오탈자 보정, 자동완성 등이 가능하다. 시각화 면에서도 데이터 관리를 위한 UI 제공, 권한 설정, 시각화 도구 제공, 대시보드 제공, 실시간 모니터링 등이 가능하다. 다른 검색엔진에 비해 elsaticsearch가 갖는 좀 더 대단한 장점으로는 검색엔진과 데이터 관리 플랫폼의 일체형 구성, 구독형 과금 방식, 다양한 API 및 플러그인 제공으로 추가 개발 없이 다양한 기능 사용 가능, 데이터를 인덱싱한 후 저장하기 때문에 사이즈에 무관한 빠른 검색 속도, 오픈소스 기반이라 유지보수가 용이하다는 점 등이 있다.
라이선스는 베이직, 골드, 플래티넘, 기업용으로 나뉘는데, 개인이 검색 용도로만 쓴다면 베이직으로 충분하다. 플래티넘과 기업용은 기계학습, 보안기능 등이 추가된다. 다만 elastic의 공식 웹사이트에서 프로그램을 다운받거나 클라우드를 사용할 때에만 적용되는 것이고, 깃허브에서 소스 코드를 받아 직접 빌드해서 사용하는 것은 라이선스와 무관하게 무료로 사용할 수 있다.
클라우드로 쓰지 않고 데이터를 로컬에 저장하는 방식으로 사용한다면 저장 용량은 갖춰진 사양의 80%까지만 쓰는 것을 권장한다. 나머지는 백업과 복구를 위한 여분 용량으로 쓰인다. 또한 elsaticsearch는 자바로 구현되었고 32비트 기반이라 메모리는 아무리 커봐야 일정량 이상은 못쓴다고 한다. elasticsearch에게 주어진 자원은 항상 최대로 쓰이니 자원 사용률만 보고 부족하다고 판단해 사양을 높일 필요는 없다고도 했다.