테스트 및 성능
이 페이지는 Redux/RTK Query 애플리케이션의 테스트 전략과 성능 최적화 기법을 다룹니다.
Redux 슬라이스 테스트
기본 리듀서 테스트
// user.slice.test.ts
import reducer, { userLoggedIn, userLoggedOut } from './user.slice';
describe('user 슬라이스', () => {
const initialState = {
account: null,
isAuthenticated: false,
};
it('userLoggedIn을 처리해야 함', () => {
const account = '0x123...';
const actual = reducer(initialState, userLoggedIn({ account }));
expect(actual.account).toBe(account);
expect(actual.isAuthenticated).toBe(true);
});
it('userLoggedOut을 처리해야 함', () => {
const loggedInState = {
account: '0x123...',
isAuthenticated: true,
};
const actual = reducer(loggedInState, userLoggedOut());
expect(actual.account).toBeNull();
expect(actual.isAuthenticated).toBe(false);
});
});엔티티 어댑터 테스트
셀렉터 테스트
단순 셀렉터
메모이제이션된 셀렉터
MSW로 RTK Query 테스트
MSW 설정
쿼리 테스트
뮤테이션 테스트
낙관적 업데이트 테스트
성능 최적화
사용 selectFromResult 리렌더를 방지하려면
전체 상태 선택을 피하기
비용이 큰 셀렉터 메모화하기
정규화된 데이터에는 엔티티 어댑터 사용
RTK Query 캐시 설정 조정
더 나은 UX를 위한 사전 가져오기
폴링 전략
Redux DevTools
개발 환경에서 활성화
액션 정리기
DevTools에서 민감한 데이터를 정리:
모범 사례 체크리스트
성능
테스트
코드 품질
피해야 할 안티 패턴
다음은 하지 마세요:
직렬화할 수 없는 객체(providers, signers)를 Redux에 저장하지 않기
슬라이스와 RTK Query 양쪽에 데이터를 중복 저장
렌더링 중에 액션 디스패치
메모화 없이 새 객체를 반환하는 셀렉터 만들기
로딩 및 오류 상태 무시
RTK Query 없이 여러 컴포넌트에서 같은 데이터 가져오기
과도하게 폴링하거나
skipPollingIfUnfocused
성능 모니터링
셀렉터 호출 추적
리렌더 모니터링
다음 단계
마지막 업데이트