Kyun2da.dev
    Search by

    리덕스 툴킷

    리덕스 툴킷

    서론

    지난 포스팅에 이어 이번에는 리덕스의 일반적인 방법이 된 리덕스 툴킷에 대하여 알아보려고 한다. 이 글은 redux-toolkit 1.5.1 버전을 기반으로 쓰여진 글임을 미리 밝히는 바이다.

    리덕스 툴킷이란?

    리덕스 툴킷 라이브러리는 리덕스팀의 세가지 걱정을 해결하기 위해 등장하였다.

    1. 리덕스 스토어를 구성하는 것은 너무 복잡하다.
    2. 리덕스가 유용해지려면 많은 패키지들을 추가로 설치해야한다.
    3. 리덕스는 너무 많은 보일러플레이트 코드를 요구한다.

    이 세가지를 해결한 것이 리덕스 툴킷이라는 라이브러리로 리덕스를 훨씬 쉽고 간편하게 사용할 수 있다. 이제 리덕스 툴킷을 어떻게 쓰는지 또, 어떻게 위의 문제점들을 해결했는지 살펴보도록 하자.

    리덕스 툴킷 사용법

    먼저 패키지부터 설치하자.

    리덕스 툴킷은 빌트인 타입스크립트이기 때문에 별도의 타입설치가 필요하지 않다.

    npm install @reduxjs/toolkit react-redux

    리덕스 툴킷 api

    리덕스 툴킷 api는 크게 7가지가 있다.

    1. configureStore() : 리덕스 createStore함수와 비슷한 함수로, 간단화된 구성 옵션과, 기본 구성을 제공한다. slice reducer를 자동으로 합치고, 미들웨어를 추가할 수 있으며, redux-thunk를 기본적으로 제공한다. 또한 redux devtools Extension 사용이 가능하다.
    2. createReducer() : 리듀서 함수를 switch 구문으로 쓰기보다는, 리듀서 함수를 계속쓰는 lookup table 방식을 쓸 수 있게 해주고, immer라이브러리가 내장되어 있어서 mutative한 코드를 작성할 수 있도록 해준다. ex) state.todos[3].completed = true
    3. createAction() : 주어진 액션 타입 문자열로 액션 크리에이터 함수를 생성해준다. 함수 자체에 toString()이 정의되어 있어서 constant 타입 대신 사용이 가능하다.
    4. createSlice() : reducer 함수, slice 이름, 초깃값을 넣을 수 있고 action creator와 action type을 가진 slice reducer를 자동으로 생성해준다.
    5. createAsyncThunk : redux-thunk의 대체재
    6. createEntityAdapter : 스토어에서 정규화된 데이터를 관리하기 위해 재사용 가능한 리듀서 및 selector 집합을 생성한다.
    7. createSelector : reselect 라이브러리의 유틸리티 기능과 똑같음

    여기서 일반적인 앱은 configureStore, createSlice 만으로 구현이 가능하다. 이제 예제를 통해 사용법을 살펴보자.

    리덕스 툴킷을 활용한 투두 카운터 구현

    지난 시간에 리덕스에서 만들었던 투두리스트와 카운터 예제와 비교를 해보자.

    먼저 라이브러리 종류가 확연하게 줄은 것을 확인할 수 있다. 기존에는 코드의 길이를 줄이고 가독성을 좋게하기 위해 immer와 redux-actions를 설치했지만 리덕스 툴킷을 사용하면 두 라이브러리를 사용하지 않고도 훨씬 짧은 코드를 짤 수 있었다. 또한 여기에는 추가하지 않았지만 미들웨어 설정과, Redux-thunk도 내장되어 있기 때문에 추가가 되더라도 더 짧고 가독성 좋은 코드를 쓸 수 있을 것이다.

    모듈 폴더의 todos.js 파일을 각각 비교해보면 더 리덕스 툴킷의 위력이 나타난다. 기본 리덕스에서는 액션 타입, 액션 creator등을 따로 생성해줘야 했었지만 리덕스 툴킷에서는 createSlice 함수 하나로 모든 것이 구현 가능하다.

    리덕스 툴킷 장점 정리

    • action type이나 action creator를 따로 생성해주지 않아도 된다.
    • 미들웨어 추가가 편리하다.
    • immer가 내장되어 있어 mutable 객체를 사용해도 된다.
    • redux thunk가 내장되어 있어 비동기를 지원한다.
    • 타입스크립트 지원이 잘된다.

    마치며

    이번에 토이프로젝트를 하면서 리덕스 툴킷으로 리펙토링을 하고 있는데 너무 편리해져서 리덕스를 더 좋아하게 된 것 같다. 좀더 많이 사용해보고 추가할 점이 있으면 추가해봐야겠다.

    참고


    Written by@[Kyun2da]
    Kyun2da Dev Blog

    GitHub