개발을 하다 보면 서버에 요청을 보내는 경우가 많습니다. 이때 중복 요청을 방지하려면 어떻게 해야 할까요?
Axios는 HTTP 클라이언트 라이브러리로서, 요청을 보내고 응답을 받는 데 사용됩니다. Axios를 사용하여 요청 중복을 방지하기 위해서는 몇 가지 방법이 있습니다.
1. 요청 취소 처리
Axios의 CancelToken 기능을 사용하면 중복 요청을 방지할 수 있습니다. 요청을 보내기 전에 CancelToken을 생성하고 해당 요청에 대한 취소 토큰을 설정합니다. 이후 새로운 요청을 보내기 전에 이전 요청을 취소하면 중복 요청을 방지할 수 있습니다.
아래는 Axios를 사용하여 요청 중복을 방지하는 예제입니다.
import axios from 'axios';
// 요청 취소를 위한 CancelToken 생성
const cancelTokenSource = axios.CancelToken.source();
// 기존 요청 취소
cancelTokenSource.cancel();
// 새로운 요청 보내기
axios.get('https://api.example.com/data', {
cancelToken: cancelTokenSource.token
})
.then(response => {
console.log(response.data);
})
.catch(error => {
if (axios.isCancel(error)) {
console.log('요청이 취소되었습니다.');
} else {
console.log('에러 발생:', error);
}
});
위 예제에서는 기존 요청을 취소하기 위해 cancelTokenSource.cancel()
메서드를 호출하고, 새로운 요청을 보낼 때 cancelToken: cancelTokenSource.token
옵션을 설정합니다. 요청 취소 시 axios.isCancel()
메서드를 사용하여 취소 여부를 확인할 수 있습니다.
2. 요청 디바운스 처리
Axios를 사용하여 요청 중복을 방지하는 또 다른 방법은 디바운스(debounce)를 사용하는 것입니다. 디바운스는 연이어 호출되는 함수 중 마지막 호출만 실행되도록 제어하는 기능입니다.
아래는 Axios와 Lodash의 debounce 함수를 함께 사용하여 요청 디바운스를 처리하는 예제입니다.
import axios from 'axios';
import debounce from 'lodash/debounce';
// 요청 디바운스 함수 생성
const debounceRequest = debounce(() => {
axios.get('https://api.example.com/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.log('에러 발생:', error);
});
}, 300); // 300ms 딜레이
// 요청 보내기
debounceRequest();
위 예제에서는 debounce
함수를 사용하여 debounceRequest
함수를 생성합니다. 이 함수는 300ms 딜레이 이후에 실행되며, 중복 요청을 방지하기 위해 가장 마지막 호출만 실행됩니다. 따라서 axios.get()
메서드는 연속적으로 호출되더라도 실제 요청은 딜레이 이후에 한 번만 보내집니다.