본문 바로가기

전체 글

(9)
ElasticSearch 스터디 정리 (6) - 데이터 집계 2 버킷 집계 예전에 최초 스터디 내용에서도 집계 관련된 내용이 나왔다. 그때는 간략히 버킷 집계에 대해서 아래와 같이 기록했었다. 제일 많이 사용하는 집계 어떤 text 나 keyword 또는 히스토그램에 대한 범위 집계 등 일단 버킷이라는 단어에 대해서 좀 알아보았다. 공식 문서에는 따로 언급이 없고 주로 AWS 에서 사용을 많이 하는 단어 인듯하다. 다만 통상적으로 아래와 같이 사용한다. A bucket is most commonly a type of data buffer or a type of document in which data is divided into regions. - wikipedia 내가 이해한바로는 어떤 메모리 그룹을 뜻한다고 생각한다. 버킷 집계는 예를 들어서 날짜 범위 집계 경우..
ElasticSearch 스터디 정리 (4) - Query DSL 1 개요 엘라스틱서치는 검색엔진이니 만큼 검색은 매우 중요한 부분이라고 볼수 있다. 그래서 Query DSL이라는 특수한 쿼리 문법을 제공함으로써 다양한 검색 기능을 활용 할 수 있다. HTTP + JSON 검색으로 간편성은 제공하지만 JDBC 처럼 TCP/IP 기반 클라이언트를 제공함으로써 더 빠른 검색이 가능하게 하면 좋지 않았을까 라는 생각이 든다. 검색 API 색인시점에서는 앞에 공부한 내용처럼 분석기(standard)로 구분되어 색인될것이다. trying out Elasticsearch => trying, out, elasticsearch Hello Elasticsearch => hello, elasticsearch Term Document trying 1 out 1 elasticsearch 1, ..
ElasticSearch 스터디 정리 (2) - 데이터 모델링 개요 엘라스틱서치에서는 색인 할때 문서의 데이터 유형에 따라 필드에 적절한 데이터 타입을 지정해야 한다. 이 과정을 매핑이라고 하며, 이는 데이터 모델링이라 할 수 있다. 매핑은 데이터베이스의 스키마에 대응하는 개념이라고 할수 있다(데이터 타입을 구체적으로 정의하는 일) 매핑 API 이해 문서에 존재하는 필드의 속성을 정의할 때 각 필드 속성에는 데이터 타입과 메타데이터가 포함된다. 이를 통해서 색인 과정에서 어떻게 역색인 변환되는지 상세하게 정의 할 수 있다. 엘라스틱서치는 기본적으로 스키마리스이기 때문에 명시적으로 필드를 정의하지 않아도 데이터 유형에 따라 필드 데이터 타입에 대한 매핑 정보가 자동 생성 되지만, 실수로 잘못된 타입을 지정된 경우 수정 불가능하다. 아래 예제를 보자, ## docume..
ElasticSearch 스터디 정리 (3) - 엘라스틱서치 분석기 개요 오늘은 엘라스틱서치 분석기에 대해서 좀 얘기를 해보려고 한다. 검색 엔진에서는 제일 중요한 부분이라고 생각한다. 어떻게 텍스트를 분석하냐가 검색 엔진의 성능과 기능을 좌우한다고 생각한다. 처음 접하는 사용자 경우 결과가 검색되지 않거나, 원하지 않는 결과가 나온다면 잘못된 분석기가 설정되었을 확률이 매우 크다고 본다. 저번에 정리했던 내용에도 있는 예제인데, '아버지가 방에 들어가신다.' 라는 text가 들어온다면, 기본적으로는 아버지가, 방에, 들어가신다 요렇게 인덱싱이 될것이다. 물론 아버지로는 해당 document 로 조회 할 수가 없다. 그럼 아래 좀 더 자세히 확인해보자. 역색인 구조 책을 읽을때 특정 단어를 알고 있지만 해당 단어가 어떤 페이지에 있는지 확인하기 위해서 우리..
ElasticSearch 스터디 정리 (1) 개요 이번에 우연히 elastic search를 회사에서 사용할 기회가 있어서 생겼다. 그래서 팀 안에서 스터디를 만들어서 같이 공부하고 그 내용을 정리하고 내 생각을 기록하려고 한다. 교재는 엘라스틱서치 실무 가이드 - 위키북스 출판 을 사용하지만, 최대한 공식 document를 참고하려고 한다. ElasticSearch 란? Elasticsearch는 루씬 기반의 검색 엔진이다. HTTP 웹 인터페이스와 스키마에서 자유로운 JSON 문서와 함께 분산 멀티테넌트 지원 전문 검색 엔진을 제공한다. 일래스틱서치는 자바로 개발되어 있으며 아파치 라이선스 조항에 의거하여 오픈 소스로 출시되어 있다. 공식 클라이언트들은 자바, 닷넷(C#), PHP, 파이썬, 그루비 등 수많은 언어로 이용이 가능하다. 일래스틱서..
Java 경력 기술 면접 준비(1) 객체 지향 Object-Oriented Programming (OOP). 프로그램 설계방법론이자 개념의 일종. 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다. [1] 캡슐화(Encapsulation) 변수와 함수를 하나의 단위로 묶는 것을 의미한다. 즉, 데이터의 번들링(Bundling)이다. 대개 프로그래밍 언어에서 이 번들링은 클래스를 통해 구현되고, 해당 클래스의 인스턴스 생성을 통해 클래스 안에 포함된 멤버 변수와 메소드에 쉽게 접근할 수 있다. 클래스는 객체 지향 프로그래밍을 지원..
Asynchronous RESTful API 서버 - AKKA(프로젝트 설정) Index 글: Asynchronous RESTful API 서버 - AKKA 개요 일단 간단하게 람다 서비스가 가능한 서버를 작성 해볼까 합니다. 코드를 input으로 받고 코드대로 처리가 가능한 REST 서버입니다. AWS 람다랑 비슷한 개념이구요. 예를 들면 아래와 같은 간단한 코드가 있다면, public class Math { public int plus(int a, int b) { return a + b; } }우리는 이 코드를 서버에 배포하면, https://api.ztkmkoo.com/math/plus 라는 url로 { "a": "10", "b":"5" }를 Param으로 HTTP POST 메소드 호출시 해당 코드가 수행되면 15라는 return code를 받을수 있게 만드려고 합니다. 물론..
Asynchronous RESTful API 서버 - AKKA 개요 저는 평소에 비동기 작업을 선호합니다. 예전에 게임 서버 작업 할때는 그래도 비동기로 작업 할 많은 기회가 있었는데요, 최근에는 웹 API 서버 작업 위주로 진행하다 보니까 비동기 REST API 서버 작업 하기가 쉽지가 않네요. 일단 장단이 있겠지만 기존 방식을 더 선호 하시는 분도 계시고 그래서 어쩌다 보니 일반 Spring에 컨트롤러로 작업 할 때가 많네요. 물론 Spring 에서도 5부터 webflux 기능을 제공해서 비동기로 작업을 할 수는 있지만 저희 회사에서는 많이 활용되고 있지는 않네요. 예전에 우연히 좋은 기회가 있어서 임백준님의 AKKA 관련 강의를 들었던 적이 있습니다. C++로 boost asio로 소켓 서버 작업 하던 저에게는 좋은 충격으로 다가왔고 접하게 되었고, 틈틈히 회..