728x90
"Flux 아키텍처 완벽 이해: React 애플리케이션 상태 관리의 기초"
1시간 분량 강의안 (Flux 기초)
강의 목표
- Flux 아키텍처의 개념과 필요성을 이해한다.
- Flux의 주요 구성 요소(스토어, 디스패처, 액션, 뷰)를 학습한다.
- Flux를 활용하여 React 애플리케이션의 상태 관리를 구현한다.
강의 목차
1. Flux란 무엇인가? (10분)
Flux의 정의
- Flux는 Facebook에서 제안한 React 애플리케이션을 위한 아키텍처 패턴으로, 단방향 데이터 흐름을 기반으로 설계되었습니다.
Flux의 주요 특징
- 단방향 데이터 흐름: 데이터가 항상 한 방향으로 흐르며, 상태 관리가 예측 가능.
- 컴포넌트 간 독립성: 컴포넌트가 상태 대신 데이터를 받기 때문에 독립적이고 재사용 가능.
- 중앙 집중식 상태 관리: 상태가 중앙 저장소(Store)에 관리되어 상태 변경 추적이 용이.
Flux의 구성 요소
- Action: 상태 변경을 요청하는 명령.
- Dispatcher: Action을 Store로 전달하는 중앙 허브.
- Store: 상태와 로직을 관리하는 컨테이너.
- View: Store의 데이터를 기반으로 UI를 렌더링.
2. Flux의 데이터 흐름 (10분)
Flux 데이터 흐름
- Action: 이벤트 발생 시 액션을 생성.
- Dispatcher: 액션을 Store에 전달.
- Store: 액션을 처리하고 상태를 업데이트.
- View: 상태 변경을 감지하여 UI를 업데이트.
Flux와 MVC의 차이점
특징FluxMVC
데이터 흐름 | 단방향 데이터 흐름 | 양방향 데이터 흐름 |
상태 관리 | Store에서 중앙 관리 | 여러 Model에서 분산 관리 |
복잡도 | 단순하고 예측 가능 | 복잡하고 의존성 증가 |
3. Flux의 주요 구성 요소 구현 (20분)
1단계: Action 생성
- 액션은 상태 변경 요청을 나타내는 객체.
const Actions = {
increment: () => {
Dispatcher.dispatch({
type: 'INCREMENT',
});
},
decrement: () => {
Dispatcher.dispatch({
type: 'DECREMENT',
});
},
};
2단계: Dispatcher 설정
- Dispatcher는 액션을 Store로 전달하는 역할.
import { Dispatcher } from 'flux';
const AppDispatcher = new Dispatcher();
export default AppDispatcher;
3단계: Store 생성
- Store는 상태를 관리하고 변경 사항을 View에 알림.
import { EventEmitter } from 'events';
import AppDispatcher from './AppDispatcher';
const Store = Object.assign({}, EventEmitter.prototype, {
count: 0,
getCount() {
return this.count;
},
handleAction(action) {
switch (action.type) {
case 'INCREMENT':
this.count++;
this.emit('change');
break;
case 'DECREMENT':
this.count--;
this.emit('change');
break;
default:
break;
}
},
});
AppDispatcher.register(Store.handleAction.bind(Store));
export default Store;
4단계: View에서 Store 사용
- View는 Store 데이터를 구독하고 변경 시 UI를 업데이트.
import React, { useState, useEffect } from 'react';
import Store from './Store';
import Actions from './Actions';
function Counter() {
const [count, setCount] = useState(Store.getCount());
useEffect(() => {
const handleChange = () => setCount(Store.getCount());
Store.on('change', handleChange);
return () => {
Store.removeListener('change', handleChange);
};
}, []);
return (
<div>
<p>Count: {count}</p>
<button onClick={Actions.increment}>Increment</button>
<button onClick={Actions.decrement}>Decrement</button>
</div>
);
}
export default Counter;
4. Flux 활용 사례 및 비교 (10분)
Flux 활용 사례
- Flux는 단방향 데이터 흐름이 필요한 대규모 애플리케이션에서 주로 사용됩니다.
- Redux와 MobX의 설계 철학에 영향을 미친 패턴입니다.
Flux와 Redux 비교
특징FluxRedux
Dispatcher 사용 여부 | 사용 | 사용하지 않음 |
Store | 여러 Store | 단일 Store |
데이터 흐름 | 단방향 데이터 흐름 | 단방향 데이터 흐름 |
Boilerplate 코드 | 상대적으로 많음 | 상대적으로 간결함 |
5. 실습 과제 (10분)
실습 과제
- Flux 패턴을 사용하여 Todo 애플리케이션을 구현하세요.
- Todo 항목을 추가, 완료 표시, 삭제하는 액션과 Store를 작성하세요.
- 변경 사항을 View에서 반영하세요.
예제
- 액션 예제:
const Actions = { addTodo: (text) => { Dispatcher.dispatch({ type: 'ADD_TODO', text, }); }, };
- Store 예제:
const Store = Object.assign({}, EventEmitter.prototype, {
todos: [],
handleAction(action) {
switch (action.type) {
case 'ADD_TODO':
this.todos.push({ text: action.text, completed: false });
this.emit('change');
break;
default:
break;
}
},
});
6. Q&A 및 정리 (10분)
- Q&A:
- Flux와 Redux의 주요 차이점은 무엇인가요?
- Flux는 어떤 규모의 애플리케이션에서 적합한가요?
- 요약:
- Flux는 React 애플리케이션에서 단방향 데이터 흐름을 관리하기 위한 강력한 패턴입니다.
- Action, Dispatcher, Store, View의 구성 요소를 이해하고 활용하면 상태 관리를 효율적으로 구현할 수 있습니다.
- Redux와 같은 현대적인 상태 관리 도구의 기초가 되는 개념입니다.
728x90
'React > React Core' 카테고리의 다른 글
17.React Context API로 상태 관리하기: Props Drilling 없이 데이터 공유 (2) | 2024.12.09 |
---|---|
16.Jotai로 배우는 React 상태 관리: 최소화된 경량 상태 관리 솔루션 (0) | 2024.12.03 |
15.React Query로 서버 상태 관리하기: 효율적인 데이터 페칭과 캐싱 (3) | 2024.12.02 |
14.Zustand로 배우는 경량 상태 관리: 간단하고 빠른 React 상태 관리 솔루션 (0) | 2024.12.02 |
13.Recoil로 배우는 React 상태 관리: 간단하고 강력한 최신 상태 관리 라이브러리 (0) | 2024.12.02 |