[javascript] Redux에서 캐싱(Caching) 방법은?

Redux에서 캐싱(Caching) 방법은?

Redux는 상태 관리 라이브러리로서, 캐싱은 애플리케이션의 성능을 향상시키는 중요한 요소입니다. Redux에서 캐싱을 사용하는 방법을 알아보겠습니다.

1. Reselect 라이브러리 사용

Reselect는 Redux의 셀렉터(selector)를 작성할 때 캐싱을 자동으로 처리해주는 라이브러리입니다. 셀렉터는 상태를 선택하여 변환하는 함수로서, 캐싱을 이용하면 같은 입력에 대해서는 이전에 계산한 결과를 재사용하여 성능을 개선할 수 있습니다.

Reselect를 사용하려면 먼저 reselect 패키지를 설치해야 합니다.

npm install reselect

그리고 아래와 같이 사용할 수 있습니다.

import { createSelector } from 'reselect';

const getUsers = state => state.users;

const getActiveUsers = createSelector(
  getUsers,
  (users) => users.filter(user => user.isActive)
);

위의 예제에서 getActiveUsers 셀렉터는 getUsers 셀렉터의 반환값을 기반으로 사용자 중 활성 상태인 사용자만 필터링하여 반환합니다. 이때 Reselect는 입력값이 변경될 때만 계산을 수행하며, 이전 결과를 캐싱하여 동일한 입력에 대해서는 이전의 결과를 반환합니다.

2. Memoization 함수 사용

Memoization은 함수의 반환값을 캐싱하여 동일한 입력에 대해서는 이전 결과를 반환하는 방식입니다. Redux에서는 memoize 함수를 사용하여 메모이제이션을 구현할 수 있습니다.

import memoize from 'lodash/memoize';

const expensiveOperation = (param) => {
  // 복잡한 계산 로직
};

const memoizedOperation = memoize(expensiveOperation);

위의 예제에서 expensiveOperation 함수는 매우 복잡한 계산 로직을 가지고 있습니다. 이 함수의 반환값은 param에 의존합니다. memoize 함수를 사용하여 expensiveOperation 함수의 결과를 캐싱하였습니다. 따라서 동일한 param에 대해서는 이전 결과를 반환하게 되어 성능을 개선할 수 있습니다.

3. Immutable.js 사용

Immutable.js는 Redux와 함께 사용하기 좋은 불변성(immutable) 라이브러리입니다. Redux는 이전 상태와 다음 상태를 비교하여 변경된 부분만 업데이트하는데, Immutable.js는 객체나 배열의 변경을 감지하여 캐싱하고 재사용함으로써 성능을 향상시킬 수 있습니다.

Immutable.js를 사용하려면 먼저 immutable 패키지를 설치해야 합니다.

npm install immutable

그리고 아래와 같이 사용할 수 있습니다.

import { List } from 'immutable';

const state = List([1, 2, 3]);

// 변경된 상태를 업데이트
const nextState = state.push(4);

위의 예제에서 List는 Immutable.js에서 제공하는 리스트 객체입니다. 기존의 배열과 달리 List는 변경이 발생하면 이전 상태를 캐싱하고 변경된 부분만 업데이트합니다. 이를 통해 동일한 연산에 대해서는 이전 결과를 재사용하여 성능을 개선할 수 있습니다.

참고 자료