개발(58)
-
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 -
Kubernetes 환경에 affinity, anti-affinity 적용하기
개요 kubernetes 환경에서 작업을 하다보면 특정 node에 pod가 쏠리는 현상이 발생할 수 있다. 이를 방지하기 위해서 affinity 설정을 추가할 수 있다. Node isolation / restriction Affinity를 설명하기 이전에 isolation과, restriction에 대해서 설명한다. node object에 label을 추가하게 되면, 특정 노드 또는 노드 그룹에 pod가 배치되도록 할 수 있다. node 자체에는 표준 label, annotation, taints들이 존재한다. NodeRestriction admission plugin이 있는데, 이 plugin을 활성화하게 되면, 노드를 쉽게 격리시킬 수 있다. 특정 node의 label을 사용하여 nodeSelecto..
2021.07.04