어렴풋이 장님 코끼리 다리 더듬듯 같이 엘라스틱서치를 더듬어보고 싶어요.
엘라스틱서치라는 이 커다란 시스템은 하나 혹은 복수개의 노드에서 실행돼요. 각기 다른 노드에서 돌아가고 있는 엘라스틱서치 클러스터라도 같은 클러스터 이름을 설정하고 서로 통신이 된다면 하나의 엘라스틱서치 클러스터로 사용될 수 있어요.
➜ ~ curl -XGET http://localhost:9200
{
"name" : "9af8af5ad54e",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "pOfo-rshSoOAQ01qVbEPsQ",
...
}
위 화면은 Docker를 사용해 엘라스틱서치 컨테이너를 생성한 후 curl 명령어를 실행했을 때 나온 응답 값의 일부예요.
cluster_name, cluster_uuid 등과 같은 내용을 볼 수 있어요.
엘라스틱서치를 설치하고 실행하는 그 서버를 보통 Elasticsearch node라고 불러요. 복수의 엘라스틱서치를 single node에 올리는 건 다음에 알아봐요. 그리고 이 것들 여러 개를 모아서 하나로 묶은 걸 Elasticsearch cluster라고 해요. 물론 한 대의 node로도 cluster를 구성할 수 있어요 그 걸 single-node cluster라고 하고요.
이미 알고 있듯이 엘라스틱서치는 무언가를 저장하고 쌓는 역할을 해요. Elasticsearch node는 실질적으로 데이터가 쌓이는 엘라스틱서치의 인스턴스라고 할 수 있어요.
엘라스틱서치에 쌓이는 한 개, 한 줄의 데이터를 도큐먼트(document)라고 부르고 이 도큐먼트 안에는 여러 요소들을 담을 수 있는데 이 각각의 요소들을 필드(field) 혹은 키(key)라고 불러요. 그리고 이 도큐먼트들을 묶어서 인덱스(index)라고 해요. 딱 들어맞게 뭐 Index는 DB, Document는 Row 이렇게 매칭이 되지는 않겠지만 기존의 RDBMS와 조금씩 비교하면서 보면 구조를 파악하는데 조금 더 도움이 될 것 같아요.
엘라스틱서치의 도큐먼트는 JSON 객체예요. 하나의 인덱스 안에서도 어떤 도큐먼트는 'src_addr'이라는 필드를 가질 수 있고 어떤 도큐먼트는 안 가질 수도 있어요. 이런 면은 NoSQL과 닮았네요.
이런 기존의 DB - RDBMS든 NoSQL DB든 - 와 유사한 모습에도 불구하고 구우지 엘라스틱서치 공식 홈페이지에서도 DB라고 소개하지 않고 검색 및 분석 엔진이라고 소개하는 이유는 무엇일까요? 기존 DB들과는 어떤 부분에서 차이점이 있을까요?
역시 이렇게 글로 주절주절 이야기만 하는 건 너무 지루한 것 같아요. 엘라스틱서치도 이미 설치했겠다. 작동하는 것도 확인했겠다. 다음엔 그냥 바로 체험학습으로 넘어가 볼게요.
그럼 다음에.