자바(Java)로만 엘라스틱서치(Elastic Search)에 대해서 다뤄봤는데 이번에는 파이썬(Python)으로 엘라스틱 서치를 다뤄보도록 하겠습니다. 데이터는 추후 주가 분석을 등을 하기 위해서, 삼성전자의 주식 데이터를 저장해보는 것으로 해보겠습니다. 삼성전자 주식 데이터 야후의 Finance라는 사이트에 가시면, 종목을 입력할 수 있고 삼성전자의 종목(005930.KS)[1]를 입력하면 위와 같이 삼성전자 종목 정보로 넘어갑니다. 화면의 붉은색 네모박스로 체크한 곳을 보면, Download라고 되어 있는데 이 곳을 클릭하면, 삼성전자의 Historical Prices 데이터를 받을 수 있습니다. 귀찮은 분들을 위해서 아래의 파일을 받으셔도 됩니다. 삼성전자 주가 데이터 직접 위 사이트에서 받으시거..
엘라스틱서치(Elastic Search)에서 다양한 설정을 담는 config 파일은 {elasticsearch}/config 폴더에 있는 elasticsearch.yml 파일에 있다. 이 파일을 오픈하면 노드 및 샤드, 클러스터, 로그 위치, 접근 IP 등 다양한 설정을 할 수 있는데 당연히 엘라스틱서치를 운영할 계획이라면 필수 설정 정도는 알고 있어야 될 것이다. 다음의 옵션은 변경되어서 다른 방식 혹은 명칭이 바뀔수도 있고 삭제되었을 수도 있다. 엘라스틱버전에 따라 같은 속성값을 계속 유지하는 것이 아니기 때문에 매 버전에 따라 설정값이 변경되었는지 확인을 하는 것도 중요할 것이다. 설정 항목 cluster.name - 클러스터들은 같은 클러스터의 이름을 가진 경우 묶을 수 있는데 여기서 지정을 할 ..
본 포스팅에는 형태소 분석기등을 이용하여 검색을 하는 고급적인 부분들을 제외한 검색방법을 다뤄보는 포스팅이다. 이전 포스팅에서 주식에 관련된 정보를 stock이라는 인덱스에 넣어보긴 했었으나, 삼성전자에 대한 레코드만 넣었기 때문에 포스팅의 편의를 위하여 최근에 말도 많고 탈도 많은 방탄소년단의 빅히트와 블랙핑크의 와이지엔터테인먼트(YG) 주식 정보를 포함하여 총 3건의 레코드를 stock 인덱스에 추가한 후 검색을 하는 형태를 진행하고자 한다. 포스팅에 사용된 레코드 정보 PUT /stock/_doc/1 { "stockId" : "1", "stockNm" : "삼성전자", "stockType" : "보통주", "stockCd" : "005930", "trade" : "KOSPI", "current" :..
엘라스틱서치의 장점 중 하나는 바로 스키마리스(Schemaless)가 가능하다는 점이다. 이로 인해서 DB를 설계가 편리해지고 개발하는 과정에서 힘든 부분을 상쇄할 수 있다. 하지만 스키마리스는 양날의 검이 될 수 있는데 원치 않는 스키마로 인해서 색인이 이상하게 될 경우, 검색에 문제가 있거나 퍼포먼스 측면에서 떨어질 수 있다. 개발을 진행중에는 스키마를 등록하지 않고 진행할 수 있겠지만, 데이터 설계가 끝날 즈음에는 스키마를 등록하여 데이터 구조를 고정시키고 원하는 형태의 검색이 가능하게 만들어야 될 것이다. Schemaless 케이스 우선 스키마리스의 문제부터 파악해보도록 한다. 다음과 같이 주식에 관련된 데이터를 검색엔진에 넣었다고 가정을 해본다. PUT /stock/_doc/1 { "stockI..
엘라스틱서치(Elastic search)에서 매우 쉽게 데이터를 가져오는 방법으로 GET 명령어를 활용하는 방법이 있다. 예를 들어, 내가 어떤 레코드들의 데이터 ID를 알고 있다고 가정을 해보자. PUT으로 데이터를 저장하였다면, 아이디를 애시당초 입력을 하기 때문에 GET으로 데이터를 가지고 오는데 전혀 문제가 없을 것이다. GET으로 가져오기 GET /// GET 명령어는 PUT과 사용법이 동일하다. 다만 PUT은 입력할 데이터를 추가로 적지만, GET은 인덱스, 타입, 아이디까지만 입력하면 된다. { "_index" : "article", "_type" : "_doc", "_id" : "2", "_version" : 1, "_seq_no" : 1, "_primary_term" : 1, "found..
엘라스틱서치에서는 데이터를 핸들링하는 CRUD 명령어를 강력하고 깔끔한 Rest API형태로 제공하여 쉽게 데이터를 검색, 저장, 갱신, 삭제 등의 작업을 할 수 있다. 그 중 처음에는 뭘 써야 될지 헷갈릴 수 있는 Put과 Post의 대한 차이를 설명해보고자 한다. 이전 포스팅에서는 데이터를 저장하는 방식으로 Put만 설명하였는데 마찬가지로 데이터를 저장하는 Post 명령어를 사용한 후 어떤 상황에서 써야 하는지 이해해보자 PUT으로 저장하기 데이터를 매우 쉽게 넣을 수 있는 Put 명령은 다음과 같은 구조를 가진다 PUT /// put 예제 PUT /article/_doc/2 { "article_no":"20200707085400", "title":"삼성전자 2분기 영업이익 8조1천억원…'어닝서프라이..
노드(Nodes) 엘라스틱서치는 분산 시스템이며 노드는 이 분산 시스템에서 작동하는 하나의 엘라스틱서치 엔진(single server)을 의미한다. 이 노드들은 우리가 생각하는 일반적인 엘라스틱서치 엔진이며(내 컴퓨터에 엘라스틱서치를 한개 설치하였다면 하나의 노드를 설치한 것과 동일하다) 데이터의 저장과 색인(Index), 검색(Search) 모두 가능하다. 노드는 엘라스틱서치에서 고유의 아이디값으로 UUID(Universally Unique IDentifier)를 제공하며 원할 경우 노드의 고유의 아이디를 내가 직접 변경할 수 있다. 노드의 값을 변경하기 위해서는 엘라스틱치 설치된 위치에 config 폴더에 들어가면, 다양한 설정값들이 존재한다. 엘라스틱서치폴더/configelasticsearch.ke..
데이터입력 키바나(Kibana)의 콘솔을 활용하면 엘라스틱서치(Elasticsearch)에 매우 쉽게 데이터를 넣어볼 수 있다. 키바나(Kibana) Console 창에서 PUT Http 메소드를 사용하여 엘라스틱서치에 매우 쉽게 데이터를 넣어볼 수 있다. Kibana 콘솔창에 JSON 구조의 파라미터를 입력한 후, ▷ 버튼을 클릭하여 데이터를 입력한다. PUT /// PUT /article/_doc/1 { "article_no":"20200526000243", "title":"코오롱플라스틱, 긴축경영…코로나19 경영난 전방위 확산 우려", "description":"바스프 합작 신공장 고정비 과다 지출 PBT·POM 등 국내외 판매 둔화 가속 임원연봉 삭감…경영 정상화 안간힘 항공·정유 이어 소재산업 ..
키바나(Kibana) 키바나(Kibana)는 ELK(Elasticsearch, Logstash, Kibana)라는 엘라스틱서치 스택의 주요 솔루션 중 하나로 엘라스틱서치와 연계를 이루면서 비주얼라이징(Visualizing)을 통한 유저 인터페이스(User Interface, UI)를 제공하는 솔루션이다. 키바나를 설치하면 엘라스틱서치의 데이터를 쉽게 확인할 수 있고, 비주얼라이징을 통한 데이터 분석도 할 수 있으며, 관리기 역할까지 수행한다. (한마디로 필수적인 에드온이라 생각하면 된다) 설치하기 엘라스틱서치 다운로드 사이트에 키바나를 다운로드 할 수 있다. https://www.elastic.co/downloads/kibana 사이트로 이동하여, OS에 맡는 파일을 다운로드한다. (현재 이 포스팅을 쓰..
엘라스틱 서치를 써야 하는 8가지 이유 Schemaless와 문서지향 엘라스틱 서치는 JSON 구조를 사용하여 기존의 RDMS와 같은 엄격한 구조를 적용하지 않는다. 비정형 데이터는 비구조적이며, 스키마(Schema)가 다이나믹하게 변할 수 있다. 전통적인 관계형 구조로 구성할 경우 프로젝트 막바지에 모든 스키마를 변경하고, 데이터를 다시 구성하는 문제에 봉착할 수 있는데 JSON 구조는 이런 문제들을 사전에 막을 수 있다. 또다른 장점으로 데이터 공간을 절약할 수 있다. 컬럼을 동적으로 정의하여, 필요한 데이터만 넣게 되어 데이터 공간 및 CPU 사용량, 네트워크 트래픽도 줄일 수 있는 효과를 볼 수 있다. 아래의 예시를 한번 보도록 하자 데이터 예시 1{ "title":"엘라스틱에 대하여", "aut..