서비스를 위해 개발하고 있던 기자재 대여 서비스를 리팩토링을 위해 살펴보고 있던 중 한가지 문제를 발견했다.

보이는대로 사용자가 철자를 입력할 때마다 refetch가 발생하고 있었다.
input의 value가 onChange가 될 때 마다 재요청을 보내고있었다.
중복 함수 호출에 대해 찾아보니 debouncing이라는 개념에 대해 알게 되었다.
연이어 호출되는 함수들 중 마지막 함수(또는 제일 처음)만 호출하도록 하는 것
말 그대로 연속으로 호출되는 함수의 맨 처음과 마지막만 호출되게 하는 기술이다.

위 처럼 버튼을 연속으로 눌러 요청을 보냈을 때, 이 클릭 이벤트를 마지막 한번만 실행함으로서 불필요한 요청을 없앨 수 있다.
한번 코드에 적용해보자
useEffect(() => {
let delayTimer: NodeJS.Timeout
const delayedFetch = (): void => {
clearTimeout(delayTimer)
delayTimer = setTimeout(() => {
refetch()
if (data) setList(data?.data?.equipmentList)
}, 200)
}
delayedFetch()
return () => clearTimeout(delayTimer)
}, [inputValue,refetch])
이렇게 디바운싱을 통해 불필요한 중복 요청을 없앨 수 있다!