한번에 적을 수도 있는거를 뭐이리 주저리주저리 써놨냐 할수도 있다. 그러면 나가 이 럇샤이마세
결론은 엘라스틱과 관련된 개념을 정리하는 것도 있지만, 내가 행하고 있는 프로젝트에서 엘라스틱 서치 도입에 대한 정당성을 부여하기 위함이다.그래서 왜 썼냐고 물어봤을 때, "그냥요","좋다하길래","빠르다길래" 이런 뻔한 변명이 아닌 확실한 대답을 위해서 정리하게 됐다.
아직도 부족한 부분이 많기에 새로운 내용을 알게될 때마다 정제해서 블로깅할 계획이다.
서론이 길었다
💡엘라스틱 서치(Elastic Search) 가 무엇일까?
- 빅데이터의 시대에 들어서면서 ,방대한 양의 데이터를 빠르게 검색하는 것이 중요하게 됐다. 기존 RDMS의 시대에서 NoSQL(No Structured Query Language)로 많이 이관되고 있는 것도 위와 같은 이유이다.
엘라스틱의 경우도 NoSQl의 일종이다
- 분류가 가능
- 분석처리를 통한 거의 실시간에 가까운 빠른 검색이 가능
- 기존 DB로는 처리가 어려운 대량의 비정형 데이터 검색의 가능
- 전문 검색(Full Text)/ 구조 검색 모두를 지원 등등
더 알고 싶은가? 직접알아보자
https://www.elastic.co/kr/elasticsearch/
이전 포스팅에서 정리했지만 다시 짧게 말하자면,엘라스틱 서치는 검색엔진이다.
검색 엔진(Search engine)이란, 웹 내 정보를 수집해 검색 결과를 제공하는 프로그램이다.
아직까지도 많이 사용하고 있는 데이터베이스에서는 비정형 데이터를 색인/검색하는 것이 불가능하다
비정형 데이터? 정해진 규칙이 없는 데이터 EX)텍스트,음성,영상 등
색인? 키워드를 찾기 쉽게 정렬한 목록
기존 데이터베이스와 달리 엘라스틱 서치에서는 역색인 구조를 사용해 빠른 검색이 가능하다.
당연하게 엘라스틱 서치에서는 비정형 데이터를 색인/검색하는 것이 가능하다
역색인 : 키워드를 통해 문서를 찾는 방식
엘라스틱 서치 VS 관계형 DB
우선 관계형 DB와 비교해서 알아보자
엘라스틱 서치 | 관계형 DB |
인덱스 | 데이터베이스 |
샤드 | 파티션 |
타입 | 테이블 |
문서 | 행 |
필드 | 열 |
매핑 | 스키마 |
Query DSL | SQL |
엘라스틱 서치의 특징
엘라스틱 서치에서는 하나의 인덱스에 하나의 타입만이 구성가능하며 기본적으로 HTTP를 통해 JSON형식의 Restful API가 사용 가능하다
엘라스틱서치 | 기능 |
GET | 데이터 조회 |
PUT | 데이터 생성 |
POST | 인덱스 업데이트,데이터 조회 |
DELETE | 인덱스 데이터 삭제 |
HEAD | 인덱스의 정보 확인 |
엘라스틱 서치의 API 요청 구조
curl -XGET http://localhost:9090/(인덱스)/(타입)/(문섭id)-d '{json 데이터}'
💡엘라스틱 서치의 장점은 무엇일까?
- 오픈소스 검색엔진
: 아파치 재단의 루씬(Lucene)을 기반으로 개발된 오픈소스 검색 엔진
: 오픈소스의 장점인, 수많은 사용자 보유 및 버그 발생시 빠른 해결
- 전문검색(Full Text) 지원
: 대부분의 데이터베이스는 기본 쿼리 및 색인 구조의 한계로 인해 기본적인 텍스트 검색 기능만을 제공
: 엘라스틱 서치는 고차원적인 전문 검색(Full Text)이 가능하다.
전문검색?
: 내용 전체를 색인하여 특정 단어가 포함된 문서를 검색하는 것
- 즉, 전문 검색은 관계형 DB에는 부적합하다
- 그러나,엘라스틱 서치는 다양한 기능별, 언어별 플러그인을 조합해 빠른 검색이 가능하다
용어정리: 플러그인?
일반적으로는 코드를 꼽다
지금 문맥에서의 플러그인(plugin)또는 추가 기능(에드인;add-on)은 호스트 응용 프로그램과
서로 응답하는 컴퓨터 프로그램이다.
- 통계 분석
: 비정형 로그 데이터를 수집하고 한곳에 모아 통계 분석을 할 수 있다.
엘라스틱 서치와 키바나의 조합으로 실시간으로 쌓이는 로그를 시각화하며 분석이 가능하다
- 멀티태넌시(Multi -teneancy)
: 검색할 필드명으로 여러 개의 인덱스를 한번에 조회할 수 있다.
상이한 인덱스라도 검색할 필드명만 같으면, 여러 개의 인덱스를 한번에 조회 가능하다
- 역색인
: 역색인 구조를 통해서 특정 단어를 찾을때 문서 전체에서 찾는 것이 아닌,
단어가 포함된 특정 문서의 위치를 알아내어 빠르게 결과를 찾을 수 있다.
// 요즘 많이 쓰는 MongoDB,Cassandra같은 일반적인 NoSQL은 역색인이 안된다
//즉,다른 NoSQL과 차별화되는 큰 장점을 보유함
- 확장성 & 가용성
엘라스틱 서치에서는 데이터를 샤드(shard/조각이라는 의미)라는 작은 단위로 나뉘어 제공한다. 데이터를 분산해 빠른처리가 가능하다
엘라스틱 서치는 인덱스를 생성할 때마다 해당 샤드의 수를 조절가능하다.
즉, 이를 통해 데이터의 종류,성격에 따라 데이터를 분산해 빠르게 처리하는 것이 가능하다
- 스키마 리스(Schema-less)
데이터베이스는 스키마라는 구조에 따라 데이터를 적합한 형태로 변경 후 저장하고 관리한다.
그러나, 엘라스틱 서치는 정형화 되지 않은 데이터도 다양한 형태의 문서도 자동으로 색인 및 검색 가능하다
- 도큐먼트 오리엔티드(Document-Oriented)
여러 계층의 데이터를 JSON 형식의 구조화된 문서로 인덱스에 저장 가능하다
대부분의 IT기술들은 장단점을 보완할 수 있는 기술들을 융합해 사용한다.
💡엘라스틱 서치의 단점은 무엇일까?
- 실시간이 아니다
일반적인 색인처리된 데이터는 통상적으로 1초 뒤에 검색이 가능해진다 색인된 데이터는 내부적으로 커밋(commit)/플러시(flush)와 같은 복잡한 과정을 거치기 때문이다 하지만, 위와 같은 과정들이 매우 짧은 시간 내에 처리되기 때문에 실시간처럼 보이게 되는 것이다.
- 트랜잭션/롤백기능이 제공되지 않는다
전체적인 클러스터의 성능 향상을 위해 비용 소모가 큰 트랜잭션/롤백기능이 지원되지않아 최악의 경우 데이터 손실 가능성이 높다.
- 데이터의 업데이트를 제공하지 않는다
내부적으로 업데이트는 기존 문서를 삭제후 새로운 문서를 생성하는 방식으로 사용된다
단순한 업데이트임에도 많은 비용이 발생한다.
새로운 기술 도입에 있어 도입을 하는 것은 간단하다.저명하신 멘토분께 피드백을 받기 전까지는 새로운 기술을 적용함에 있어서 해당 기술에 대한 장단점조차 파악하지 않은채 적용했었다. 그러나 일방적인 기술 적용은 무차별적인 자원의 낭비로 이어질 수 있다는 것을 인지했고, 기술 도입에 대한 이유를 질문 받았을 때 그저 변명거리를 늘어놓기 바쁜 나를 되돌아본 뒤 생각을 고치게 되었다.
정리한 내용조차 완벽하진 않을 것이다. 좀 더 왜?라는 생각을 가지고 해보면 좀더 깊이 알 수 있지 않을까 하는 생각이 드는 요즘이다.
피드백 주시면 정말 감사합니다.
참고자료:
https://needjarvis.tistory.com/519
https://devfunny.tistory.com/384
'책벌레와 벌레 그 사이 어딘가 > 개념쌓기' 카테고리의 다른 글
[개념쌓기]Spring, 왜 쓰는걸까? (2) | 2022.10.14 |
---|---|
[개념쌓기]@Transactional 다시보자 (0) | 2022.10.01 |
[개념쌓기] Split-Brain? (1) | 2022.09.22 |
[개념쌓기] ElasticSearch VS Solr /검색엔진 (0) | 2022.09.22 |
[개념쌓기]ElasticSearch ,데이터 사이언스 (0) | 2022.09.21 |
댓글