#주간개발기, 3월 둘째주.

*exs4j 테스트에 대한 이야기 * 테스트를 진행하였다. OpenAPI 검색 결과 저장 및 검색 키워드에 대한 인덱스 생성 및 조회 개발 작업을 완료하였다. 러프한 상태의 v1.5 를 달성하긴 했는데 테스트를 해보고자 했다. 분명히 문제가 혹은 불편한 부분이 있을것이라고 생각이 되었다. 테스트는 간단했다. 1 클라이언트가 10000개의 검색을 한후, 해당 검색어에 대한 1일 동안 랜덤으로 요청해서 죽지 않은채,… Read More

(espressoOtr) DistributedSaver/Loader, 문자열 저장을 멀티스레드로.

검색 엔진관련 모듈에 있어서 사전은 필수적인 부분인데, 빅 데이터라는 말이 나오면서 사전의 사이즈가 굉장히 커지는것 같다. 원래 사용자가 제공하는 혹은 사용자 검색 로그에서 추출된 데이터로 사전을 만들어서 사용하는데 중간에 빠른 로딩을 위해서 사전을 정렬한 채로 저장하는 방식을 사용하기도 한다. 그런데 *중간에 정렬하는 방식은 사전의 크기에 영향을 많이 받는다. 즉, 크기가 커지면 정렬하는것도 정렬 사전을 만드는것도… Read More

(espressoOtr) Canister/Shelfer 소개

Canister shelfer from SeonyHyun AhnespressoOtr 에는 Canister/Shelfer 라는 데이터 구조(클래스)가 있다. 위의 설명은 영어로 써서 잘 이해가 안될수도 있는데 간단하게 말하자면 문자열(String)을 위한 구조이다. 그런데 문자열을 제일 앞글자를 기준으로 n 개의 Canister 라는 클래스로 나누어서 저장을 하는것이다.  이렇게 나누어서 저장을 하는 가장 큰 목적은 바로 탐색시 적은 수의 데이터를 대상으로… Read More

#주간개발기, 3월 첫째주

exs4j – DB에 OpenAPI를 이용한 검색 결과를 저장하는 것은 되었고, 저장된 검색 결과의 빠른 검색을 위해서 exs4j 내에 올려서 유지할 인덱스를 만드는 작업을 하였다. 기존의 espressoOtr 라이브러리 내에 Canister/Shelfer 를 통해서 구현하려고 했는데, 약간 기능이 미흡한 부분이 있어서, Shelfer+Map 형태로 인덱스 구조를 잡았다. 그렇게 해서 하나의 검색 결과에 대한 requestCode(유일하게 구분되는 검색 요청… Read More

(exs4j) Netty ChannelPipeline 에 대한 이해.

현재 개발하고 있는 exs4j 에서는 네트워크 파트는 전적으로 Netty가 담당하고 있다. 이유는 여러가지가 있겠지만 쉽게  서버를 구성할 수 있고 pipeline을 변경함에 따라 HTTP 통신 방식도 지원할 수 있기 때문이다.(v1.6 지원예정) Netty 에서 여러가지 예제를 제공하고 있기 때문에 쉽게 따라 할수 있는데 필자 역시 따라 하면서 배우고 적용하고 있는 중이다.  위의 코드는 exs4j 서비스… Read More

(espressoOtr) DateTime wrapping 작업

개인적으로 여러가지 데이터 형이 있겠지만 가장 쓰기 불편하고 짜증나는 형은 단연 날짜와 시간에 대한 데이터 형식인 Date(Java 기준, 다른 언어도 크게 다르지 않다.) 일것이다. wrapping 작업을 하는 이유는 사실 우리가 날짜 와 시간 관련 작업을 할때 하는 작업이 그리 다양하지 않다는 가정에서 출발했다. 실제로 내가 가장 필요했던 것은 현재 날짜/시간을 Date 형식 혹은… Read More

(espressoOtr) jericho parser를 이용한 HTMLExtractor

HTML 파싱은 이제 어떤 서비스와 연동할때 필수적인 부분이 되었다. 그래서 쉽게 쓸수 있게 클래스화 해두면 좋은것 같아서 개인적으로 만들고 있는 espressoOtr 이라는 자바 라이브버리에 jericho parser 를 이용해서 HTMLExtractor 클래스를 만들었다. jericho 파서는 자바기반 html parser 인데 쉽게 쓸수 있도록 되어 있다. espressoOtr 라이브러리에서는 다음과 같이 자주 사용하는 부분에 대해서 jericho 파서를 이용해서 util 클래스를… Read More