
ํ๋ก์ฐ(Flow), ํ๋ญ์ค(Flux), ์ค๋ ๋(Thread) ์ฝ๊ฒ ์ ๋ฆฌํด๋๋ฆด๊ฒ์!
์๋ง ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ฑ ๊ตฌ์กฐ ์ด์ผ๊ธฐ์์ ๋ง์ด ๋ฑ์ฅํ๋ ๊ฐ๋
๋ค์ด๋ผ ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์ด ์ฉ์ด๋ค์
๋๋ค.
ํ๊ตญ ๋ถ๋ค์ด ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋น์ ์ค์ฌ์ผ๋ก ์ ๋ฆฌํด๋๋ฆด๊ฒ์.
๐ 1. ํ๋ก์ฐ(Flow)
“๋ฐ์ดํฐ๊ฐ ์๊ฐ ํ๋ฆ์ ๋ฐ๋ผ ํ๋ฌ๊ฐ๋ ํ์ดํ๋ผ์ธ”์ด๋ผ๊ณ ์ดํดํ์๋ฉด ๊ฐ์ฅ ์ฝ์ต๋๋ค.
โ ์ด๋ค ์ํฉ์์ ์ฐ์ผ๊น?
- Kotlin Coroutines์์ Flow
- ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ ์ฒ๋ฆฌํ ๋
- ์ด๋ฒคํธ๊ฐ ๊ณ์ ๋ฐ์ํ๋ ๊ตฌ์กฐ(๋ก๊ทธ์ธ ์ด๋ฒคํธ, ํด๋ฆญ ์ด๋ฒคํธ ๋ฑ)
โ ํ๊ตญ์ ๋น์
ํฐ๋น(TV)์์ ์ค์๊ฐ ๋ฐฉ์ก์ด ๊ณ์ ํ๋ฌ์ค๋ ๋๋!
๋ด๊ฐ ์ํ๋ฉด ์ค๊ฐ์ ๊ตฌ๋
์ ๋๊ฑฐ๋ ๋ค์ ๋ค์ ์ ์์ด์.
๐ 2. ํ๋ญ์ค(Flux)
Flux๋ ๋ฆฌ์กํฐ๋ธ(Reactive) ํ๋ก๊ทธ๋๋ฐ์์ ์ฐ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ ๋ชจ๋ธ์ ํ ์ข
๋ฅ์
๋๋ค.
ํนํ **Project Reactor(์คํ๋ง WebFlux)**์์ ๋ง์ด ๋ฑ์ฅํฉ๋๋ค.
โ ํน์ง
- ์๊ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ ค๋ณด๋ด๋ ์คํธ๋ฆผ
- “๋น๋๊ธฐ + ๋ ผ๋ธ๋กํน” ๋ฐฉ์
- Backpressure(์์ฒญ๋ ์กฐ์ ) ์ง์
โ ํ๊ตญ์ ๋น์
๋ฐฐ๋ฌ์ฑ์์ ์ค์๊ฐ์ผ๋ก ์ฃผ๋ฌธ ์ํ๊ฐ ์
๋ฐ์ดํธ๋๋ ๊ฒ์ฒ๋ผ
“์ญ์ญ ๋์ฐฉํ๋ ์ฌ๋ฌ ์ด๋ฒคํธ”๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์
๋๋ค.
๐งต 3. ์ค๋ ๋(Thread)
์ค๋ ๋๋ ํ๋์ ํ๋ก๊ทธ๋จ ์์์ ์คํ๋๋ ์์ ๋จ์์ ๋๋ค.
โ ํต์ฌ ๊ฐ๋
- CPU๊ฐ ์ค์ ๋ก ์ผ์ ์ฒ๋ฆฌํ๋ ์ต์ ๋จ์
- ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๋ง๋ค์ด ‘๋์์ ์ผํ๋ ๊ฒ์ฒ๋ผ’ ๋ณด์ด๊ฒ ํ ์ ์์(๋ณ๋ ฌ ๋๋ ๋ณํ ์ฒ๋ฆฌ)
โ ํ๊ตญ์ ๋น์
ํ์ฌ(ํ๋ก๊ทธ๋จ) ์์ ์๋ ์ฌ๋ฌ ๋ช
์ ์ง์(์ค๋ ๋)์ด ๊ฐ์ ์ผ์ ๋๋์ด ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ง์์ด ๋ง์์๋ก ์ผ์ ๋นจ๋ฆฌ ํ ์ ์์ง๋ง, ๊ด๋ฆฌ ๋น์ฉ๋ ๋์ด๋์ฃ .
๐ ์์ฝ ์ ๋ฆฌ
| Flow | ์๊ฐ์ ๋ฐ๋ผ ํ๋ฌ์ค๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ | TV ์๋ฐฉ์ก |
| Flux | ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ์คํธ๋ฆผ, ๋น๋๊ธฐ/๋ ผ๋ธ๋กํน | ๋ฐฐ๋ฌ ์ํ๊ฐ ๊ณ์ ์ ๋ฐ์ดํธ๋จ |
| Thread | CPU๊ฐ ์คํํ๋ ์์ ๋จ์ | ํ์ฌ ์ง์๊ฐ์ด ๋์์ ์ผํ๋ ๋จ์ |
1๏ธโฃ ํ๋ก์ฐ (Flow)
**ํ๋ก์ฐ(Flow)**๋ ์ฃผ๋ก ๋ฐ์ดํฐ์ ์์ง์์ด๋ ํ๋ก๊ทธ๋จ์ ์คํ ๊ฒฝ๋ก๋ฅผ ์ค๋ช ํ๋ ์ผ๋ฐ์ ์ธ ์ฉ์ด์ ๋๋ค.
- ๋ฐ์ดํฐ ํ๋ฆ (Data Flow): ํ๋ก๊ทธ๋จ์ ํ ๋ถ๋ถ์์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๋ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ก ์ ์ก๋๊ณ ์ฒ๋ฆฌ๋๋ ์ผ๋ จ์ ๊ณผ์ ์ ์ฒด๋ฅผ ๋ฐ์ดํฐ ํ๋ก์ฐ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
- ์ ์ด ํ๋ฆ (Control Flow): ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ ์คํ๋๋ ์์๋ฅผ ์๋ฏธํ๋ฉฐ, if-else ๊ตฌ๋ฌธ, for ๋ฃจํ, ํจ์ ํธ์ถ ๋ฑ์ ํตํด ์ ์ด๋ฉ๋๋ค.
- ์ ์ ํ์ ์ฒด์ปค (Static Type Checker): ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ์์๋ ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ Flow๋ผ๋ ์ด๋ฆ์ ์ ์ ํ์ ๊ฒ์ฌ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์ ์ฌ์ ์ธ ํ์ ์ค๋ฅ๋ฅผ ์ฐพ์๋ด๋ ์ญํ ์ ํฉ๋๋ค.
2๏ธโฃ ํ๋ญ์ค (Flux)
**ํ๋ญ์ค(Flux)**๋ ๋ฆฌ์กํธ(React)๋ฅผ ๋ง๋ ํ์ด์ค๋ถ์์ ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ(State) ๊ด๋ฆฌ๋ฅผ ์ํด ๋์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ ํจํด์ ๋๋ค.
- ํต์ฌ: **๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ(Unidirectional Data Flow)**์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
- ๊ตฌ์ฑ ์์:
- Action: ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ค๋ช ํฉ๋๋ค.
- Dispatcher: Action์ ๋ชจ๋ Store์ ๋ถ๋ฐฐํ๋ ์ค์ ํ๋ธ์ ๋๋ค.
- Store: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํฉ๋๋ค.
- View (React Component): Store์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ , ์ฌ์ฉ์ ์ ๋ ฅ์ Action์ผ๋ก ๋ฐ์์ํต๋๋ค.
Redux์ ๊ฐ์ ํ๋์ ์ธ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด Flux ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ ํ์ต๋๋ค.
3๏ธโฃ ์ค๋ ๋ (Thread)
**์ค๋ ๋(Thread)**๋ **์ด์์ฒด์ (OS)**์ CPU ๊ด์ ์์ ํ๋ก๊ทธ๋จ์ด ์์ ์ ์ํํ๋ ๊ฐ์ฅ ์์ ์คํ ๋จ์์ ๋๋ค.
- ํ๋ก์ธ์ค(Process) vs. ์ค๋ ๋:
- ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ๋ก๋ถํฐ ์์(๋ฉ๋ชจ๋ฆฌ, ํ์ผ ๋ฑ)์ ํ ๋น๋ฐ์ ์คํ๋๋ ํ๋ก๊ทธ๋จ ์์ฒด์ ๋จ์์ ๋๋ค.
- ์ค๋ ๋๋ ํ ๋น๋ ํ๋ก์ธ์ค ๋ด์์ ์ค์ ์ฝ๋ ์คํ์ ๋ด๋นํ๋ ๋จ์์ ๋๋ค. ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค (๋ฉํฐ์ค๋ ๋ฉ).
- ํน์ง:
- ์ค๋ ๋๋ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ๋ค๋ฅธ ์ค๋ ๋๋ค๊ณผ **๋ฉ๋ชจ๋ฆฌ ์์ญ(ํ ์์ญ ๋ฑ)**์ ๊ณต์ ํ๋ฏ๋ก, ๋ฐ์ดํฐ ๊ณต์ ๋ฐ ํต์ ์ด ๋น ๋ฆ ๋๋ค.
- ์ค๋ ๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ์ฌ ๋์์ ์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ฉํฐ์ค๋ ๋ฉ์ด๋ผ๊ณ ํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์๋ต์ฑ์ ํฅ์์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ค๋ง, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ๋์์ ์ ๊ทผํ ๋ ๋๊ธฐํ(Synchronization) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
๐ ์์ฝ ๋น๊ต
| ์ฉ์ด | ๊ฐ๋ | ์ฃผ์ ์ญํ | ๊ด๋ จ ๊ธฐ์ /๋ถ์ผ |
| ํ๋ก์ฐ (Flow) | ๋ฐ์ดํฐ์ ์์ง์ ๋๋ ์ฝ๋์ ์คํ ๊ฒฝ๋ก | ์ ๋ณด์ ์ ๋ฌ/ํ๋ก๊ทธ๋จ ์คํ ์์ ์ ์ | ์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ, ๋ฐ์ดํฐ ์์ง๋์ด๋ง, ํ์ ๊ฒ์ฌ (Flow.js) |
| ํ๋ญ์ค (Flux) | ์น ์ฑ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ์ํคํ ์ฒ ํจํด | ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ํตํ ์ํ ๊ด๋ฆฌ | React, ์น ํ๋ก ํธ์๋ (Redux์ ๊ทผ๊ฐ) |
| ์ค๋ ๋ (Thread) | CPU ์์ ์ ๊ฐ์ฅ ์์ ์คํ ๋จ์ | ๋์์ฑ(Concurrency) ๋ฐ ๋ณ๋ ฌ์ฑ(Parallelism) ๊ตฌํ | ์ด์์ฒด์ , ๋ฉํฐ์ฝ์ด ํ๋ก๊ทธ๋๋ฐ, ์๋ฐ/C++ ๋ฑ |
## ์ ๋ฆฌ
Flux๋?
- ๋ฆฌ์กํธ ์ํ ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ์ด์ค๋ถ์ด ๋ง๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ๊ตฌ์กฐ
- Action → Dispatcher → Store → View ํํ
- ํ์ฌ๋ Redux ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฒ ํ์ด ๊ณ์น๋จ
๐ Flux์ ํต์ฌ: ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ (Unidirectional Data Flow)
์ ํต์ ์ธ MVC(Model-View-Controller) ์ํคํ ์ฒ์์ ๋ฐ์ํ๋ ๋ณต์กํ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ ๋ฐ์ดํฐ ํ๋ฆ์ ์์ธก ๋ถ๊ฐ๋ฅ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, Flux๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ํต์ฌ์ผ๋ก ์ผ์ต๋๋ค.
๋ฐ์ดํฐ๋ ํญ์ Action → Dispatcher → Store → View์ ํ ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅด๋ฉฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์์ธก ๊ฐ๋ฅํ๊ณ ๋๋ฒ๊น ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
๐๏ธ Flux ์ํคํ ์ฒ์ ๋ค ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์
Flux ์ํคํ ์ฒ๋ ๋ค์ ๋ค ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- Action (์ก์
)
- ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๋๋ค.
- ์ฌ์ฉ์์ ์ํธ์์ฉ(์: ๋ฒํผ ํด๋ฆญ)์ด๋ ์์คํ ์ด๋ฒคํธ์ ์ํด ๋ฐ์ํฉ๋๋ค.
- type๊ณผ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ(payload)๋ฅผ ํฌํจํฉ๋๋ค.
- Action Creator๋ฅผ ํตํด ์์ฑ๋์ด Dispatcher๋ก ์ ๋ฌ๋ฉ๋๋ค.
- Dispatcher (๋์คํจ์ฒ)
- Flux ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ํ๋ธ ์ญํ ์ ํฉ๋๋ค.
- ๋ชจ๋ Action์ ์์ ํ๊ณ , ์ด Action์ **๋ฑ๋ก๋ ๋ชจ๋ Store**์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- Store ๊ฐ์ ์์กด์ฑ ๊ด๋ฆฌ๋ ์ฝ๋ฐฑ ์คํ ์์๋ฅผ ์ ์ดํ๋ ๊ธฐ๋ฅ๋ ์ํํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๋ด์ **๋จ ํ๋(Singleton)**๋ง ์กด์ฌํฉ๋๋ค.
- Store (์คํ ์ด)
- ์ ํ๋ฆฌ์ผ์ด์ ์ **์ ์ฒด ์ํ(State)**์ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ณณ์ ๋๋ค.
- Dispatcher๋ก๋ถํฐ Action์ ๋ฐ์ผ๋ฉด, ํด๋น Action์ด ์์ ๊ณผ ๊ด๋ จ๋ ๊ฒ์ธ์ง ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ํ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ์์ ์๊ฒ ์ฐ๊ฒฐ๋ View์๊ฒ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ ์๋ฆฝ๋๋ค.
- ์ํ ๋ณ๊ฒฝ์ ์ค์ง Action์ ํตํด์๋ง ๊ฐ๋ฅํ๋ฉฐ, View์์ Store๋ก ์ง์ ์ํ ๋ณ๊ฒฝ์ ์์ฒญํ ์ ์์ต๋๋ค.
- View (๋ทฐ)
- ๋ฆฌ์กํธ์์๋ ์ฃผ๋ก ์ปดํฌ๋ํธ์ ํด๋นํฉ๋๋ค.
- Store์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋๋ค.
- Store์์ ์ํ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ฉด, ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํ๋ฉด์ ๋ฆฌ๋ ๋๋งํฉ๋๋ค.
- ์ฌ์ฉ์์ ์ ๋ ฅ(์ด๋ฒคํธ)์ด ๋ฐ์ํ๋ฉด, ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Action์ ์์ฑํ์ฌ Dispatcher๋ก ๋ณด๋ ๋๋ค. (์ด๋ ์ต์์ View๋ฅผ Controller View๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํฉ๋๋ค.)
๐ก Flux์ ์์ ๋ฐ Redux์์ ๊ด๊ณ
Flux๋ ์ํ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ช ํํ๊ฒ ๋ง๋ค์์ง๋ง, ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌํํด์ผ ํ๋ ๋ถ๋ด์ด ์์์ต๋๋ค.
์ดํ **Redux(๋ฆฌ๋์ค)**์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Flux ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, Dispatcher์ Store์ ์ญํ ์ ํตํฉํ๊ณ Reducer๋ผ๋ ๊ฐ๋ ์ ๋์ ํ์ฌ ์ํ ๊ด๋ฆฌ๋ฅผ ๋์ฑ ์๊ฒฉํ๊ณ ์์ธก ๊ฐ๋ฅํ๊ฒ ํ์คํํ์ต๋๋ค.
์ฐ๋ฆฌํ์ ai์์ด์ ํธ๊ฐ 5๊ฐ ์ ๋ ๋๊ณ , ์คํ๋ง ๋ง์ดํฌ๋ก ์๋น์ค๊ฐ 7๊ฐ ์ ๋ ๋๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ , ๋ฅ์คํธ js๋ฅผ ์ฌ์ฉ์ค์ด์ผ. ์ด๋ redux,์ zustand์ค์์ ๋๋ผ๋ฉด ์ด๋ค ๊ฒ์ผ๋ก ๊ฐ๋ฐํ ๊ฑฐ์ผ? ์ํฝ์ ์๋ ค์ค
๐ฅ ๊ฒฐ๋ก ๋ถํฐ: ๋๋ ์ด ์ํฉ์ด๋ฉด Zustand๋ฅผ ์ํฝ์ผ๋ก ์ ํํฉ๋๋ค.
๋น์ ์ด ๋งํ ํ๋ก์ ํธ ํน์ฑ(๋ค์์ AI ์์ด์ ํธ + 7๊ฐ์ ์คํ๋ง ๋ง์ดํฌ๋ก์๋น์ค + Next.js ๊ธฐ๋ฐ ํ๋ก ํธ)์ ๋ณด๋ฉด, Redux๋ณด๋ค Zustand๊ฐ ํจ์ฌ ์ ํฉํฉ๋๋ค. ์ด์ ๋ฅผ ํ๊ตญ ๊ฐ๋ฐ์ ๊ด์ ์ผ๋ก ์ค์ ์ ์ผ๋ก ์ ๋ฆฌํด๋๋ฆด๊ฒ์.
## โ ์ “Zustand”๊ฐ ๋ ์ ๋ง๋๊ฐ? (์ํฝ ์ด์ )
### 1) AI·MSA ํ๊ฒฝ์์๋ ์ํ๊ฐ ๊ฐ๋ณ๊ณ ์ ์ฐํด์ผ ํจ
AI ์์ด์ ํธ 5๊ฐ, MSA 7๊ฐ๋ฉด ํต์ ํฌ์ธํธ๊ฐ ๋ง๊ณ ์ํ๊ฐ ์กฐ๊ฐ๋ ์์ →
→ Redux์ฒ๋ผ ๋ฌด๊ฑฐ์ด ๊ธ๋ก๋ฒ ์คํ ์ด + Reducer ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๋ฉด ์ ์ง ๋น์ฉ ํญ์ฆ.
Zustand๋:
- ์คํ ์ด๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ์ฝ๊ฒ ๋ถ๋ฆฌ
- ๋น์ฆ๋์ค ๋๋ฉ์ธ๋ณ store ์ค๊ณ๊ฐ ์ฌ์
- boilerplate ๊ทนํ ์ ์
→ AI + MSA ์กฐํฉ์ ์ต์ ํ๋ ๊ตฌ์ฑ
### 2) Next.js์์๋ Server/Client ๊ฒฝ๊ณ๊ฐ ์ค์ → Zustand๊ฐ ํจ์ฌ ์์ ์
Next.js ํ๊ฒฝ(ํนํ App Router)์์๋:
- Hydration mismatch
- ํด๋ผ์ด์ธํธ ์ ์ฉ ์ํ
- ์๋ฒ ์ปดํฌ๋ํธ์์ ๊ฒฝ๊ณ
์ด๋ฐ ์ด์๊ฐ ๋งค์ฐ ์์ฃผ ๋ฐ์ํฉ๋๋ค.
Zustand๋:
- ํด๋ผ์ด์ธํธ ์ ์ฉ ์ํ๋ง ๋ฐ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ฌ์
- SSR ์ง์์ด ์์ฐ์ค๋ฝ๊ณ , RSC ํ๊ฒฝ์์๋ ์์ ์
- Redux๋ณด๋ค ์ค์ ์ด ํจ์ฌ ๊ฐ๋จ
→ Next.js + Zustand ์กฐํฉ์ ์ด๋ฏธ ์ปค๋ฎค๋ํฐ ์ ์ ํจํด
### 3) Redux๋ ๋๋ฌด ๋ฌด๊ฒ๊ณ ๋ณต์ก — ์ ์ง๋ณด์ ๊ณ ๋ฏผ
Redux Toolkit(RTK)์ ์ฐ๋ฉด ๋ง์ด ๋จ์ํด์ง์ง๋ง ์ฌ์ ํ…
- Slice ๊ด๋ฆฌ
- Middleware ๊ตฌ์ฑ
- Immer ์ฌ์ฉ
- ํ์ ์ ์
- Boilerplate
- Action/Reducer ๊ตฌ์กฐ
์ด ๋ชจ๋ ๊ฒ ์ฅ๊ธฐ ํ๋ก์ ํธ์์ ๋์ ํผ๋ก๋ก ๋ค๊ฐ์ต๋๋ค.
Zustand๋:
- ๋จ์ผ ํ์ผ์ store ํ๋
- ๊ฐ๋จํ ํจ์ํ API
- selector๋ก ์ฑ๋ฅ ์ต์ ํ ์ฌ์
ํ ์ ์ฒด ์์ฐ์ฑ๊ณผ ์๋๋ฅผ ์ฌ๋ฆฌ๋ ค๋ฉด Zustand๊ฐ ํจ์ฌ ์ ๋ฆฌํฉ๋๋ค.
### 4) AI ์์ด์ ํธ ๊ธฐ๋ฐ UI๋ ๋น๋๊ธฐ ์ํ๊ฐ ํต์ฌ → Zustand๊ฐ ์ ๋ฆฌ
AI ์ค์ฌ UI์์๋:
- ๋ก๋ฉ ์ํ
- ์คํธ๋ฆฌ๋ฐ ์๋ต
- ๋ฉํฐ ์์ด์ ํธ ์ํ
- ๋ค์ํ ์์ด์ ํธ ๊ฐ ์ปจํ ์คํธ ๊ณต์
- ๋น๋๊ธฐ ํ๋ฆ(loading, error, partial result)
์ด๋ฐ “์์ฃผ ๋ฐ๋๋ ์ํ”๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
Zustand๋:
- ๋น๋๊ธฐ ํ๋ฆ ์ ์ด๊ฐ ๋งค์ฐ ์ฌ์
- ๊ฐ๋ฐ์๊ฐ ์ง์ store ํจ์๋ฅผ ์ปค์คํ ๊ฐ๋ฅ
- redux-thunk, redux-saga ๊ฐ์ middleware๊ฐ ํ์ ์์
→ AI ์์ด์ ํธ UI ๊ตฌํ์ด ํจ์ฌ ๊น๋ํด์ง
### 5) ์ ์ ํ ์ธ๋ ฅ·๋น ๋ฅธ ์๋ → Zustand๊ฐ ํ ํจ์จ ๊ทน๋ํ
Redux๋ ํ ๋ด๋ถ “Redux ๋ฅ์๋” ๋ฐ๋ผ ๋์ด๋ ํธ์ฐจ๊ฐ ํผ.
Zustand๋ ๋ฐฐ์ฐ๋ ์๊ฐ์ด ์๋์ ์ผ๋ก ์งง์์ ํ ์จ๋ณด๋ฉ์ด ๋น ๋ฆ.
“10๋ถ ์ค๋ช → ๋ฐ๋ก ๊ฐ๋ฐ ๊ฐ๋ฅ” ์์ค
Redux๋ ์ต์ 1~2์๊ฐ ๊ตฌ์กฐ ์ค๋ช ํ์
## ๐ ์ถ๊ฐ๋ก ์ค์ํ ํฌ์ธํธ
ํ๋ก์ ํธ ์ค๋ช ์ ๋ณด๋ฉด ํ๋ก ํธ๋ ์ํ๊ฐ ๋ณต์กํ์ง๋ง ํฌ๊ฒ ๋ฌด๊ฒ์ง๋ ์์ ํํ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
- API ํธ์ถ ๊ฒฐ๊ณผ ์ ์ฅ
- AI ์๋ต ์คํธ๋ฆผ ๊ด๋ฆฌ
- ์ปดํฌ๋ํธ ๊ฐ ๊ณต์ ๋๋ UI ์ํ
- ์์ด์ ํธ ๊ฐ ๊ฒฐ๊ณผ ๋ณํฉ
- ์ฌ๋ฌ ์๋ฒ์์ ์ค๋ ์๋ต ๋ณ๋ ฌ ์ฒ๋ฆฌ
→ ์ด๋ฐ ํํ๋ Redux์ ๋ํฌ๋ก ํฐ ์ ์ก๋ ์์ด ๋ฉ๋๋ค.
→ Zustand์ ๊ฐ๋ฒผ์ด ํํ๊ฐ ํจ์ฌ ์์ฐ์ค๋ฝ์ต๋๋ค.
## ๐ฏ ๊ฒฐ๋ก : Zustand ์ํฝ ์ ํ ๊ทผ๊ฑฐ ํ ์ค ์์ฝ
AI + MSA + Next.js ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ·์ ์ฐ์ฑ·์์ฐ์ฑ·SSR ๊ณ ๋ ค ์ธก๋ฉด์์ Redux๋ณด๋ค Zustand๊ฐ ํจ์ฌ ์ ํฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ผ๋ฉด 100% ์ํ ๊ด๋ฆฌ๋ Zustand๋ก ๊ฐ๋๋ค.
Redux๋ฅผ ์ ํํ ์ด์ ๋ ์ด ๊ตฌ์กฐ์์๋ ๊ฑฐ์ ์์ต๋๋ค.
์ํ๋ค๋ฉด ์ด ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๋ง๋ Zustand ์ํ ๋ชจ๋ธ๋ง ์์๋ ๋ง๋ค์ด ๋๋ฆด๊ฒ์!
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 32์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.21 |
|---|---|
| 31์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.20 |
| 29์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.18 |
| 28์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.17 |
| 27์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.14 |