[React] ๋์์ ํจ๊ณผ Algebraic Effect
TL;DR
- ์ ์
- ๋ถ์ ํจ๊ณผ๋ฅผ ์ถ์ํํ๋ ๋ฐฉ์ ์ค ํ๋
- ๋ถ์ ํจ๊ณผ๋ฅผ ๋ฐ์์ํค๋ ์ฐ์ฐ(Effect)๊ณผ ๊ทธ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ(Effect Handler)๋ก ๊ตฌ์ฑ
- ์ฝ๋ ๊ด๋ฆฌ ๋ฐฉ์
- ์ฝ๋ ์กฐ๊ฐ์ ๊ฐ์ธ๋ ๋งฅ๋ฝ(context)์ผ๋ก ์ฑ ์ ๋ถ๋ฆฌ
- ํน์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์๊ฒ ์ญํ ์์
- React์์ ๋์์ ํจ๊ณผ —
Suspense
,ErrorBoundary
- ๋ก๋ฉ UI, ์๋ฌ ํ์ ์ญํ ์ ํน์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ธ๋ ํํ๋ก ๋ถ๋ฆฌ
- ์์ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ๋ถ์ ํจ๊ณผ๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์บ์นํ๊ณ ์ฒ๋ฆฌ
- ๋์์ ํจ๊ณผ์ ์ฅ์
- ์์ํ์ง ์์ ๋์์ ๋ํ ์ฑ ์ ๋ถ๋ฆฌ
- ์ ์ธ์ (declarative) ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
- What๊ณผ How๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ํฅ์
๋์์ ํจ๊ณผ๋?
๋์์ ํจ๊ณผ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์ ์ค ํ๋๋ก, ๋ถ์ ํจ๊ณผ๋ฅผ ์ถ์ํํ์ฌ ์ฐ์ฐ(Effect)๊ณผ ๊ทธ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ(Effect Handler)๋ก ๊ตฌ์ฑ๋๋ค. ๋์์ ํจ๊ณผ์์ ์ฝ๋ ์กฐ๊ฐ์ ๊ฐ์ธ๋ ๋งฅ๋ฝ(context)์ผ๋ก ์ฑ ์์ ๋ถ๋ฆฌํ๋ค. ์ด๋ ํน์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์๊ฒ ์ญํ ์ ์์ํ๋ ๋ฐฉ์์ด๋ค.
React์์ Suspense
์ ErrorBoundary
๋ฅผ ์ด์ฉํด ๋ก๋ฉ UI์ ์๋ฌ ํ์ ์ญํ ์ ํน์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ ํํ๋ก ๋ถ๋ฆฌํ๋ค. ์ด ๊ฒฝ์ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ๋ถ์ ํจ๊ณผ๋ฅผ ์บ์นํ๊ณ ์ฒ๋ฆฌํ๋ค.
์ฆ, ๋์์ ํจ๊ณผ๋ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ ์ฌ์ด์ ์ธํฐ๋์ ์์ ๋ฐ์ํ๋ ์์ํ์ง ์์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ ์ ๊ทผ ๋ฐฉ์์ด๋ค. ์ด ํธ๋ค๋ฌ๋ฅผ ํตํด ๋ก์ปฌ ํจ์๊ฐ ๋ฐ์์ํจ ๋ถ์ ํจ๊ณผ๋ฅผ ๋ถ๋ชจ ํ๊ฒฝ์์ ์บ์นํ์ฌ ์ฒ๋ฆฌํ ํ, ๋ค์ ๋ก์ปฌ ํจ์๊ฐ ๋ฉ์ท๋ ๊ณณ์ผ๋ก ํ๋ฆ์ ๋๋๋ฆฐ๋ค.
์๋ฅผ๋ค์ด React์์ Suspense
์ ErrorBoundary
๋ฅผ ์ฌ์ฉํ์ ๋ ์์ ์ปดํฌ๋ํธ๊ฐ Promise๋ฅผ ๋์ง๊ฑฐ๋(throw Promise) ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ฉด, ๋ถ๋ชจ ์ปดํฌ๋ํธ์ธ Suspense
๋ ErrorBoundary
๊ฐ ์ด๋ฅผ ์บ์นํ์ฌ ์ฒ๋ฆฌํ๋ค. ๊ทธ ํ ์ดํ๋ฆฌ์ผ์ด์
ํ๋ฆ์ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ฉ์ท๋ ๊ณณ์ผ๋ก ๋๋๋ฆฐ๋ค.
์ด์ฒ๋ผ ๋์์ ํจ๊ณผ๋ ์ฝ๋ ์กฐ๊ฐ์ ๊ฐ์ธ๋ ๋งฅ๋ฝ์ ํตํด ์์ํ์ง ์์ ๋์์ ๋ํ ์ฑ ์์ ๋ถ๋ฆฌํ๋ค. ์ด๋ฌํ ์ฑ ์ ๋ถ๋ฆฌ ๋ฐฉ์์ ์ ์ธ์ (declarative)์ธ ์ฝ๋ ์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, React๊ฐ ์งํฅํ๋ ์ ๊ณผ ์ผ์นํ๋ค. What(๋ฌด์์ ํ ์ง)๊ณผ How(์ด๋ป๊ฒ ํ ์ง)๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๋ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค.
์ฐธ๊ณ ๊ธ
- Algebraic Effects for the Rest of Us | Overreacted
- Algebraic Effects of React Suspense | QANDA
- ์ถ์ํ๋ฅผ ์ํ ๋์์ ํจ๊ณผ(Algebraic Effect)์ React Suspense
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน (0) | 2024.05.18 |
---|---|
[JS] ์ ๊ท์์ ๊ทธ๋ฃนํ(Grouping) / ์บก์ฒํ(Capturing) ํ์ฉํ๊ธฐ (0) | 2024.05.18 |
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช ํ๊ธฐ (0) | 2024.05.18 |
[CS] ์ค๋ฒํค๋ / ํ๋ก์ธ์ค / ์ค๋ ๋ (1) | 2024.05.18 |
[JS] ๋ฌธ์ฅ, ๋จ์ด, ์์๋ณ๋ก ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ (0) | 2024.05.17 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน
2024.05.18 -
[JS] ์ ๊ท์์ ๊ทธ๋ฃนํ(Grouping) / ์บก์ฒํ(Capturing) ํ์ฉํ๊ธฐ
[JS] ์ ๊ท์์ ๊ทธ๋ฃนํ(Grouping) / ์บก์ฒํ(Capturing) ํ์ฉํ๊ธฐ
2024.05.18 -
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช ํ๊ธฐ
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช ํ๊ธฐ
2024.05.18 -
[CS] ์ค๋ฒํค๋ / ํ๋ก์ธ์ค / ์ค๋ ๋
[CS] ์ค๋ฒํค๋ / ํ๋ก์ธ์ค / ์ค๋ ๋
2024.05.18