전체 글(52)
-
스택(stack)
스택은 데이터를 일시적으로 저장하기 위해 사용하는 자료구조이다. 데이터는 후입선출로 이뤄진다는 점이 큐와의 차이점이라고 할 수 있다. 따라서 큐에서의 프론트/리어와 다르게 스택은 탑과 바텀으로 표현하는데, 이것은 후입선출 특징상 꼭대기(탑)에 가까운 데이터만 나가고 들어오기 때문이다. 흔히 '스택을 쌓는다'라는 말이 있는데, 쌓는다는 표현이 바로 정확하게 표현한다고 볼 수 있다. 바닥부터 쌓아올리는 형식을 생각하면, 자료를 넣을때도 뺄 때도 후입선출을 할 수 밖에 없기 때문이다. 스택에서 데이터를 넣는 작업을 푸시(push)라 하고, 데이터를 꺼내는 작업을 pop 이라고 한다. Java에서는 메서드를 호출하고 실행하는 것을 스택방식으로 처리한다. 스택 역시 데이터의 집합이기 때문에 배열로 구현할 수 있다..
2019.05.27 -
[검색엔진 라이브서치 개발과정 정리] Logstash JDBC 활용 및 ES plugin 설치
Logstash는 기존 RDBMS의 데이터를 편하게 ES에 입력하기 위해 JDBC 플러그인을 지원한다. 플러그인의 설치는 아래의 명령어를 따르면 손쉽게 설치가 가능하다. ./bin/logstash-plugin install logstash-input-jdbc # logstash-input-jdbc 플러그인 설치 Jdbc 플러그인이 설치되면 자신이 사용하는 RDBMS의 커넥터 jar 라이브러리가 있어야 한다. mySQL의 경우 mySQL-connector 5.1.4 라이브러리를 사용하면 특별한 문제 없이 사용가능하다. 라이브러리를 받아서 압축을 풀고 logstash의 lib 폴더에 jar파일을 복사해주면 된다. 이렇게 하면 logstash.conf 에서 JDBC 플러그인을 통해 직접 RDBMS의 데이터에 ..
2019.05.27 -
큐(queue)와 링 버퍼(ring buffer) 연결 리스트 (Linked list)
큐 형태의 자료구조는 데이터를 쌓아두는 자료구조로, 선입선출(FIFO)인 점이 특징이다. 주로 일시적인 자료의 저장에 많이 사용된다. 큐의 경우 가장 먼저 들어간 데이터를 먼저 꺼내고, 나중에 들어간 데이터를 나중에 꺼내게 되는데 이를 배열로 만들게 될 경우 하나의 데이터를 꺼낼 때 마다 모든 데이터의 위치를 이동해야하는 문제가 있다. 따라서 보통 큐를 만들 때는 Linked list를 이용하거나, ring buffer 형태를 많이 사용한다. 큐에 데이터를 넣는 작업은 인큐(enqueue), 꺼내는 작업은 디큐(dequeue)라고 한다. 데이터를 꺼내는 쪽은 프론트(front)라고 하고 데이터를 넣는 쪽을 (rear)라고 한다. 배열로 큐를 생성할 경우, 인큐의 복잡도는 O(1)이 되지만 디큐의 복잡도는..
2019.05.27 -
[검색엔진 라이브서치 개발과정 정리]Curl 을 통한 기본적인 확인
앞서 말했듯이 ES는 REST 통신을 지원한다. 따라서 curl 커맨드 기능을 통해 기본적인 명령어를 수행하고 결과를 확인할 수 있다. 우선 REST API의 명령어는 다음과 같다. GET : 조회 POST : 저장 PUT : 수정 DELETE: 삭제 ES의 REST API URL 포맷은 다음과 같다. http://{Node:PortNumber}/{Index}/{Type} Index는 소문자여야 한다. Type은 Index와 마찬가지로 소문자를 권장한다. 이러한 문법 뒤에 JSON이나 명령어를 통해 인덱스를 생성, 매핑하거나 검색을 할 수 있다. Curl –XPUT http://localhost:9200/myindex -d ‘{ “settings”: { “index”:{ “number_of_shards”..
2019.05.22 -
String, StringBuffer, StringBuilder, StringTokenizer
JAVA에서는 문자열 데이터 타입으로 가장 많이 쓰는 것이 String 이다. 그러나 String은 기초데이터가 아니라 객체데이터인데, 특이하게도 생성자(new)를 사용하지 않고 초기화를 한다. String 변수에는 " "로 문자열을 감싸주면 이를 문자열로 인식해서 값을 넣을 수 있다. String에는 문자열과 관련된 주요 메소드들이 있다. concat(String str) : 저장된 문자열과 str 문자열을 결합 substring(int begin) : 시작 위치부터 마지막까지의 문자열을 반환 int length() : 문자열 길이를 반환 toUpperCase() : 대문자로 반환 toLowerCase() : 소문자로 반환 boolean equals(String str) : 지정된 문자열과 str 문자..
2019.05.22 -
복잡도와 점근표기법(빅오표기법)
본래 점근표기법은 수학적 개념으로, 임의의 함수에 대하여 정의역의 원소가 커짐에 따라 그 원소의 상이 얼마나 빠르게 커지는지를 표현하는 것이다. 그러나 컴퓨터의 경우, 1의 연산과 100, 1000의 연산에 거의 차이가 없다. 이 말은, 컴퓨터가 연산하는 과정을 1의 단위까지 세세하게 고려하더라도 명확한 성능 차이를 드러내지는 않는다는 것이며, 따라서 프로그래밍 과정에서 점근표기법을 통해 프로그램 알고리즘의 복잡도을 표현하는 것은 근사값에 대한 정의를 나타내는 것이다. 즉, 프로그램에 있어서 점근표기법이란, 한 프로그램이 실행되는 과정에 소요되는 시간(단계)를 나타내며, 그 과정에서 계수와 상수를 제거한다. 이는 컴퓨터의 연산속도가 사람과 다르기 때문에 계수와 상수로 이뤄지는 횟수의 차가 실제 차이만큼 ..
2019.05.21