전체 글(60)
-
Nest.js 탐험기 4 - microservice (grpc) 를 사용해보자 - 튜토리얼편
개요 nest.js에서 제공하는 microservice module은 microservice들 간의 통신을 쉽게 구현하게 되어 있다. 기본적으로 http base를 통해서 web server를 구현하지만 여러가지 규격의 통신이 필요할 때가 있는데, nest.js에서는 이를 구현하기 편리하게 되어있다. grpc를 사용해서 통신하는 튜토리얼을 작성해보자. 설치 아래의 모듈을 추가해주도록 한다. # microservice를 구현하기 위해서 사용한다. yarn add @nestjs/microservices --save # grpc 용 yarn add @grpc/grpc-js @grpc/proto-loader --save예제 우선 nest.js guide 가이드에 나와 있는 예제를 찬찬히 따라해보자. 지금은 잘 ..
2021.12.28 -
Nest.js - moduleRef를 활용 해보자
개요 component를 type에 따라서 다르게 처리해야 되는 경우가 생긴다. 이 때 사용하는 것이 moduleRef이다. 이는 spring의 beanFactory와 유사하며 특정 context에 대한 component를 load하는데 도움이 된다. component의 scope에 따라서 다르게 생성될 수 있다는 점에 유의하자. 예제 1 - 기본 예제 1. 시나리오 요즘 차에 관심이 많아서 한번 차랑 연관지어서 한 번 살펴보도록 하자. 기아 차를 생산하는 KiaSCarService와 현대 차를 생산하는 HyundaiCarService를 생성하자. 그리고 moduleRef를 활용해서 query에 맞게 차를 생성해주도록 하자. 2. 코드 코드는 아래와 같이 간단하다. /** * Entity */ expor..
2021.11.05 -
Nest.js - Typescript alias를 사용해보자
개요 Nest.js는 기본적으로 생성할 떄, 프로젝트 셋팅을 쉽게 해준다. 하지만 기능적인 확장을 거듭하다보면 프로젝트 자체를 분리하고 싶은 상황이 생길 수 있다. 이 떄 적용하는 옵션 중에 lerna나 또는 yarn workspace가 될 텐데, 한 번에 전환해도 좋겠지만 점진적으로 적용하고 싶을 때가 있다. 하지만 정리를 할 떄 가로막는 것은 폴더구조에 의해서 디펜던시가 강하게 엮여 있어서 분리가 어려운 상황이 있을 수 있다. 이 때 간접적으로 디펜던시를 분리할 수 있는 방법이 있는데, 이게 path alise를 쓸 수 있다. 테스트 디렉토리 구조 나는 다음과 같이 테스트 디렉토리를 구성을 했다. 나머지는 테스트하다 쓰던거니까 가볍게 무시하고, common이라는 directory가 눈에 들어올 것이다..
2021.10.17 -
ElasticSearch - DFR에 대해 알아보자
개요 scoring model 관련하여 BM25에 대해서 알아보았다. 이번에는 DFR에 대해서 알아보도록 하자. DFR의 경우 lucene 내부에서 implementation이 되어 있다. DFR ( Divergence from Randomness ) framework 똑똑하신 분들이 DFR에 대한 내용을 내놓았다. 사실 가정이나 내용이 잘 이해가지 않는다. 한 번 정리해보면서 그 내용을 이해해보도록 해보자. 정의 # 아래의 함수들은 우선 간단하게 표기했다. boost = 1 def normalize(tf, c, avgfl, fl): return 1 def baseModel(stat, tfn): return 1 def afterEffect(stats, tfn): return 1 w = boost * ba..
2021.08.29 -
ElasticSearch - BM25에 대해서 알아보자
개요 ES에는 search를 위해서 다양한 scoring function들을 지원한다. 이에 대해서 자세히 살펴 보도록 하자 TF-IDF 먼저 검색의 기초가되는 TF, IDF에 대해서 이해해야한다. 필자도 수알못이긴 하지만 이번 기회에 한 번 천천히 살펴서 적어보려고 한다. 시작하기 전에 몇가지 상황을 가정하면서 이해를 도우려고 한다. 내가 만약 아이폰12 케이스를 찾는다고, 가정하자. (실제로 찾고 있다.) 이 때, 우리는 검색을 "아이폰12 케이스"로 찾을 것이다. 이 때, 검색 쿼리는 "아이폰12", "케이스"로 찾게 될 것이다. (실제로 tokenize, filter하는 내용 및 자연어 처리 부분은 좀 더 복잡하지만 개략적으로 이해해보자.) 이제 검색엔진에서는 inverted index로 docu..
2021.08.08 -
ElasticSearch keyword string 차이
ElasticSearch data types ES에는 다양한 data type이 존재한다. ES data types keyword type이란? 결론적으로 말씀드리면 keyword type은 anlayzer를 거치지 않고, text를 그대로 저장한다. ( tokenizer, filter를 거치지 않음 ) 따라서 exact match를 활용할 때, 사용할 수 있다. Example 아래의 쿼리를 통해서 테스트해볼 수 있다. 1. Index 생성 index 생성 curl --location --request PUT 'localhost:9200/malgogi-test-v1?include_type_name=true' \ --header 'Accept: application/json' ..
2021.08.01