목록전체 글 (44)
디지안의 개발일지
개요엘라스틱 서치에서 우선순위를 설정해서 정렬을 하는 방법에 대해서 알아보자.요구사항저번에 봤던 요구사항을 다시 살펴보자.완전 일치한 키워드면 검색 결과에 상위에 표출한다.일치하는 키워드의 position에 따라 상위에 표출한다.예를 들어, 엘라스틱 이라는 키워드로 검색하게 됐을 때, 아래와 같이 나오게 한다.엘라스틱 서치가엘라스틱 서치가나엘라스틱 서치가나다엘라스틱 서치검색어는 1-30 글자의 범위를 가진다.완전일치완전일치에 가중치를 줘야한다. 하지만 안타깝게도 저번에 설정했던 매핑 정보에서는 이미 n-gram으로 토큰을 다 나눴기 때문에 완전일치에 대한 값을 지정할 수 없다. 그래서 검색을 하기 위한 키워드와 원본 데이터인 컨텐트를 나눠서 매핑을 설정해보겠다.PUT /elastic_test{ "set..
개요우리가 구글, 네이버, 다음과 같은 곳에서 검색을 하다보면 내가 작성한 키워드에 맞춰 자동으로 검색어를 추천해주는 기능이 있다. 이런 검색 사이트에서는 데이터가 너무 많기 때문에 정밀한 스코어 정보나 사용자의 정보를 바탕으로 랭킹을 매겨야하겠지만 너무 복잡함으로 엘라스틱의 간단한 기능으로 어떻게 스코어를 주어 자동 완성 기능을 구현하는지 알아보자.요구사항먼저 무엇을 어떻게 했을 때 검색을 하더라도 값이 나오길 원하는지가 중요하다. 요구사항은 아래와 같이 간단하게 정의 내렸다.완전 일치한 키워드면 검색 결과에 상위에 표출한다.일치하는 키워드의 position에 따라 상위에 표출한다.예를 들어, 엘라스틱 이라는 키워드로 검색하게 됐을 때, 아래와 같이 나오게 한다.엘라스틱 서치가엘라스틱 서치가나엘라스틱 ..
개요자바 진영에서 엑셀을 다루는 대표적인 라이브러리는 Apache POI다. 사용법을 보니 굉장히 보기 싫다. 전능하신 ChatGPT님께 기본 사용법을 물어보니 기본적인 코드는 아래와 같다.import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class ExcelReader { public static void main(String[] args) { String excelFilePath =..
FEP란FEP란 Front End Processor의 약자로 원래 메인프레임에서 통신 과부하를 경감시키기 위해 전처리 작업을 하는 과정을 말한다. 하지만 금융권에서는 의미가 조금 와전되어 B2B 연계(대외계)를 FEP라고 부른다.예를 들어, 금융 상품을 이용하는 사람들은 보통 하나의 금융 기관에서만 금융 상품을 이용하지 않는다. 은행은 국민은행, 증권은 신한투자증권, 보험은 카카오페이손해보험 거기서 더 나아가 은행도 하나의 은행만 사용하는 것이 아니라 토스뱅크, 카카오뱅크, 우리은행등 여러 은행을 사용할 수 있다. 각 금융기관들은 자기 은행에 대한 정보만 가지고 있는데 사용자는 한눈에 자기 자산에 대해서 알 수 있으면 더 편리할 것이다. 그래서 정부에서 모든 금융 자산에 대해서 한눈에 볼 수 있도록 하는..
VectorDB백터데이터베이스란 무엇인가?우리가 사용하는 일반적인 데이터베이스는 찾고자하는 데이터를 정확하게 찾으려고 한다. 예를 들어, 사람이라는 집합 안에서 나이가 20살인 남성을 찾는다고 하면 정확하게 그 특징을 가지고 있는 사람 집합을 찾게 마련이다. 하지만 벡터데이터베이스는 정확하게 어떤 집합을 찾는 것이 아니라 유사한 집합을 찾는 것이 특징이다.그렇다면 왜 그런 것이 필요하고 어떻게 동작하는지 궁금할거다. 한번 알아보도록 하자.벡터데이터베이스는 너무나 잘 알고 있지만 벡터라는 단어는 이제는 익숙하지 않는 단어다. 벡터는 수학과 물리학에서 크기와 방향을 가진 것을 의미한다. 데이터를 단순하게 어떤 수(컴퓨터에서는 String, Number, Array로 생각하자)로 표현할 수 없는 경우 방향을 ..
Restdocs DSL 개요 평소에 회사에서 API 문서를 작성하기 위해서는 Swagger를 사용하여 작성하였다. 그런데 최근 시작한 프로젝트에 RestDocs를 사용해야되는 일이 생겼다. 오랜만에 작성하는 RestDocs를 작성하기 위한 테스트 코드는 너무 복잡하고 직관적이지 않다는 것을 느껴 더 좋은 방법이 없을까 고민을 하였고 우연히 toss에서 소개한 Kotlin으로 DSL 만들기라는 글을 보게 되었고 코드가 공개되어 있지 않아 직접 사용하기 위해 시간을 내어 만들어 보기로 했다. DSL이란? DSL은 Domain Specific Language의 약자로 특정한 도메인을 적용하는데 특화된 컴퓨터 언어를 의미한다. 굉장히 어려워 보이는 개념 같이 보이지만 사실 개발자라면 모두 DSL를 사용하고 있다..
개요 AWS를 직접 사용해본 적이 없는데 AWS Lambda를 사용할 일이 생겨서 사용할 일에 대해서 정리하려고 한다. 내가 사용한 구조는 다음과 같다. Kotlin으로 AWS Lambda로 실행시킬 로직을 작성한다. 서버에서 HTTP 요청을 통해 AWS에 올린 Lambda를 실행하고 그 결과를 받는다. 간단한 구조지만 문서를 찾거나 Kotlin으로 된 예제들이 별로 없어서 다른 사람에게 도움이 될거 같아서 정리해본다. AWS Lambda 작성 AWS Lambda는 서버를 올리지 않고 짧은 시간 내에 실행되는 로직을 수행할 수 있다. 그래서 Lambda 함수라고도 불린다. AWS에서는 Lambda를 작성하기 위한 여러가지 방법을 제공해주는데 나는 그 중에서도 AWS에서 제공하는 SDK를 사용하여 Lamb..
개요 회사에서 Spring Webflux에 대해 발표를 할 기회가 있었어서 그 내용에 대해 정리하려고 한다. 웹요청 처리의 처리 방식 웹요청을 처리하기 위해서는 다음과 같은 과정이 필요하다. 클라이언트에게 받은 웹요청(네트워크 패킷)은 이진 데이터로 요청이 들어온다. 이 이진 데이터를 웹서버에서 처리할 수 있는 데이터로 변환하는 작업이 필요하다. 이진 데이터 → 바이트 → HTTP 객체로 변환하는 과정이 필요하다. 이 과정에서 네트워크 패킷(이진 데이터)를 바이트로 변환하는 과정은 커널 스레드가 바이트 값을 HTTP 객체로 변환하는 과정은 유저 스레드가 진행하게 되는데 이 과정을 누가, 어떻게 처리하는가에 따라 웹 기술이 발전하였다. CGI(Common Gateway Interface) 1993년에 발표..