experimental_useSubscription ํ ์ ์ฌ์ฉํ์ฌ ๊ณ ์ฑ๋ฅ์ ๊ธ๋ก๋ฒ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ React ๋ฐ์ดํฐ ๊ตฌ๋ ์ต์ ํ ์ฌ์ธต ๊ฐ์ด๋์ ๋๋ค.
React experimental_useSubscription ๊ด๋ฆฌ ์์ง: ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ตฌ๋ ์ต์ ํ
React ์ํ๊ณ๋ ๋์์์ด ์งํํ๋ฉฐ, ๊ฐ๋ฐ์๋ค์๊ฒ ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์๋ ์๋ก์ด ๋๊ตฌ์ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ์ค ํ๋๊ฐ experimental_useSubscription
ํ
์ผ๋ก, React ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ ๊ตฌ๋
์ ๊ด๋ฆฌํ๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์์ง ์คํ ๋จ๊ณ์ธ ์ด ํ
์ ์ ๊ตํ ๊ตฌ๋
์ต์ ํ ์ ๋ต์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ํนํ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ฉํฉ๋๋ค.
๊ตฌ๋ ์ต์ ํ์ ํ์์ฑ ์ดํดํ๊ธฐ
ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปดํฌ๋ํธ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ตฌ๋ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ ์์ค๋ ๊ฐ๋จํ ์ธ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์๋ถํฐ GraphQL์ด๋ REST์ ๊ฐ์ ๊ธฐ์ ์ ํตํด ์ ๊ทผํ๋ ๋ณต์กํ ๋ฐฑ์๋ API๊น์ง ๋ค์ํฉ๋๋ค. ์ต์ ํ๋์ง ์์ ๊ตฌ๋ ์ ์ฌ๋ฌ ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค:
- ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง: ๊ตฌ๋ ํ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์์๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ด CPU ์ฃผ๊ธฐ๋ฅผ ๋ญ๋นํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ์ํต๋๋ค.
- ๋คํธ์ํฌ ๊ณผ๋ถํ: ํ์ ์ด์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ๊ฐ์ ธ์ ๋์ญํญ์ ์๋ชจํ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ ๋์ ๋น์ฉ์ ๋ฐ์์ํต๋๋ค. ์ด๋ ์ธํฐ๋ท ์ ์์ด ์ ํ์ ์ด๊ฑฐ๋ ๋น์ผ ์ง์ญ์์ ํนํ ์ค์ํฉ๋๋ค.
- UI ๋ฒ๋ฒ ์(Jank): ์ฆ์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ก ์ธํด ๋ ์ด์์ ์ด๋๊ณผ ์๊ฐ์ ๋๊น ํ์์ด ๋ฐ์ํ๋ฉฐ, ํนํ ์ ์ฌ์ ๊ธฐ๊ธฐ๋ ๋ถ์์ ํ ๋คํธ์ํฌ ์ฐ๊ฒฐ ํ๊ฒฝ์์ ๋๋๋ฌ์ง๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ค์ ๋คํธ์ํฌ ์ํ, ๊ธฐ๊ธฐ ์ฑ๋ฅ, ์ฌ์ฉ์ ๊ธฐ๋์น๊ฐ ๋ค์ํ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ ๋ ๋์ฑ ์ฆํญ๋ฉ๋๋ค. experimental_useSubscription
์ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ํ ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ ์์ ๊ณผ ๋ฐฉ์์ ์ ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋๋ก ํ์ฌ ํด๊ฒฐ์ฑ
์ ์ ์ํฉ๋๋ค.
experimental_useSubscription ์๊ฐ
React์ ์คํ์ ์ฑ๋์์ ์ฌ์ฉํ ์ ์๋ experimental_useSubscription
ํ
์ ๊ตฌ๋
๋์์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ๊ณผ ์
๋ฐ์ดํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋๋ ๋ฐฉ์์ ์ ์ํ ์ ์์ต๋๋ค. ์ด ํ
์ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์์ฑ์ ๊ฐ์ง ์ค์ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค:
- dataSource: ๊ตฌ๋ ํ ๋ฐ์ดํฐ ์์ค์ ๋๋ค. ๊ฐ๋จํ ๊ฐ์ฒด๋ถํฐ Relay๋ Apollo Client์ ๊ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ ํ์นญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ๋ฌด์์ด๋ ๋ ์ ์์ต๋๋ค.
- getSnapshot: ๋ฐ์ดํฐ ์์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ํจ์์ ๋๋ค. ์ด ํจ์๋ ์์ํด์ผ ํ๋ฉฐ ์์ ์ ์ธ ๊ฐ(์: ์์ ๊ฐ ๋๋ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ฒด)์ ๋ฐํํด์ผ ํฉ๋๋ค.
- subscribe: ๋ฐ์ดํฐ ์์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ๋ ํ๊ณ ๊ตฌ๋ ํด์ง ํจ์๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค. subscribe ํจ์๋ ๋ฐ์ดํฐ ์์ค๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ๋์ด์ผ ํ๋ ์ฝ๋ฐฑ์ ๋ฐ์ต๋๋ค.
- getServerSnapshot (์ ํ ์ฌํญ): ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ค์๋ง ์ด๊ธฐ ์ค๋ ์ท์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํจ์์ ๋๋ค.
getSnapshot
(๋ฐ์ดํฐ ์ฝ๊ธฐ ๋ก์ง)๊ณผ subscribe
(๊ตฌ๋
๋ฉ์ปค๋์ฆ)์ ๋ถ๋ฆฌํจ์ผ๋ก์จ, experimental_useSubscription
์ ๊ฐ๋ฐ์๊ฐ ์ ๊ตํ ์ต์ ํ ๊ธฐ๋ฒ์ ๊ตฌํํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
์์ : experimental_useSubscription์ผ๋ก ๊ตฌ๋ ์ต์ ํํ๊ธฐ
React ์ปดํฌ๋ํธ์ ์ค์๊ฐ ํ์จ์ ํ์ํด์ผ ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ํ์จ์ ์ ๊ณตํ๋ ๊ฐ์์ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
```javascript import { experimental_useSubscription as useSubscription } from 'react'; import { useState, useEffect } from 'react'; // ๊ฐ์ ๋ฐ์ดํฐ ์์ค const currencyDataSource = { rates: { USD: 1, EUR: 0.9, GBP: 0.8 }, listeners: [], subscribe(listener) { this.listeners.push(listener); return () => { this.listeners = this.listeners.filter(l => l !== listener); }; }, updateRates() { // 2์ด๋ง๋ค ํ์จ ์ ๋ฐ์ดํธ ์๋ฎฌ๋ ์ด์ setInterval(() => { this.rates = { USD: 1, EUR: 0.9 + (Math.random() * 0.05 - 0.025), // EUR ์ฝ๊ฐ ๋ณ๋ GBP: 0.8 + (Math.random() * 0.05 - 0.025) // GBP ์ฝ๊ฐ ๋ณ๋ }; this.listeners.forEach(listener => listener()); }, 2000); } }; currencyDataSource.updateRates(); function CurrencyRate({ currency }) { const rate = useSubscription({ dataSource: currencyDataSource, getSnapshot: () => currencyDataSource.rates[currency], subscribe: currencyDataSource.subscribe.bind(currencyDataSource), }); return ({currency}: {rate.toFixed(2)}
); } function CurrencyRates() { return (Currency Exchange Rates
์ด ์์ ์์:
currencyDataSource
๋ ํ์จ์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.getSnapshot
์ ์์ฒญ๋ ํตํ์ ๋ํ ํน์ ํ์จ์ ์ถ์ถํฉ๋๋ค.subscribe
๋ ๋ฐ์ดํฐ ์์ค์ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๊ณ , ํ์จ์ด ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ๋ฆฌ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
์ด ๊ธฐ๋ณธ ๊ตฌํ์ ์๋ํ์ง๋ง, ์ปดํฌ๋ํธ๊ฐ ํน์ ํ์จ์๋ง ๊ด์ฌ์ด ์๋๋ผ๋ ๋ค๋ฅธ ํตํ ํ์จ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค CurrencyRate
์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํฉ๋๋ค. ์ด๋ ๋นํจ์จ์ ์
๋๋ค. ์
๋ ํฐ ํจ์์ ๊ฐ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
์ต์ ํ ๊ธฐ๋ฒ
1. ์ ๋ ํฐ ํจ์
์ ๋ ํฐ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์์ค์์ ํ์ํ ๋ฐ์ดํฐ๋ง ์ถ์ถํ ์ ์์ต๋๋ค. ์ด๋ ์ปดํฌ๋ํธ๊ฐ ์์กดํ๋ ํน์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ์ ๋ฐ์ดํธ๋๋๋ก ๋ณด์ฅํ์ฌ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ ์์ ์ `getSnapshot` ํจ์์์ ์ ์ฒด `currencyDataSource.rates` ๊ฐ์ฒด ๋์ `currencyDataSource.rates[currency]`๋ฅผ ์ ํํจ์ผ๋ก์จ ์ด๋ฏธ ์ด ๊ธฐ๋ฒ์ ๊ตฌํํ์ต๋๋ค.
2. ๋ฉ๋ชจ์ด์ ์ด์
useMemo
๋ Reselect์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฉ๋ชจ์ด์ ์ด์
๊ธฐ๋ฒ์ getSnapshot
ํจ์ ๋ด์์ ๋ถํ์ํ ๊ณ์ฐ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ด๋ getSnapshot
๋ด์ ๋ฐ์ดํฐ ๋ณํ์ด ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ฒฝ์ฐ ํนํ ์ ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด, getSnapshot
์ด ๋ฐ์ดํฐ ์์ค ๋ด์ ์ฌ๋ฌ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์กํ ๊ณ์ฐ์ ํฌํจํ๋ ๊ฒฝ์ฐ, ๊ด๋ จ ์์กด์ฑ์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ๋ฉ๋ชจ์ด์ ์ด์
ํ ์ ์์ต๋๋ค.
3. ๋๋ฐ์ด์ฑ ๋ฐ ์ค๋กํ๋ง
๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ๋น๋ฒํ ์๋๋ฆฌ์ค์์๋ ๋๋ฐ์ด์ฑ์ด๋ ์ค๋กํ๋ง์ ํตํด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ ์๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ๋๋ฐ์ด์ฑ์ ์ผ์ ์๊ฐ ๋์ ํ๋์ด ์์ ๋๋ง ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋๋๋ก ๋ณด์ฅํ๋ ๋ฐ๋ฉด, ์ค๋กํ๋ง์ ์ ๋ฐ์ดํธ ์๋๋ฅผ ์ต๋ ๋น๋๋ก ์ ํํฉ๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฒ์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ์ ๋ง์น ๋๊น์ง ๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์ํค๊ณ ์ถ์ ์ ์๋ ๊ฒ์ ์ ๋ ฅ ํ๋์ ๊ฐ์ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค.
4. ์กฐ๊ฑด๋ถ ๊ตฌ๋
์กฐ๊ฑด๋ถ ๊ตฌ๋ ์ ์ฌ์ฉํ๋ฉด ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ตฌ๋ ์ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์ด๋ ์ปดํฌ๋ํธ๊ฐ ํน์ ์ํฉ์์๋ง ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ ํด์ผ ํ๋ ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์น์ ์ ์ ๊ทน์ ์ผ๋ก ๋ณด๊ณ ์์ ๋๋ง ์ค์๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ตฌ๋ ํ ์ ์์ต๋๋ค.
5. ๋ฐ์ดํฐ ํ์นญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํตํฉ
experimental_useSubscription
์ ๋ค์๊ณผ ๊ฐ์ ์ธ๊ธฐ ์๋ ๋ฐ์ดํฐ ํ์นญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํํ๊ฒ ํตํฉ๋ ์ ์์ต๋๋ค:
- Relay: Relay๋ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ํ์นญ ๋ฐ ์บ์ฑ ๋ ์ด์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
experimental_useSubscription
์ ์ฌ์ฉํ๋ฉด Relay์ ์ ์ฅ์์ ๊ตฌ๋ ํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ปดํฌ๋ํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. - Apollo Client: Relay์ ์ ์ฌํ๊ฒ, Apollo Client๋ ์บ์ฑ ๋ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํฌ๊ด์ ์ธ GraphQL ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
experimental_useSubscription
์ ์ฌ์ฉํ์ฌ Apollo Client์ ์บ์์ ๊ตฌ๋ ํ๊ณ GraphQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค. - TanStack Query (์ด์ React Query): TanStack Query๋ React์์ ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ํ์นญ, ์บ์ฑ ๋ฐ ์
๋ฐ์ดํธํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. TanStack Query๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋
ํ๋ ์์ฒด ๋ฉ์ปค๋์ฆ์ ๊ฐ์ง๊ณ ์์ง๋ง,
experimental_useSubscription
์ ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก๋ ๊ธฐ์กด ๊ตฌ๋ ๊ธฐ๋ฐ ์์คํ ๊ณผ ํตํฉํ๋ ๋ฐ ์ ์ฌ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. - SWR: SWR์ ์๊ฒฉ ๋ฐ์ดํฐ ํ์นญ์ ์ํ ๊ฒฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ๋ฐ์ดํฐ๋ฅผ ํ์นญํ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋์ผ๋ก ์ฌ๊ฒ์ฆํ๋ ๊ฐ๋จํ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
experimental_useSubscription
์ ์ฌ์ฉํ์ฌ SWR์ ์บ์์ ๊ตฌ๋ ํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋, dataSource
๋ ์ผ๋ฐ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋ผ์ด์ธํธ ์ธ์คํด์ค๊ฐ ๋๋ฉฐ, getSnapshot
ํจ์๋ ํด๋ผ์ด์ธํธ์ ์บ์์์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค. subscribe
ํจ์๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์๋ฆผ์ ๋ฐ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํฉ๋๋ค.
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ตฌ๋ ์ต์ ํ์ ์ด์
๋ฐ์ดํฐ ๊ตฌ๋ ์ ์ต์ ํํ๋ฉด ํนํ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋์์ผ๋ก ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ฑ๋ฅ ํฅ์: ๋ฆฌ๋ ๋๋ง ๋ฐ ๋คํธ์ํฌ ์์ฒญ ๊ฐ์๋ ๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ๊ณผ ๋ ๋ฐ์์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ก ์ด์ด์ง๋ฉฐ, ์ด๋ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋๋ฆฐ ์ง์ญ์ ์ฌ์ฉ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋์ญํญ ์๋น ๊ฐ์: ๋ถํ์ํ ๋ฐ์ดํฐ ํ์นญ์ ์ต์ํํ๋ฉด ๋์ญํญ์ด ์ ์ฝ๋์ด ๋น์ฉ์ด ์ ๊ฐ๋๊ณ , ๋ง์ ๊ฐ๋ฐ๋์๊ตญ์์ ํํ ์ ํ๋ ๋ฐ์ดํฐ ์๊ธ์ ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฐฐํฐ๋ฆฌ ์๋ช ์ฐ์ฅ: ์ต์ ํ๋ ๊ตฌ๋ ์ CPU ์ฌ์ฉ๋์ ์ค์ฌ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ์ฐ์ฅํ๋ฉฐ, ์ด๋ ์ ๋ ฅ ๊ณต๊ธ์ด ๋ถ์์ ํ ์ง์ญ์ ์ฌ์ฉ์์๊ฒ ์ค์ํ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค.
- ํ์ฅ์ฑ: ํจ์จ์ ์ธ ๊ตฌ๋ ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ์ ํ ์์ด ๋ ๋ง์ ๋์ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ด๋ ํธ๋ํฝ ํจํด์ด ๋ณ๋ํ๋ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ ๋๋ค.
- ์ ๊ทผ์ฑ: ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์, ํนํ ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๊ฑฐ๋ ๋๋ฆฐ ์ธํฐํ์ด์ค์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฐ์ ์ ์๋ ๋ณด์กฐ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์ ์ ๊ทผ์ฑ์ ํฅ์์ํต๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
๊ตฌ๋ ์ต์ ํ ๊ธฐ๋ฒ์ ๊ตฌํํ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ธ๋ก๋ฒ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ๋คํธ์ํฌ ์กฐ๊ฑด: ๊ฐ์ง๋ ๋คํธ์ํฌ ์๋ ๋ฐ ์ง์ฐ ์๊ฐ์ ๋ฐ๋ผ ๊ตฌ๋ ์ ๋ต์ ์กฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๊ฒฐ ์ํ๊ฐ ์ข์ง ์์ ์ง์ญ์์๋ ์ ๋ฐ์ดํธ ๋น๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. Network Information API๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์ํ๋ฅผ ๊ฐ์งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ๊ธฐ๊ธฐ ์ฑ๋ฅ: ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ์ ์ต์ํํ๊ณ ์ ๋ฐ์ดํธ ๋น๋๋ฅผ ์ค์ฌ ์ ์ฌ์ ๊ธฐ๊ธฐ์ ์ต์ ํํฉ๋๋ค. ๊ธฐ๋ฅ ๊ฐ์ง์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ์๋ณํฉ๋๋ค.
- ๋ฐ์ดํฐ ํ์งํ: ๋ฐ์ดํฐ๊ฐ ํ์งํ๋๊ณ ์ฌ์ฉ์๊ฐ ์ ํธํ๋ ์ธ์ด ๋ฐ ํตํ๋ก ํ์๋๋๋ก ํฉ๋๋ค. ๊ตญ์ ํ(i18n) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ API๋ฅผ ์ฌ์ฉํ์ฌ ํ์งํ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN): CDN์ ํ์ฉํ์ฌ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ์๋ฒ์์ ์ ์ ์์ฐ์ ์ ๊ณตํจ์ผ๋ก์จ ์ ์ธ๊ณ ์ฌ์ฉ์์ ์ง์ฐ ์๊ฐ์ ์ค์ด๊ณ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํฉ๋๋ค.
- ์บ์ฑ ์ ๋ต: ๋คํธ์ํฌ ์์ฒญ ์๋ฅผ ์ค์ด๊ธฐ ์ํด ์ ๊ทน์ ์ธ ์บ์ฑ ์ ๋ต์ ๊ตฌํํฉ๋๋ค. HTTP ์บ์ฑ, ๋ธ๋ผ์ฐ์ ์ ์ฅ์, ์๋น์ค ์์ปค์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์์ฐ์ ์บ์ํฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ๋ก ์ฐ๊ตฌ
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ตฌ๋ ์ต์ ํ์ ์ด์ ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ์ ์ฌ๋ก ์ฐ๊ตฌ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- ์ ์์๊ฑฐ๋ ํ๋ซํผ: ๋๋จ์์์ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ํ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์ฌ์ฉ์๊ฐ ์ ํ ํ์ด์ง๋ฅผ ์ ๊ทน์ ์ผ๋ก ๋ณผ ๋๋ง ์ ํ ์ฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์กฐ๊ฑด๋ถ ๊ตฌ๋ ์ ๊ตฌํํ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋์ญํญ ์๋น๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ ์ธํฐ๋ท ์ ์์ด ์ ํ๋ ์ฌ์ฉ์์ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ์ต๋๋ค.
- ๊ธ์ต ๋ด์ค ์ ํ๋ฆฌ์ผ์ด์ : ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํ ๊ธ์ต ๋ด์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ์ด์ ์ด์ ๊ณผ ๋๋ฐ์ด์ฑ์ ์ฌ์ฉํ์ฌ ์ค์๊ฐ ์ฃผ์ ์์ธ ํ์๋ฅผ ์ต์ ํํ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฆฌ๋ ๋๋ง ํ์๋ฅผ ์ค์ด๊ณ UI ๋ฒ๋ฒ ์์ ๋ฐฉ์งํ์ฌ ๋ฐ์คํฌํฑ ๋ฐ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฌ์ฉ์ ๋ชจ๋์๊ฒ ๋ ๋ถ๋๋ฌ์ด ๊ฒฝํ์ ์ ๊ณตํ์ต๋๋ค.
- ์์ ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ : ํ ์์ ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์ ํ๋กํ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ๊ด๋ จ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฐ์ดํธํ๋๋ก ์ ๋ ํฐ ํจ์๋ฅผ ๊ตฌํํ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ค์ด๊ณ ํนํ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ ํ๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ๋ฐ์์ฑ์ ํฅ์์์ผฐ์ต๋๋ค.
๊ฒฐ๋ก
experimental_useSubscription
ํ
์ React ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ดํฐ ๊ตฌ๋
์ ์ต์ ํํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ ๋ชจ์์ ์ ๊ณตํฉ๋๋ค. ์
๋ ํฐ ํจ์, ๋ฉ๋ชจ์ด์ ์ด์
, ์กฐ๊ฑด๋ถ ๊ตฌ๋
๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ ์ดํดํ๊ณ ์ ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์์น, ๋คํธ์ํฌ ์ํ ๋๋ ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ๊ด๊ณ์์ด ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ณ ์ฑ๋ฅ์ ๊ธ๋ก๋ฒ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. React๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ, ์ด๋ฌํ ๊ณ ๊ธ ๊ธฐ์ ์ ํ์ํ๊ณ ์ฑํํ๋ ๊ฒ์ ๋ค์ํ๊ณ ์ํธ ์ฐ๊ฒฐ๋ ์ธ์์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ๊ฒ์
๋๋ค.
๋ ์์๋ณด๊ธฐ
- React ๊ณต์ ๋ฌธ์:
experimental_useSubscription
์ ๋ํ ์ ๋ฐ์ดํธ๋ React ๊ณต์ ๋ฌธ์๋ฅผ ์ฃผ์ํ์ญ์์ค. - ๋ฐ์ดํฐ ํ์นญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: Relay, Apollo Client, TanStack Query, SWR์ ๋ฌธ์๋ฅผ ํ์ํ์ฌ
experimental_useSubscription
๊ณผ์ ํตํฉ์ ๋ํ ์ง์นจ์ ์ฐพ์๋ณด์ญ์์ค. - ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ: React Profiler ๋ฐ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๊ตฌ๋ ์ต์ ํ์ ์ํฅ์ ์ธก์ ํ์ญ์์ค.
- ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค: ํฌ๋ผ, ๋ธ๋ก๊ทธ, ์์ ๋ฏธ๋์ด๋ฅผ ํตํด React ์ปค๋ฎค๋ํฐ์ ๊ต๋ฅํ์ฌ ๋ค๋ฅธ ๊ฐ๋ฐ์์ ๊ฒฝํ์์ ๋ฐฐ์ฐ๊ณ ์์ ์ ํต์ฐฐ๋ ฅ์ ๊ณต์ ํ์ญ์์ค.