
FILTER = 차단과 선별 기능을 동시에 수행할 수 있는 도구를 말한다
TS 혹은 JS 아니면 기타 다른 언어들을 이용하여 웹개발을 진행하다보면 필수불가결 적이게 CRUD를 만들게 될 일이 있을것이다.
'게시판 조회', ' 상품 조회 ' 등등 백앤드 웹 개발자들의 숙명과도 같은 게시판 관련 API를 작성 혹은 유지보수 하게 될 것이니까.
다만 어떠한 조건에 맞추어 조건에 맞는 FILTER를 거쳐 결괏값을 내는 부분에 대해서 TS및 NESTJS를 사용하는 본인으로썬
구글링을 하게될 때 가장 많이 보는것들이 querybuilder 이라고 생각한다.
------- 실제로 구글링을 해서 쿼리빌더로 필터링에 대한 구현을 하였다.

대략적으로 보자면.. game에서 장르와 이미지 할인율 할인가격에 대한 필터링을 거는것 이라고 보면 될 것이다.
쿼리 빌더로 작업을 하게되면, 입력해야하는 'string type'이 워낙 많아지다보니, 유지보수가 어려워지는 단점 및 코드 작성시 오타 등 안정성에서 떨어지는 부분이 있다고 판단이 되었다.
NESTJS와 TYPESCRIPT에서 주로 사용되는 'TYPEORM'을 이용한 method 'find'를 적극적으로 활용해서 필터를 만들 수 있을것인가?
를 생각으로 코드를 리팩토링 해보았다.


빨간..줄?

interface searchType에서 string 형식은 findOptionsOrderValue에 할당할 수 없다고 하여, 해당 옵션에 들어가보았다
(윈도우는 Ctrl+좌클릭)


findOptionsOrderValue값에는 asc 혹은 desc만 들어간다고하였는데 당췌 어떻게 처리를 해야하는건지 알 수가 없었다. string말고 저기 기재되어있는 타입만 이용이 가능하다고한다.
Typescript에서 연산자를 이용하여 구분하는 Union Type이 생각났다.

적용이후 각 필터에 '?' optional을 넣어주어 필수가 아닌 값을 생성해주고

엔드포인트 연결 이후 작동하니. 정상적으로 처음에 작동했던 쿼리빌더의 식과 완전히 동일한 값의 return이 나오게 되었다.
ORM으로 처리가 어려운 연산의 경우 쿼리빌더로 복잡한 연산을 처리 할 수 있었으나, 이토록 간단한 필터링의 값은 TYPEORM에서 제공하는 FIND OPTION으로도 충분히 처리가 가능한 점을 알 수 있다.