Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- RTK
- springboot
- 티스토리챌린지
- Redux
- 오블완
- Chakra
- java
- javascript
- storybook
- hook
- designpatterns
- react-hook-form
- golang
- go
- React
- satisfiles
- ReactHooks
- Spring
- tanstackquery
- component
- test
- Gin
- css
- JPA
- backend
- frontend
- 웹애플리케이션서버
- JavaSpring
- typescript
Archives
- Today
- Total
bkdragon's log
Flux 패턴 본문
Flux는 사용자 입력을 기반으로 Action이 생성되고 Dispatcher 이를 받아와 해석한 후 Store(Model)의 데이터를 변경한 뒤 View에 반영하는 단방향의 흐름으로 애플리케이션을 만드는 아키텍처이다.
단방향으로 데이터 흐름을 일관성 있게 관리함으로 예측가능성을 높힌다.
Flux 는 세 가지 핵심 원칙을 기반으로 한다.
- 단방향 데이터 흐름 : Flux 애플리케이션의 데이터는 action, dispatcher, store, view로 한방향으로 흐른다. 이로 인해 데이터의 흐름을 체계적으로 유지하고 애플리케이션의 상태를 더 쉽게 추론할 수 있다.
- 중앙 집중식 제어 : 애플리케이션 상태의 제어는 dispatcher에서 중앙 집중식으로 이루어진다. dispatcher는 view에서 작업을 수신하여 적절한 장소로 보낸다. 이렇게 하여 상태 관리의 일관성을 유지할 수 있다.
- Immutable Data : Flux 애플리케이션의 데이터는 불변이다. 즉 상태를 직접 변경할 수 없다. 변경이 필요할 때 새 값을 생성하여 이전 상태가 대체된다. 변경 상태를 추척하고 데이터의 무결성을 유지하기 쉽다.
중앙 집중식 제어에 대해서 추가 설명을 덧붙이면, flux의 dispatcher는 MVC의 Controller 같은 역할이라고 볼 수 있다. 사용자 action을 감지하는 것도, store의 데이터를 조작하는 것도 dispatcher를 사용해야지만 가능하다.
Redux에 대한 이야기를 할 때 flux 패턴에 대한 이야기가 많이 나오지만 핵심 원칙에 일부는 React의 동작과도 닮아있다. 이 원칙들이 Redux의 인기 비결이 아닐까 싶다.
flux 동작 방식
- view : view는 사용자 인터페이스를 렌더링하고 사용자 캡쳐하는 역할을 한다. 사용자가 view와 상호 작용하면 action이 트리거 된다.
- action : action은 이벤트를 설명하는 javaScript 객체이다. action이 트리거 되면 dispatcher로 전송된다. 타입 프로퍼티가 포함되어있다.
- dispatcher : dispatcher는 flux 어플리케이션의 중앙 허브(controller)이다. view에서 action을 수신하여 적절한 store로 보낸다. view와 store 간에 직접적인 연결이 없도록 보장한다.
- store : 애플리케이션의 상태를 관리(저장)하는 저장소이다. dispatcher로 작업을 수신하고 그에 따라 상태를 업데이트 하고 변경되었음을 view에 알린다.
'concept' 카테고리의 다른 글
[Cookie] 내가 만든 Cookie (0) | 2023.07.26 |
---|---|
JavaScript 엔진이 await를 만났을 때 (0) | 2023.07.18 |
[TEST] MSW와 통합 테스트 (0) | 2023.07.12 |
[TEST] 프론트의 단위 테스트와 BDD (0) | 2023.07.09 |
[Test] Jest, React-testing-library (0) | 2023.07.07 |