Redux middleware
๋ฏธ๋ค์จ์ด๋ ๋ฆฌ๋์ค์์ ๋ ๋ง์ ๊ธฐ๋ฅ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ์ค Redux-thunk , Redux-saga๊ฐ ๋ง์ด ์ฐ์ด๊ฒ ๋๋๋ฐ,
๋น๋๊ธฐ ์์ ์ ์์ด์ ํจ์จ์ ์ด๋ค..
Redux-thunk๋ ๋น๋๊ธฐ ์ก์ ํจ์ ํ๋์์ dispatch๋ฅผ ์ฌ๋ฌ๋ฒ ์ฆ ๋น๋๊ธฐ ์ก์ ์ ์ค ์ ์๋ค.
์ฝ๊ฒ ๋งํด dispatch์ฌ๋ฌ๊ฐ๋ฅผ ํ๋ฒ์ ๋ฌถ์ด์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
yarn add redux-thunk๋จผ์ redux-thunk๋ฅผ ์ค์นํด์ค๋ค.
๊ทธ ๋ค ์คํ ์ด๋ฅผ ๋ง๋๋ ๊ณณ์์ middleware๋ฅผ ์ ์ฉํด์ค๋ค.
import { createWrapper } from "next-redux-wrapper";
import { createStore, applyMiddleware, compose } from "redux";
import reducer from "../reducers";
import { composeWithDevTools } from "redux-devtools-extension";
import ReduxThunk from "redux-thunk"; //import
const configureStore = () => {
const middlewares = [ReduxThunk]; //์ ์ฉ
const enhancer =
process.env.NODE_ENV === "production"
? compose(applyMiddleware(...middlewares)) //๋ฐฐํฌ์ฉ
: composeWithDevTools(applyMiddleware(...middlewares)); //๊ฐ๋ฐ์ฉ
const store = createStore(reducer, enhancer);
return store;
};
const wrapper = createWrapper(configureStore, {
debug: process.env.NODE_ENV === "development",
});
export default wrapper;
๋ฏธ๋ค์จ์ด๋ 3๋จ ํจ์์ธ๋ฐ, ์ฌ์ค ์๋์ ์ฝ๋๊ฐ ์ ๋ถ์ด๋ค.
thunk๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋
๋ก๊ทธ์ธ์ ์ํ๊ณ ๋ก๊ทธ์์์ ํ๋ค๊ณ ํด์ ๋ฐ๋ก ๋๋ ๊ฒ์ ์๋๋ผ,
๋ฐฑ์ค๋์๋ฒ๋ฅผ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ Request Action์ด ๋๊ฒ ๋๋๋ฐ,
๋น๋๊ธฐ ์์ฒญ์ LOADING, SUCCESS, ERROR 3๋จ๊ณ๋ก ๋ณดํต ๋๋ค์๊ฐ ์ด๋ฃจ์ด์ง๋ค.
์๋ฅผ๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด , thunk์ ๊ธฐ๋ฅ์ ์ฌ๊ธฐ์ ๋๋๋ค.
๊ทธ๋ ๋ค๋ฉด Saga๋ฅผ ๋ ๋ง์ด ์ฐ์ด๋ ์ด์ ๋ ๋ญ๊น?
Saga์์๋ delay๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ,
์ค์๋ก ํด๋ฆญ์ ๋๋ฒํ์๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ ํด๋ฆญ์ ๋ฌด์ํ๊ณ , ๋ง์ง๋ง ํด๋ฆญ๋ง ์คํํ ์๋ ์๋ค.
์ด๋ฌํ๊ฒฝ์ฐ Front server์์ DDOS๊ณต๊ฒฉ์ ํ ์๋ ์๊ณ ,
์ต์ ์๊ฒฝ์ฐ Self -ddos๊ณต๊ฒฉ์ ํ ์๋ ์๋ค.
saga์ throttle์ ์ด์ฉํด ๊ทธ๊ฑธ ๋ง์์ ์์ผ๋ ํ๋ฒ ๋ฐฐ์๋ด์ผ ๊ฒ ๋ค.
next์์๋ saga์ ์ ์ฉ๋ฒ์ด ์กฐ๊ธ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋๋ฅผ ์ค์นํด์ฃผ์
๋ค์์ sagasํด๋ ์์ฑ
function* = generatorํจ์
generatorํจ์๋ .next()๋ฅผ ๋ถ์ฌ์ค์ผ ์คํ๋๋ค.
yeild๊ฐ ์๋๊ณณ์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ค๋จ์ ์ด ์๋ ํจ์์ด๋ค.
๊ทธ๋์ saga์์๋ while(true) ๋ฐ๋ณต๋ฌธ๋ ๋ฌดํ๋ฐ๋ณต์ด ๋์ง ์๋๋ค.
์ค์ ๋ก JS์์ ๋ฌดํ์ ๊ฐ๋ ์ ํํํ๊ณ ์ถ์ ๋ generator๋ฅผ ์ฌ์ฉํ๋ค.
๋ํ ํน์ ์ด๋ฒคํธ(.next())๊ฐ ์คํ๋์์๋ ์คํ๋๊ธฐ ๋๋ฌธ์ EventListner๋ก ๋ณผ์์๋ค.
saga์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ด gitbook์ ์๋ ๋ด์ฉ๊ณผ ๋์ผ
Last updated
Was this helpful?