엘라스틱서치에서는 데이터를 핸들링하는 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..
스프링(Spring) 프레임워크로 몽고DB에 데이터를 삽입하는 방법이야 많겠지만, 이번 방식은 JDBC 방식과 유사한 방식(java-driver)으로 직접 제어를 하여 데이터를 가져오는 것을 보여준 후, 추후 MongoTemplate 방식을 활용하여 Connection을 제어를 하지 않는 방식을 포스팅하고자 한다. MongoDB는 모든 데이터가 JSON구조로 저장이 되기 때문에 기존 DB에서처럼 테이블을 미리 설계하고 데이터를 넣는 번거로운 작업이 필요없이 DB가 만들어지고, 콜렉션만 만들어졌다면 자유롭게 데이터를 넣을 수 있다. 그렇기 때문에 몽고DB의 장점은 자유롭게 데이터를 넣을 수 있어서 개발 공수가 짧다라는 큰 장점을 가지고 있다. 보통 DBA 혹은 DA롤을 가진 사람이 깊게 고민을 하여 데이터..
일반적으로 RDB 같은 경우, 다양한 접속 및 관리툴들을 지원해준다 대표적으로 Quest 사의 토드(Toad)와 같은 프로그램이 있는데 이를 통해 현재 DB에 어떤 데이터가 들어가 있는지 확인 할 수 있으며 데이터를 쉽게 핸들링 할 수도 있다. 몽고DB도 이와같은 여러가지 관리툴이 있는데 대표적으로 Robomongo라는 관리툴이 존재한다. 대표적인 DB 관리 툴인 토드 https://www.quest.com/products/toad-for-oracle/ 이번 포스팅 주제인 Robomongo 사이트에 들어가면, Studio 3T라는 프로그램과 Robo 3T라는 프로그램이 있는데 Robo 3T를 선택한다. 설치 단계 https://robomongo.org/download 자신에 맞는 OS와 프로그램을 입맛에..
몽고DB(MongoDB)란 하둡(Hadoop)의 전성기를 열어주며 빅데이터 시대를 알려주기도 했으며, 현재는 Node.js 등과 함께 가볍게 사용하는 프로젝트에서 많이 사용하고 있는 대표적인 NoSQL DB이다. 설명에 대한 부분은 다른 포스팅에서 하기로 하고, 이번 포스팅은 설치에 관련된 것만 적어보기로 한다. https://www.mongodb.com/download-center 몽고DB의 다운로드 페이지에 들어가면 위와 같은 화면으로 Cloud, Server, Tools라는 메뉴가 나오는데 Server를 선택한다. Server를 선택 한 후, MongoDB Community Server를 클릭 후, 원하는 Version과 본인에 맞는 OS그리고 Package를 선택한다. 필자는 이런류의 설치는 기본..
만약에 개발자들에게 "간단한 검색엔진(Search Engine)을 만들어보세요"라는 요청을 하면, 대부분은 "제가요?" "못합니다" 등으로 단호히 거절을 할 것이다. 검색엔진이라는 것은 구글이나 네이버, 다음같은 대기업만이 만들 수 있는 것이라고 생각하기 때문이다. 하지만, "간단한 검색엔진"이라는 요건은 개발자라면 누구나 쉽게 만들 수 있다. 물론 루씬(Lucene)이나 엘라스틱서치(Elastic Search), 솔라(Solar)같은 훌륭한 검색엔진들이 이미 즐비하니 굳이 만들 필요는 없지만 어디까지나 이 포스팅은 검색엔진의 원리를 설명하는 것을 목적으로 하니 위와 같은 솔루션들이 없다는 가정으로 생각을 해보자. 우리가 검색을 할 때 무엇을 넣을 것인가? 당연히 키워드(Keyword)를 넣는다. 네이버..
MySQL에서 대용량의 데이터 처리를 하기 위해서 주로 쓰이는 두개의 방식인 Batch와 Load 방식에 대한 장단점을 비교하기로 한다. 어느 것이 무조건 좋다 나쁘다를 할 수 없기 때문에 어떤 상황에서 이 방식을 써야 할지 등을 알려보고자 한다. 참고로, 필자가 다니는 회사는 전국민 상대로 서비스를 하고 있으며, 하루에도 몇십만명 이상이 사이트를 방문하기에 당연히 몇백만 이상의 로그가 쌓이고 있다. 데이터 분석을 한 결과(몇천만건 ~ 억단위)를 DB에 매일 배치 형태로 밀어 넣고 있는데 몇백에서 몇기가 단위의 데이터를 DB에 밀어 넣을 때는 늘 상 load(부하)를 잘 관리해야만 할 것이다. Batch 방식 일단, 많이들 알고 있는 Batch 방식은 Insert를 Add 시킨 후, 한번에 커밋(comm..
MySQL은 오라클에서 제공하는 여러가지 기능들이 없기 때문에 변수를 선언하는 방식처럼 작업을 수행해야 한다. rownum 같은 경우는 변수를 설정한 후, 카운트가 증가할 때마다, 변수에 +1을 증가시켜서 출력하는 식의 편법이 존재한다. 번호(ROWNUM) 생성 방법 12345SELECT @rownum:=@rownum+1 as no, dic.*FROM dic_wrd_cls_tmp dicWHERE (@rownum:=0)=0cs WHERE 조건에 rownum을 초기화하여 사용하는 방법 12345SET @rownum:=0;SELECT @rownum:=@rownum+1 as no, dic.*FROM dic_wrd_cls_tmp dic;cs SET으로 rownum 변수를 초기화하여 사용하는 방법 페이징(Pagin..
아무래도 MariaDB와 MySQL의 만든 사람이 동일하다 보니 해당 포스팅은 MySQL에서도 동일하게 문제 해결이 될 것이나, 폴더 및 설치 세팅이 미세하게 다를 수 있다. MariaDB를 설치하였는데 뭔가 빠진 느낌이 들어서 뭔가 곰곰히 생각해보니, Install 과정에서 캐릭터셋을 선택하는 것이 없었다는 것을 판단하였고, Toad for Mysql로 테이블을 생성 할 때, comment가 깨져있는 것을 발견했다 (이건, 빼도박도 못하는 캐릭터셋 문제) 보다시피, 테이블 Comment 설정 창에 캐릭터셋이 깨져 있는 것을 발견 MariaDB, MySQL은 캐릭터셋을 확실히 잡고 시작을 해야 나중에 참변을 방지할 수 있다.확인 방법 C:\Windows\System32>mysql -u root -p En..