[TS] tsql (Object Query)

Mineru·2021년 9월 27일
0

🤔동기

NodeJS로 서버 코드를 작성하다가 데이터 캐싱을 하기 위해서 redis를 사용하게 되었는데 redis에 저정한 데이터를 단순히 로딩하는것 만이 아니라 연산을 할 수 있어야 했다.

예를 들면, [ {name:"someone", age: 21, gender:"male"}, {name:"someone", age: 36, gender:"female"}, ... ]
이런식으로 데이터가 있고, 여기서 30세 이하의 데이터를 찾고자 한다면, filter 메소드 여러 개를 중첩하여서 만들 수 있다.

하지만 sql 문법으로 검색 방식을 이미 만들어 뒀는데, 이를 다시 코드로 바꾸기엔 너무 귀찮게 느껴졌다.
그래서 한번 object 구조를 검색하는 라이브러리를 한번 찾아보았다.

당연히 존재했다. 하지만 내가 당장 쓰고 싶은 ts이 아닌 js로 작성 되어 있어서 ts로 코드 변환을 하고 이를 배포해보자고 생각을 하게 되었다.

🔨삽질

포부는 컸으나 현실의 벽은 너무나 가팔랐다.
다른 것보다 코드 변환 과정은 아무렇지 않았지만, 어설프게 알고 있던 지식 탓에 tsconfig.json 파일의 옵션을 제대로 알고 있는게 많이 없었다.
그래서 여기에서 많은 문제가 발생했었다.

심지어는 이정도까지 설정했으면 문제없다고 생각하고 야심차게 1.0.0 버전을 올리고, 한번도 안써본 Github Actions를 공부해서 CI를 하면서 나름 npm 배포를 체계적으로 해봤다고 스스로를 대견스럽게 여기고 있었는데...

어라?! yarn add @mineru98/searchts로 종속성 추가를 하고 테스트 코드를 돌려보는데 모듈을 찾을 수 없다는 에러가 검출되었다.😱

☕️휴식

tsql의 라이브러리 개발에 갑자기 흥미가 떨어졌다.
무얼 공부해야 할지는 알고 있지만, 코드 자체를 돌리면 잘 돌아가기 때문에 나름 완성했으니까 이쯤했으면 잘했다고 생각하고 관심을 다른 곳으로 돌리던 와중에 갑자기 메일로 외쿡어로 issue가 하나 올라오는 것이다.

내용인즉슨

니 라이브러리 좀 쓰고 싶어서 설치해봤는데 동작이 안되네? 내 설정이 잘못됐는지 좀 봐줘.

(형... 내가 완성을 안시킨거야... 미안해...)

🔥열정

사실 내가 처음부터 끝까지 쓴 코드도 아니고 그냥 다른 언어로 코드를 변환한 작업이 끝일 뿐인데, 나에게 issue까지 보내면서 내용 좀 살펴봐달라는 경험은 처음이었다. 그래서 댓글로는 1주일 안으로 업데이트를 하겠다고 했으나 도저히 감격스러운 순간이었기 때문에 바로 작업을 진행했다.

무얼 고쳐야 알고 있기 때문에 사실 문제 해결은 금방 진행되었다.
그간 왜 내가 안했는지 미워질 정도로 과거의 내가 한심해 보일 정도였다.

그리고 그동안은 그렇게 안되던 구글링이 이때는 어쩜이리도 구글링이 잘 되는지 모르겠다.

🎤이제서야 라이브러리 소개

tsql은 TypeScript-SQL의 줄임말로, json 형태의 데이터를 가지고 다양한 깊이의 object들을 검색할 수 있도록 만든 라이브러리입니다.

나이 30세 이상을 찾기 위해서는
{ age: { from: 30 } } 이나 { age: { gte: 30 } }과 같은 문법으로 객체 검색이 가능합니다.

  • from : >=
  • to : <=
  • gte : >=
  • gt : >
  • lte : <=
  • lt : <
  • _not : !

일반적으로 사용하게 되면 and 연산으로 이어지고, 때로는 or 연산이 필요한 경우는 다음과 같이 사용할 수 있다.
{ age: { gt: 30 }, age: 30, _join: "OR" } // age>30 || age == 30

더 다양하게 사용해보고 싶다면 여기를 통해 설치를 해보시길 바랍니다.

profile
Daily Coding

0개의 댓글