일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 포토샵
- spring
- React.memo
- 상태
- 반응형 웹
- 강화학습
- c
- JSX
- grid
- CSS
- stl
- react
- pandas
- box-sizing
- useCallback
- c++
- REM
- 수학
- useMemo
- Photoshop
- SK바이오사이언스
- 알고리즘
- 미디어 쿼리
- Codility
- React 성능 최적화
- 통신사할인
- 소수
- skt membership
- 백준
- transform
- Today
- Total
sliver__
Redux 미들웨어(Middleware) 완벽 이해하기 – Redux Thunk로 비동기 처리하기 본문
Redux를 배우다 보면, 어느 순간 “그럼 API 요청 같은 비동기 작업은 어디서 처리하지?” 라는 의문이 생깁니다.
Reducer 안에서는 안 됩니다.
컴포넌트 안에서 처리? 가능은 하지만 깔끔하지 않습니다.
이때 등장하는 것이 바로 **Redux Middleware(미들웨어)**입니다.
Redux Middleware란 무엇인가?
Redux 미들웨어(Middleware) 는
액션(action)이 디스패치(dispatch)된 후, 리듀서(reducer)에 도달하기 전에 실행되는 함수입니다.
즉,
Action → Dispatch → (Middleware) → Reducer → Store 업데이트
이 흐름에서 중간(Middle) 단계에서 가로채 작업을 추가할 수 있는 ‘중간 관리자’ 역할을 합니다.
왜 미들웨어가 필요할까?
Redux는 기본적으로 **동기적(synchronous)**입니다.
즉, 액션을 디스패치하면 곧바로 상태(state)가 업데이트됩니다.
하지만 실제 앱에서는 API 호출, 타이머 설정, 로깅(logging) 같은 **비동기 작업(asynchronous)**이 필요합니다.
Reducer는 순수 함수(Pure Function)여야 하므로
Reducer 안에서 API 호출이나 비동기 작업을 하면 안 됩니다.
그렇다고 모든 API 호출을 컴포넌트에서 하면?
데이터 요청 로직이 여기저기 흩어져 유지보수가 어려워집니다.
이럴 때 Redux 미들웨어가 해답입니다.
Redux Thunk – 가장 많이 쓰는 미들웨어
Redux에서 가장 널리 쓰이는 비동기 처리 미들웨어가 Redux Thunk입니다.
Thunk란?
“지연된 작업을 감싼 함수”를 의미합니다.
액션 대신 함수를 디스패치할 수 있게 만들어 줍니다.
Redux Thunk 동작 방식
컴포넌트에서 **액션 대신 함수(Thunk 함수)**를 디스패치
Redux Thunk 미들웨어가 이 함수를 가로챔
Thunk 함수 안에서 API 요청 실행
데이터가 도착하면 **정상적인 액션(dispatch)**을 실행해 상태 업데이트
Thunk 사용 예제 (동작 흐름)
기존 Redux 동기 액션
dispatch({ type: 'FETCH_POSTS', payload: posts });
📌 Thunk로 비동기 처리
const fetchPosts = () => async (dispatch) => {
const response = await fetch('/api/posts');
const data = await response.json();
// 데이터가 도착한 후 액션을 디스패치
dispatch({ type: 'FETCH_POSTS', payload: data });
};
➡️ 결과적으로 컴포넌트는 이렇게 간단해집니다:
dispatch(fetchPosts());
👉 API 요청 로직은 Thunk 안에 캡슐화, 컴포넌트는 깨끗하고 단순해집니다.
Redux 미들웨어로 할 수 있는 일
비동기 API 요청 (Redux Thunk)
액션 로깅(logging) – 액션이 언제/어디서 발생했는지 기록
액션 차단/취소 – 조건에 따라 액션이 reducer로 넘어가는 걸 막음
타이머/지연 처리 (setTimeout, setInterval)
즉, **모든 사이드 이펙트(side effects)**는 미들웨어에서 처리하는 게 원칙입니다.
정리
- Redux는 동기적이기 때문에, 비동기 처리를 위해 미들웨어가 필요하다.
- Middleware는 dispatch와 reducer 사이에서 실행된다.
- Redux Thunk는 비동기 API 요청을 가장 많이 처리하는 미들웨어다.
- Thunk 함수는 액션 대신 ‘함수’를 디스패치할 수 있게 해준다.
다음 글에서는 Redux Thunk 설치와 실제 프로젝트에 적용하는 방법을 코드와 함께 다뤄보겠습니다.
'Frontend > React' 카테고리의 다른 글
Redux vs Context API – 어떤 전역 상태 관리 도구를 선택해야 할까? (2) | 2025.07.26 |
---|---|
Redux Toolkit 완벽 가이드 – 왜 현대 Redux는 Toolkit을 써야 할까? (0) | 2025.07.26 |
Redux 완벽 이해하기: 개념부터 작동 원리까지 (0) | 2025.07.26 |
React useEffect 완벽 가이드: 의존성 배열부터 오용 방지까지 (0) | 2025.07.24 |
React 번들 크기 줄이기 완전 정복: 코드 스플리팅과 lazy 로딩 적용법 (0) | 2025.07.24 |