[typescript] 타입스크립트 비동기 작업에서의 캐싱 방법

비동기 작업은 웹 애플리케이션에서 매우 일반적이며, 중복 요청을 최적화하기 위해 캐싱은 매우 중요합니다. 타입스크립트에서 비동기 작업의 캐싱을 구현하는 방법에 대해 알아보겠습니다.

메모이제이션 (Memoization)

메모이제이션은 함수의 반환 값을 저장하여 동일한 입력 값에 대해 다시 계산하지 않고 저장된 값을 반환하는 기법입니다. 타입스크립트에서는 메모이제이션을 구현하기 위해 함수를 작성하고 결과를 캐싱하는 방법을 사용할 수 있습니다.

예를 들어, 아래는 인자로 받은 값을 제곱하여 캐싱하는 예제입니다.

const squareCache: { [key: number]: number } = {};

function squareWithCache(x: number): number {
  if (!squareCache[x]) {
    squareCache[x] = x * x;
  }
  return squareCache[x];
}

이제 squareWithCache 함수를 호출할 때마다 중복되는 입력 값에 대해 값이 캐시되어 다시 계산하지 않습니다.

Promise 기반 캐싱

Promise를 기반으로 하는 비동기 작업의 캐싱은 Promise 객체를 저장하여 중복된 요청에 대해 저장된 결과를 반환하는 방식으로 구현할 수 있습니다.

아래는 Promise 기반의 API를 사용하여 결과를 캐싱하는 예제입니다.

const dataCache: { [key: string]: Promise<any> } = {};

function fetchDataWithCache(id: string): Promise<any> {
  if (!dataCache[id]) {
    dataCache[id] = fetchDataFromServer(id);
  }
  return dataCache[id];
}

위의 예제에서는 fetchDataFromServer 함수를 호출하여 데이터를 가져와서 Promise 객체를 캐싱하고, 동일한 요청이 들어올 경우 저장된 Promise를 반환합니다.

캐싱 라이브러리 활용

타입스크립트에서는 lru-cachenode-cache와 같은 캐싱 라이브러리를 활용하여 메모리 기반의 캐싱을 쉽게 구현할 수 있습니다. 이러한 라이브러리를 사용하면 캐싱 전략 및 TTL(Time-To-Live) 등을 쉽게 설정할 수 있습니다.

이를 통해 타입스크립트에서 비동기 작업의 성능 향상을 위해 캐싱을 적절히 활용할 수 있습니다.

캐싱은 중복된 작업을 피하고 성능을 향상시키는데 매우 유용한 기법이며, 타입스크립트에서는 다양한 방법으로 캐싱을 구현할 수 있습니다.

위의 몇 가지 방법을 활용하여 비동기 작업에서 캐싱을 구현하는 것은 성능 개선에 중요한 역할을 할 수 있습니다.

참고 자료