React์ experimental_Scope Manager์ ๋ํ ์ฌ์ธต ๋ถ์: ์ค์ฝํ ๋ผ์ดํ์ฌ์ดํด ์ ์ด, ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ฐ๋ ฅํ๊ณ ์ ์ญ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ React ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ ์ฉ.
React์ experimental_Scope Manager ๋ง์คํฐํ๊ธฐ: ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ค์ฝํ ๋ผ์ดํ์ฌ์ดํด ์ ์ด
React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ์ ๋์ ์ธ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์ ๋์์์ด ์งํํ๊ณ ์์ต๋๋ค. ์คํ์ ์ธ ๊ธฐ๋ฅ์ด ๋์
๋จ์ ๋ฐ๋ผ ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ , ์ํ๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์๋ ์ต์ฒจ๋จ ๋๊ตฌ๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์คํ์ ๊ธฐ๋ฅ ์ค ํ๋๊ฐ experimental_Scope Manager์
๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ ์ด ๊ธฐ๋ฅ์ ๋ํด ์์ธํ ์ดํด๋ณด๊ณ , ๊ธฐ๋ฅ, ์ด์ ๋ฐ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ์์ด ์ค์ง์ ์ธ ์ ์ฉ์ ํ๊ตฌํ๋ฉฐ, ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๊ณผ์ ์ ๊ธฐํ๋ฅผ ๊ณ ๋ คํฉ๋๋ค.
React์ experimental_Scope Manager ์ดํด
ํต์ฌ์ ์ผ๋ก experimental_Scope Manager๋ ๊ฐ๋ฐ์์๊ฒ React ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์ค์ฝํ์ ๋ผ์ดํ์ฌ์ดํด์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ปจํ
์คํธ์์ ์ค์ฝํ๋ ์ํ, ํจ๊ณผ ๋ฐ ๋น๋๊ธฐ ์์
์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ผ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค. ์ด๋ ๋ณต์กํ ๋ก์ง, ๋์์ฑ ๋ฐ ๋น๋๊ธฐ ์์
์ ํฌํจํ๋ ์ ํ๋ฆฌ์ผ์ด์
, ์ฆ ์ค๋๋ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ์ผ๋ฐ์ ์ธ ์๊ตฌ ์ฌํญ์ ํนํ ์ค์ํฉ๋๋ค.
์ค์ฝํ ๊ด๋ฆฌ๊ฐ ์์ผ๋ฉด ๊ฐ๋ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์: ์ ์ด๋์ง ์์ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ๋ก ์ธํด ์ปดํฌ๋ํธ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ ๋ฆฌ์์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์งํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ํนํ ๋ง์ ๊ฐ๋ฐ๋์๊ตญ์์ ํํ ์ฌ์ฉ๋๋ ์ ์ ๋ ฅ ์ฅ์น์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ๊ฒฝ์ ์กฐ๊ฑด: ํนํ ๋น๋๊ธฐ ์์ ์์ ๋์์ฑ ๋ฌธ์ ๋ก ์ธํด ์๊ธฐ์น ์์ ๋์๊ณผ ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์ ๋์์ฑ์ด ๋์ ์ฑ์์ ๋์ฑ ๋๋๋ฌ์ง๋๋ค.
- ์์ธกํ ์ ์๋ ์ํ ์ ๋ฐ์ดํธ: ์ปดํฌ๋ํธ ๊ฐ์ ๋ณต์กํ ์ํธ ์์ฉ์ผ๋ก ์ธํด ์ํ ๋ณ๊ฒฝ์ ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ ธ ๋ฒ๊ทธ์ ์์ธกํ ์ ์๋ UI ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
experimental_Scope Manager๋ ์ด๋ฌํ ์ค์ฝํ์ ๋ผ์ดํ์ฌ์ดํด์ ์ ์ํ๊ณ ์ ์ดํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ค์ฝํ๊ฐ ์์ฑ, ์
๋ฐ์ดํธ ๋ฐ ์๋ฉธ๋๋ ์๊ธฐ๋ฅผ ์ ํํ๊ฒ ๊ด๋ฆฌํ์ฌ React ์ ํ๋ฆฌ์ผ์ด์
์ ์์ธก ๊ฐ๋ฅ์ฑ, ํจ์จ์ฑ ๋ฐ ์์ ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๋ค์ํ ํ๋์จ์ด ๋ฐ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ฐ์ง ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒ๋ฆฌํ ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ฃผ์ ๊ฐ๋ ๋ฐ ๊ธฐ๋ฅ
experimental_Scope Manager๋ ๋ช ๊ฐ์ง ์ฃผ์ ๊ฐ๋
๊ณผ ๊ธฐ๋ฅ์ ์๊ฐํฉ๋๋ค.
1. ์ค์ฝํ ์์ฑ ๋ฐ ์๋ฉธ
์ค์ฝํ๊ฐ ์์ฑ๋๊ณ ์๋ฉธ๋๋ ์๊ธฐ๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์ํ๋ ๊ธฐ๋ฅ์ Scope Manager์ ํต์ฌ์
๋๋ค. ๊ฐ๋ฐ์๋ ํน์ ์ปดํฌ๋ํธ, ์ด๋ฒคํธ ๋๋ ์กฐ๊ฑด๊ณผ ์ฐ๊ฒฐํ์ฌ ์ค์ฝํ์ ๋ผ์ดํ์ฌ์ดํด์ ์ ์ดํ ์ ์์ต๋๋ค. ์ด๋ ํน์ ๊ธฐ๊ฐ ๋์๋ง ํ์ฑํ๋์ด์ผ ํ๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ, ๊ตฌ๋
๋๋ ํ์ด๋จธ์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
2. ์ค์ฝํ ๊ฒฉ๋ฆฌ
์ค์ฝํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ถ๋ถ ๊ฐ์ ๋ฐ์ดํฐ์ ์ํ๊ฐ ๋์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒฉ๋ฆฌ ์์ค์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฒฉ๋ฆฌ๋ ๋ณต์กํ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ํ ์ค์ฝํ ๋ด์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ค๋ฅธ ์ค์ฝํ์ ๋ถ์ฃผ์ํ๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์ด๋ ๋์ ์์ ์ ์ฒ๋ฆฌํ๊ณ ์ฌ๋ฌ ์ง์ญ ๋๋ ์๋ฒ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ์ค์ํ ์ธก๋ฉด์ ๋๋ค.
3. ๋์์ฑ ์ ์ด
Scope Manager๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์์
์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ํน์ ์์
์ด ์์, ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ์ข
๋ฃ๋์ด์ผ ํ๋ ์๊ธฐ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ๋ฌ ๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌํ ๋ ๋งค์ฐ ์ ์ฉํ๋ฉฐ ๊ฒฝ์ ์กฐ๊ฑด์ ๋ฐฉ์งํ๊ณ ๋ฆฌ์์ค๊ฐ ์ ์ ํ๊ฒ ๊ด๋ฆฌ๋๋๋ก ํฉ๋๋ค. ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ค์ํ ์๊ฐ๋์ ์๊ฑฐ๋ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ฐ์ง ์ฌ์ฉ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ์ํค์ง ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ๊ด๋ฆฌํ๋ ๋์์ฑ ์ ์ด์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
4. ์ ๋ฆฌ ๋ฉ์ปค๋์ฆ
Scope Manager๋ ์ค์ฝํ๊ฐ ์๋ฉธ๋ ๋ ๋ฆฌ์์ค๊ฐ ํด์ ๋๋๋ก ๋ณด์ฅํ์ฌ ์ ๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ํจ์จ์ ์ผ๋ก ์๋ํ๋๋ก ํฉ๋๋ค. ์ ์ ํ ์ ๋ฆฌ๋ ํนํ ์ ํ๋ ์ฅ์น ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ์ฅ๊ธฐ ์คํ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ค์ํฉ๋๋ค.
์ค์ ์์ ๋ฐ ๊ตฌํ
์ค์ ์์ ๋ฅผ ์ดํด๋ณด๊ณ experimental_Scope Manager๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค. experimental_Scope Manager์ ์ ํํ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๋ค๋ฅผ ์ ์์ง๋ง ํต์ฌ ๊ฐ๋
์ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค.
์์ 1: ๋คํธ์ํฌ ์์ฒญ ๊ด๋ฆฌ
API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํด ๋ณด์ญ์์ค. ์ ์ ํ ๊ด๋ฆฌ๊ฐ ์์ผ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋ ํ์๋ ์์ฒญ์ด ๊ณ์๋์ด ์ ์ฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋๋ ๋ถํ์ํ ์ฒ๋ฆฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. Scope Manager๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์์ฒญ์ ์ปดํฌ๋ํธ์ ์ค์ฝํ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
import React, { experimental_createScope } from 'react';
function MyComponent() {
const [data, setData] = React.useState(null);
const scope = experimental_createScope();
React.useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
const jsonData = await response.json();
setData(jsonData);
} catch (error) {
console.error('Error fetching data:', error);
// Handle error appropriately, e.g., by setting an error state.
}
};
scope.use(() => {
fetchData();
});
// When the component unmounts, the scope is automatically destroyed,
// canceling the fetch request (assuming you use an AbortController).
return () => {
scope.destroy(); // Manually destroy the scope for immediate cleanup.
};
}, []);
if (!data) {
return <p>Loading...</p>;
}
return (
<div>
<h2>Data:</h2>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
export default MyComponent;
์ด ์์ ์์๋ experimental_createScope๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฝํ๋ฅผ ๋ง๋ญ๋๋ค. ๋คํธ์ํฌ ์์ฒญ์ ๋ํ๋ด๋ fetchData ํจ์๋ ์ด ์ค์ฝํ ๋ด์์ ์คํ๋ฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋๋ฉด ์ค์ฝํ๊ฐ ์๋์ผ๋ก ์๋ฉธ๋๊ฑฐ๋ scope.destroy()๋ฅผ ํตํด ์๋์ผ๋ก ์๋ฉธ๋์ด ์งํ ์ค์ธ ๊ฐ์ ธ์ค๊ธฐ ์์ฒญ์ด ํจ๊ณผ์ ์ผ๋ก ์ทจ์๋ฉ๋๋ค(๊ฐ์ ธ์ค๊ธฐ ๋ด์์ AbortController๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค). ์ด๋ ๊ฒ ํ๋ฉด ๋ ์ด์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋ฆฌ์์ค๊ฐ ํด์ ๋์ด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
์์ 2: ํ์ด๋จธ ๊ด๋ฆฌ
์ผ๋ถ ์ ๋ณด๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐ ํ์ด๋จธ๊ฐ ํ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ค์ฝํ ๊ด๋ฆฌ๊ฐ ์์ผ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ ์ด์ ๋ณด์ด์ง ์๋๋ผ๋ ํ์ด๋จธ๊ฐ ๊ณ์ ์คํ๋ ์ ์์ต๋๋ค. ๋ค์์ Scope Manager๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
import React, { experimental_createScope, useEffect, useState } from 'react';
function TimerComponent() {
const [count, setCount] = useState(0);
const scope = experimental_createScope();
useEffect(() => {
let intervalId;
scope.use(() => {
intervalId = setInterval(() => {
setCount(prevCount => prevCount + 1);
}, 1000);
});
return () => {
clearInterval(intervalId);
scope.destroy();
};
}, []);
return (
<div>
<p>Count: {count}</p>
</div>
);
}
export default TimerComponent;
์ฌ๊ธฐ์ setInterval์ `scope.use()`๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฝํ ๋ด์์ ์์๋ฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋๊ฑฐ๋(๋๋ ์๋์ผ๋ก ์ค์ฝํ๋ฅผ ์๋ฉธ์ํด) ์ค์ฝํ์ ์ ๋ฆฌ ํจ์์์ clearInterval ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ ์ด์ ํ์ฑ ์ํ๊ฐ ์๋ ๋ ํ์ด๋จธ๊ฐ ์ค์ง๋์ด ๋ถํ์ํ ์ฒ๋ฆฌ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐฉ์ง๋ฉ๋๋ค.
์์ 3: ๋์์ฑ ์ ์ด๋ฅผ ํตํ ๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ์๋ ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ์ ๊ฒฝํํ ์ ์์ผ๋ฏ๋ก ๋น๋๊ธฐ ์์
์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ฌ๋ฌ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ปดํฌ๋ํธ๋ฅผ ์์ํด ๋ณด์ญ์์ค. Scope Manager๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์์ฒญ์ ๋์์ฑ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
import React, { experimental_createScope, useState, useEffect } from 'react';
function DataFetcher() {
const [data1, setData1] = useState(null);
const [data2, setData2] = useState(null);
const scope = experimental_createScope();
useEffect(() => {
const fetchData1 = async () => {
try {
const response = await fetch('https://api.example.com/data1');
const jsonData = await response.json();
setData1(jsonData);
} catch (error) {
console.error('Error fetching data1:', error);
}
};
const fetchData2 = async () => {
try {
const response = await fetch('https://api.example.com/data2');
const jsonData = await response.json();
setData2(jsonData);
} catch (error) {
console.error('Error fetching data2:', error);
}
};
// Manage concurrency here. You might use Promise.all if you want
// both fetches to run concurrently, or chain them if they depend
// on each other.
scope.use(() => {
fetchData1();
fetchData2();
});
return () => {
// In a real application, you'd likely have abort controllers
// for each fetch and call abort() here.
scope.destroy();
};
}, []);
return (
<div>
<p>Data 1: {JSON.stringify(data1)}</p>
<p>Data 2: {JSON.stringify(data2)}</p>
</div>
);
}
export default DataFetcher;
์ด ์์ ์์ fetchData1๊ณผ fetchData2๋ ๋ชจ๋ ์ค์ฝํ์ ์ผ๋ถ์
๋๋ค. `Scope Manager`์ ์ ์ ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฌ์ ์ผ๋ก ๋์ ๋คํธ์ํฌ ์์ฒญ์ ์ ์์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ ์ดํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ์ฐ๊ฒฐ ์๋๊ฐ ๋๋ฆฌ๊ฑฐ๋ ์ธํฐ๋ท ์์ ์ฑ์ด ๋ณ๋ํ๋ ์ง์ญ์ ์ฌ์ฉ์๋ฅผ ์ํด ์๋ต์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๋ก๋ฉ ์ํ์ ๋ํ ์๊ฐ์ ์งํ๋ฅผ ์ ๊ณตํ๊ณ ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํด ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ณ ๋ ค ์ฌํญ
experimental_Scope Manager๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ์ ๋ต์ ์ผ๋ก ์ ์ฉํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ํ์ํ ๊ฒฝ์ฐ Scope Manager ์ฌ์ฉ:
Scope Manager๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ๋ผ์ดํ์ฌ์ดํด ๋ฐ ๋์์ฑ ๊ด๋ฆฌ๊ฐ ์ค์ํ ์ปดํฌ๋ํธ ๋๋ ๊ธฐ๋ฅ์ ์๋ณํ์ญ์์ค. ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๋ถํ์ํ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค. - ๋ฆฌ์์ค ์ ๋ฆฌ: ํญ์ ์ค์ฝํ ๋ด์์ ์ ์ ํ ์ ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ญ์์ค. ์ฌ๊ธฐ์๋ ๋คํธ์ํฌ ์์ฒญ ์ทจ์, ํ์ด๋จธ ์ง์ฐ๊ธฐ ๋ฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๊ตฌ๋ ์ทจ์๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋์ ๊ณ ๋ ค:
Scope Manager๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค๋ฅธ React ๊ธฐ๋ฅ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ ์ฌ๋ก์ ๋ ์ ํฉํ์ง ํ๊ฐํ์ญ์์ค. ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ์ ๊ฒฝ์ฐ React์ ๋ด์ฅuseState๋ฐuseEffect๋ก ์ถฉ๋ถํ ์ ์์ต๋๋ค. ๋ณด๋ค ๋ณต์กํ ์ํ ๊ด๋ฆฌ์ ๊ฒฝ์ฐ Redux, Zustand ๋๋ Jotai์ ๊ฐ์ ํ๋ฆฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. - ์ค๋ฅ ์ฒ๋ฆฌ: ์ค์ฝํ ๋ด์์ ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์ญ์์ค. ๋น๋๊ธฐ ์์ ์์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ์๊ธฐ์น ์์ ๋์์ ๋ฐฉ์งํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ญ์์ค. ์๋ฏธ ์๋ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ๋ค์ ์๋ํ๊ฑฐ๋ ๋ณด๊ณ ํ ์ ์๋ ์ต์ ์ ์ ๊ณตํ์ญ์์ค.
- ํ
์คํธ:
Scope Manager๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค. ์ค์ฝํ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑ, ์ ๋ฐ์ดํธ ๋ฐ ์๋ฉธ๋๋์ง ํ์ธํ๊ธฐ ์ํด ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ญ์์ค. ๋น ๋ฅธ ํ์, ๋คํธ์ํฌ ์ค๋จ ๋ฐ ์ฅ๊ธฐ ์คํ ํ๋ก์ธ์ค๋ฅผ ํฌํจํ ๋ค์ํ ์๋๋ฆฌ์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ํ ์คํธํ์ญ์์ค. - ๋ฌธ์ํ: ์ฝ๋์ ์ฃผ์์ ๋ฌ์
Scope Manager๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์ด์ ๋ฅผ ๋ช ํํ๊ฒ ์ค๋ช ํ์ญ์์ค. ํนํ ๊ธ๋ก๋ฒ ํ์์ ์ ์ง ๊ด๋ฆฌ ๋ฐ ํ์ ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ค์ฝํ ๋ผ์ดํ์ฌ์ดํด ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ์ ๋ํ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ์ญ์์ค. - ์ฑ๋ฅ ํ๋กํ์ผ๋ง: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ ๋ฐ ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋๊ตฌ(์: React Profiler)๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ถ์ํ์ญ์์ค. ์ค์ฝํ ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ต์ ํํ์ญ์์ค. ๋ถํ์ํ ์ค์ฝํ ์์ฑ ๋๋ ์๋ฉธ์ ํ์ธํ์ญ์์ค.
- ์ ๊ทผ์ฑ: ์์น ๋๋ ์ฅ์น์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก์ธ์คํ ์ ์๋์ง ํ์ธํ์ญ์์ค. ์ ๊ทผ์ฑ ํ์ค์ ์ค์ํ๊ธฐ ์ํด ํ๋ฉด ํ๋ ๊ธฐ, ํค๋ณด๋ ํ์ ๋ฐ ์ถฉ๋ถํ ๋๋น๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์
experimental_Scope Manager๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ํนํ ์ ์ฉํฉ๋๋ค.
- ํฅ์๋ ์ฑ๋ฅ: ํจ๊ณผ์ ์ธ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ํนํ ํน์ ์ง์ญ์์ ์ ๋ ฅ์ด ๋ฎ์ ์ฅ์น๋ ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋๊ฐ ๋๋ฆฐ ์ฌ์ฉ์๋ฅผ ์ํด ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค.
- ํฅ์๋ ์์ ์ฑ: ์ ์ ํ ๋์์ฑ ์ ์ด ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ๋ ๋ณด๋ค ์์ ์ ์ด๊ณ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ด์ด์ง๋๋ค.
- ํ์ฅ์ฑ: ์ ๊ด๋ฆฌ๋ ์ค์ฝํ๋ฅผ ํตํด ํนํ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ฒ ํ์ฅํ์ฌ ์ฆ๊ฐ๋ ์ฌ์ฉ์ ํธ๋ํฝ๊ณผ ๋ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ:
Scope Manager๋ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๊ณ ์ํํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ณด์ฅํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. - ๋จ์ํ๋ ์ํ ๊ด๋ฆฌ: ์ค์ฝํ ๊ฒฉ๋ฆฌ๋ ์๋ํ์ง ์์ ๋ถ์์ฉ์ ๋ฐฉ์งํ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํฉ๋๋ค. ์ด๋ ๋ค์ํ ์์น์์ ์ํธ ์์ฉํ ์ ์๋ ๊ธฐ๋ฅ ๋ฐ ๋ก์ง์ ์ค์ํฉ๋๋ค.
๋ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๋ค๊ตญ์ด ์ง์: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ ํ์ํ ๊ฒฝ์ฐ ์ ์ ํ ๋ฆฌ์์ค๊ฐ ๋ก๋ ๋ฐ ์ธ๋ก๋๋๋๋ก ํน์ ์ค์ฝํ ๋ด์์ ์ง์ญํ๋ ์ฝํ ์ธ ์ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์บ์ฑ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ง์ญ ๋ฐ์ดํฐ: ์ง์ญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋
Scope Manager๋ ํน์ ์ง๋ฆฌ์ ์ง์ญ์ ํน์ ํ ์ค์ฝํ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ ์ดํ์ฌ ํด๋น ์ง์ญ์ ์ฌ์ฉ์๋ฅผ ์ํ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฒ์ ๋ฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. - ์๊ฐ๋ ์ฒ๋ฆฌ: ์ด๋ฒคํธ ์ผ์ ๋๋ ํ๋ก๋ชจ์ ์ ์๊ณผ ๊ฐ์ด ์๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํ์ํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ํน์ ์ค์ฝํ ๋ด์์ ์ฌ์ฉ์ ํ์ง ์๊ฐ๋์ ์ ๋ณด๋ฅผ ๋๊ธฐํํ ์ ์์ต๋๋ค.
- ๊ฒฐ์ ๊ฒ์ดํธ์จ์ด ํตํฉ: ์ ์ ์๊ฑฐ๋ ๋๋ ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํน์ ์ค์ฝํ ๋ด์์ ๊ฒฐ์ ๊ฒ์ดํธ์จ์ด ์ํธ ์์ฉ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฒฐ์ ๊ด๋ จ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์์ ๊ฒฉ๋ฆฌํ๊ณ ์ค์ํ ์ ๋ณด๋ฅผ ๋ณด๋ค ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
React์ experimental_Scope Manager๋ ์ค์ฝํ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ, ์์ ์ฑ ๋ฐ ํ์ฅ์ฑ์ ํฅ์์ํค๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ์คํ์ ์ธ ๊ธฐ๋ฅ์ด์ง๋ง ํต์ฌ ๊ฐ๋
์ ์ดํดํ๊ณ ์ ๋ต์ ์ผ๋ก ์ ์ฉํ๋ฉด ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋์์ฑ์ ์ ์ดํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ , ๊นจ๋ํ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํจ์ผ๋ก์จ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ React ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์์ต๋๋ค. React๊ฐ ๊ณ์ ์งํํจ์ ๋ฐ๋ผ ์คํ์ ์ธ ๊ธฐ๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ณ ์คํํ๋ ๊ฒ์ ์ต์ ์น ๊ฐ๋ฐ์ ์ต์ ์ ์ ๋จธ๋ฌด๋ ๋ฐ ์ค์ํฉ๋๋ค.
๋ชจ๋ ์คํ์ ์ธ ๊ธฐ๋ฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์
๋ฐ์ดํธ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํด์๋ ๊ณต์ React ์ค๋ช
์ ๋ฐ ์ปค๋ฎค๋ํฐ ํ ๋ก ์ ์ฃผ์ํ์ญ์์ค. experimental_Scope Manager๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ ํญ์ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ, ํ
์คํธ ๊ฐ๋ฅ์ฑ ๋ฐ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ฐ์ ์ํ์ญ์์ค. ์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ ์ธ๊ณ์ ๋ค์ํ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์ถฉ์กฑํ๋ ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ์์ ์ ์ด๋ฉฐ ์ ์ธ๊ณ์ ์ผ๋ก ์น์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ์ญ์์ค.