์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด, ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ์ฅ ์ค์ํ ๊ณผ์ ์ค ํ๋๋ผ๋ ๊ฒ์ ๋๋ผ๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ๋งํ๋ "์ํ"๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ฌ ์ด๋ค ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ทธ ์ ๋ณด๊ฐ ์ด๋ป๊ฒ ๋ณํํ๋์ง๋ฅผ ์๋ฏธํ๋๋ฐ์, ์ด๋ ํฌ๊ฒ ํด๋ผ์ด์ธํธ ์ํ์ ์๋ฒ ์ํ๋ก ๋๋ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ํ๋ ๋ธ๋ผ์ฐ์ ๋ด์์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์ ํํ ํ ๋ง, ์ ๋ ฅํ ํผ ๋ฐ์ดํฐ, ํน์ UI ์ปดํฌ๋ํธ์ ํ์ฌ ์ํ ๊ฐ์ ๊ฒ๋ค์ด ์ฌ๊ธฐ์ ํด๋น๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ๋ ์ฃผ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ธ๋ผ์ฐ์ ์์์ ๊ด๋ฆฌํ๊ธฐ ์ฝ์ต๋๋ค.
๋ฐ๋ฉด, ์๋ฒ ์ํ๋ ํด๋ผ์ด์ธํธ ์ธ๋ถ, ์ฆ ์๋ฒ์์ ๊ฐ์ ธ์์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ ์ ๋ชฉ๋ก, ์ํ ์ ๋ณด, ํน์ ์ด์ ์ ์ฃผ๊ณ ๋ฐ์๋ ์ฑํ ๋ฉ์์ง์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด ์ํ๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๊ธฐํํด์ผ ํ๋ฉฐ, ํญ์ ์ต์ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ฐ๋ น, ์๋ฒ์์ ์ํ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ ๋, ์ด๋ฅผ ํด๋ผ์ด์ธํธ์์ ์ฆ์ ๋ฐ์ํ์ง ๋ชปํ๋ค๋ฉด ์ฌ์ฉ์์๊ฒ ์ค๋๋ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์๋ฒ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด React์์๋ ์ฃผ๋ก useState
์ useEffect
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋๋ ์ด๋ฅผ ํ์ฉํด ์ ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ค๋ ๊ฐ๋จํ ์์์
๋๋ค.
function UserList() {
const [users, setUsers] = useState([]);
useEffect(() => {
fetch("/api/users")
.then((response) => response.json())
.then((data) => setUsers(data));
}, []);
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
์ ์ฝ๋๋ ๋จ์ํ๊ณ ์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ก, ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ํ ๋ค์ ๋ง์ดํธ๋๋ฉด ๋ฐ์ดํฐ์ ๋ณํ๊ฐ ์์ ์ง๋ผ๋ ๋งค๋ฒ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์๋ก ์์ฒญํฉ๋๋ค. ์ด๋ ๊ฒ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๊ฐ์ ธ์ค๊ฒ ๋๋ฉด ๋คํธ์ํฌ ๋ฆฌ์์ค๊ฐ ๋ญ๋น๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์๋ ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๋ํ, ์๋ฒ์์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋์๋๋ผ๋ ํด๋ผ์ด์ธํธ ํ๋ฉด์ ํ์๋ ์ ๋ณด๊ฐ ์ด๋ฅผ ๋ฐ์ํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๋ก์ง์ ์๋์ผ๋ก ์์ฑํด์ผ ํ์ง๋ง, ์ด ๊ณผ์ ์์ ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ , ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ ์๋ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ํด, ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋์ฑ ๋ณต์กํด์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ์ ์ ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ํ๋ ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ ์ปดํฌ๋ํธ๊ฐ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค๋ฉด, ๊ฐ๊ธฐ ๋ค๋ฅธ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ฑฐ๋, ๋ฐ์ดํฐ๊ฐ ๋๊ธฐํ๋์ง ์๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ, "๋๊ฐ ์ต์ ๋ฐ์ดํฐ์ธ์ง"๋ฅผ ๋๊ณ ์ปดํฌ๋ํธ ๊ฐ์ ํผ๋์ด ์๊ธธ ์ ์๋ ๊ฒ์ด์ฃ .
React์ ๊ธฐ๋ณธ ๋๊ตฌ๋ ์ด๋ฌํ ์๋ฒ ์ํ ๊ด๋ฆฌ์์ ์ฌ๋ฌ ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฒ ์ํ๋ ํด๋ผ์ด์ธํธ ์ํ์ ๋ฌ๋ฆฌ ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋์์ ์ ๊ทผํด์ผ ํ๊ณ , ์ง์์ ์ผ๋ก ์ต์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ฉฐ, ์ค๋ณต๋ ์์ฒญ์ด๋ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฌํ ์ด์ ๋ก, ๋จ์ํ useState
์ useEffect
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ณต์กํ ์๋ฒ ์ํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก TanStack Query์ ๋๋ค. TanStack Query๋ ์๋ฒ ์ํ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์บ์ฑํ๊ณ , ์๋์ผ๋ก ๋๊ธฐํํ๋ฉฐ, ์ค๋ณต๋ ์์ฒญ์ ๋ฐฉ์งํ๋ ๋ฑ React์ ๊ธฐ๋ณธ ๋๊ตฌ๊ฐ ๊ฐ์ง๋ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ์ ์๋๋ก ๋๋ ๋๊ตฌ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์๋ฒ ์ํ ๊ด๋ฆฌ์ ๋๋ ๋ณต์กํ ๋ก์ง์ ์ค์ด๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ ์ง์คํ ์ ์๊ฒ ๋ฉ๋๋ค.
์๋ฒ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ณผ์ ์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ์์ ์ด ์๋๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋๊ธฐํํ๋ ๊ณผ์ ์์ ์ค๋ณต๋ ์์ฒญ์ด ๋ฐ์ํ๊ฑฐ๋, ์ค๋๋ ๋ฐ์ดํฐ๊ฐ ํ์๋๋ ๋ฌธ์ ๊ฐ ์์ฃผ ๋ํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. TanStack Query๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํด๊ฒฐํ๋ฉฐ, ์๋ฒ ์ํ ๊ด๋ฆฌ๋ฅผ ๋จ์ํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ์ ๋๋ค. React ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๊ฐฑ์ ํ๋ ๋ณต์กํ ๋ก์ง์ ๋์ ์ฒ๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ ์ง์คํ ์ ์์ต๋๋ค.
TanStack Query๋ ๋ฐ์ดํฐ๋ฅผ Query๋ผ๋ ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ๊ด๋ฆฌํฉ๋๋ค๐ฎ Query๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๋ฉฐ, ํ์ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ ์ญํ ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ Query์ ํน์ ์ ์ ์ ์์ธ ์ ๋ณด๋ฅผ ์์ฒญํ๋ Query๋ฅผ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ Query๋ฅผ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ ์์ฒญ๊ณผ ๊ด๋ฆฌ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
Query๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, Query Key ๋ผ๋ ๊ณ ์ ์๋ณ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. Query Key๋ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๊ธฐ ์ํ ์ด๋ฆํ ์ญํ ์ ํ๋ฉฐ, TanStack Query๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ํต์ฌ ์์์
๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ๋ชฉ๋ก์ ์์ฒญํ๋ ค๋ฉด Query Key๋ฅผ ["users"]
๋ก ์ค์ ํ ์ ์๊ณ , ํน์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ค๋ฉด ["user", userId]
์ ๊ฐ์ ํ์์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ Query Key๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์์ฒญ๋์๋์ง ํ๋จํ๊ณ , ํ์ํ ๊ฒฝ์ฐ์๋ง ์๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
TanStack Query๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด staleTime
๊ณผ gcTime
์ค์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ค์ ์ ์ ์ ํ ์กฐ์ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ตฌ์ฌํญ์ ๋ง๋ ๋ฐ์ดํฐ ๊ฐฑ์ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
staleTime
์ ๋ฐ์ดํฐ๊ฐ ์ฌ์ ํ ์ ํจํ๋ค๊ณ ๊ฐ์ฃผ๋๋ ์๊ฐ์ ์๋ฏธํฉ๋๋ค. ๋ฐ์์จ ๋ฐ์ดํฐ์ ์ ํต๊ธฐํ ๊ฐ์ ๊ฐ๋
์ด์ฃ โฑ๏ธ ์๋ฅผ ๋ค์ด, ์ค์๊ฐ ์ฃผ์ ๊ฐ๊ฒฉ์ฒ๋ผ ์์ฃผ ๊ฐฑ์ ์ด ํ์ํ ๋ฐ์ดํฐ๋ staleTime
์ ์งง๊ฒ ์ค์ ํจ์ผ๋ก์จ ํญ์ ์ต์ ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ์ ํ ์ ๋ณด ๊ฐ์ ๋ฐ์ดํฐ๋ staleTime
์ ๊ธธ๊ฒ ์ค์ ํ๋ค๋ฉด ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ์ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ์ค์ ํ๋ฉด ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ค์ด๋ฉด์๋ ํ์ํ ์์ ์๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ์ ์์ต๋๋ค.
gcTime
์ ๋ฐ์ดํฐ๊ฐ ์ฐธ์กฐ๋์ง ์์ ๋ ์บ์์ ์ผ๋ง๋ ์ค๋ ์ ์ง๋ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํน์ ํ์ด์ง๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฒฝ์ฐ, gcTime
์ ๊ธธ๊ฒ ์ค์ ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฐธ์กฐํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ ๊ฒฝ์ฐ์๋ gcTime
์ ์งง๊ฒ ์ค์ ํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๋ ๊ฒ์ด ํจ์จ์ ์
๋๋ค.
์ฃผ์ ๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ก ๋ค๋ฉด, ์ค์๊ฐ ๊ฐ๊ฒฉ ์ ๋ณด๋ ์ฌ์ฉ์๊ฐ ์ง์์ ์ผ๋ก ํ์ธํด์ผ ํ๋ฏ๋ก staleTime
์ ์งง๊ฒ ์ค์ ํ๊ณ gcTime
์ ์๋์ ์ผ๋ก ๊ธธ๊ฒ ์ค์ ํฉ๋๋ค. ๋ฐ๋ฉด, ์ผํ๋ชฐ์์ ์ ํ ์ ๋ณด๋ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์ staleTime
๊ณผ gcTime
์ ๋ ๊ธธ๊ฒ ์ค์ ํด๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ ๊ฒ ๊ฐ ๋ฐ์ดํฐ์ ํน์ฑ๊ณผ ์ฌ์ฉ ๋น๋์ ๋ง๊ฒ ์ค์ ์ ์กฐ์ ํ๋ฉด, ์ฑ๋ฅ ์ต์ ํ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ชจ๋ ํฅ์์ํฌ ์ ์์ต๋๋ค.
TanStack Query๋ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ ๊ฐ์ ธ์ค๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ๋ ์ง์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ ์์ ์ Mutation์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. Mutation์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๋ค, ๊ด๋ จ๋ Query๋ฅผ ์๋์ผ๋ก ๋ฌดํจํํ๊ณ ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ฌ ํ๋ฉด์ ์ต์ ์ํ๋ฅผ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ก์ด ์ ์ ๋ฅผ ์ถ๊ฐํ ๋ค ์ ์ ๋ชฉ๋ก์ ์๋์ผ๋ก ๊ฐฑ์ ํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ๊ฐ์ํํ๊ณ , ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์ด๋ ๋ฏ TanStack Query๋ ๊ธฐ์กด์ useState
์ useEffect
๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์บ์ฑํ๋ฉฐ, ์๋์ผ๋ก ๋๊ธฐํํ์ฌ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋๋ก ์ฐ๋ฆฌ๋ฅผ ๋์์ฃผ๋ ์น๊ตฌ์ฃ !
์๋ฒ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋ ์ค์ํ ์ ์ ๋ฐ์ดํฐ์ ๋๊ธฐํ์ ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ํ์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ํ๊ฐ ํญ์ ์ผ์นํด์ผ ํ๋ฉฐ, ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ง์ ๋ณต์กํ ๋ก์ง์ด ํ์ํฉ๋๋ค. TanStack Query๋ ์ด๋ฌํ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Query Invalidation์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ฉด์๋, ๋ฐ์ดํฐ ๋๊ธฐํ ๊ณผ์ ์ ์๋ํํ ์ ์์ต๋๋ค.
Query Invalidation์ ํน์ ๋ฐ์ดํฐ๋ฅผ stale
์ํ๋ก ์ ํํ์ฌ, TanStack Query๊ฐ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋๋ก ์ ๋ํ๋ ๊ธฐ๋ฅ์
๋๋ค. ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋๊ฑฐ๋ ์ญ์ ๋ ํ, ์บ์ฑ๋ ๋ฐ์ดํฐ๊ฐ ๋ ์ด์ ์ ๋ขฐํ ์ ์๋ ์ํ๋ก ๊ฐ์ฃผ๋๋ฉด Query Invalidation์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์๋ก์ด ํญ๋ชฉ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ค์๋ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ค์ด ์ต์ ์ํ๋ฅผ ๋ฐ์ํ ์ ์๋๋ก ๋ง๋ญ๋๋ค.
Query Invalidation์ ๋ฐ์ดํฐ๋ฅผ stale
์ํ๋ก ๋ง๋๋ ์ญํ ๊น์ง๋ง ์ํํ๊ณ , ์ด๋ฅผ ํตํด ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ์กฐ๊ฑด์ด ํ์ํฉ๋๋ค. TanStack Query๋ stale
์ํ๊ฐ ๋ Query๋ฅผ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์๋์ผ๋ก ๊ฐฑ์ ํฉ๋๋ค. ๋จผ์ , Query๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ํ์ฑํ๋๊ฑฐ๋, ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ฐฝ์ผ๋ก ๋์์ฌ ๋ refetchOnWindowFocus
์ต์
์ด ํ์ฑํ๋์ด ์๋ค๋ฉด ๊ฐฑ์ ์ด ์ด๋ฃจ์ด์ง๋๋ค. ๋ํ, ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋ณต๊ตฌ๋์์ ๋ refetchOnReconnect
์ต์
์ด ์ค์ ๋์ด ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ง์ฝ ์ด๋ฌํ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์๋๋ค๋ฉด, refetchQueries
๋ฅผ ํธ์ถํ์ฌ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ฉด ๋ฉ๋๋ค.
์ด์ฒ๋ผ TanStack Query๋ Query Invalidation์ ํ์ฉํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๋ํญ ์ค์ ๋๋ค. ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๋ณต์กํ ๋ก์ง์ ์์ฑํ ํ์ ์์ด, ์ค์ ์ ํตํด ํ์ํ ๋ฐ์ดํฐ ๊ฐฑ์ ์์ ์ ๊ฐ๋จํ ์ ์ดํ ์ ์์ต๋๋ค.
TanStack Query๋ Mutation๊ณผ Query Invalidation์ ๊ธด๋ฐํ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ํ์๋ ์ต์ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. Mutation์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ฅํ๊ฑฐ๋ ์์ ํ๋ ์์ ์ ์ฒ๋ฆฌํ๋ฉฐ, ์ฑ๊ณต์ ์ผ๋ก ์์ ์ด ์๋ฃ๋๋ฉด ๊ด๋ จ๋ Query๋ฅผ ์๋์ผ๋ก ๋ฌดํจํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ํด ์ถ๊ฐ์ ์ธ ๋ก์ง์ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ก์ด ์ ์ ๋ฅผ ์ถ๊ฐํ ๋ค ์ ์ ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด, Mutation์ ์ฑ๊ณต ์ฝ๋ฐฑ์์ invalidateQueries
๋ฅผ ํธ์ถํ์ฌ ํด๋น Query๋ฅผ ๋ฌดํจํํ ์ ์์ต๋๋ค.
const mutation = useMutation({
mutationFn: addUser,
onSettled: () => {
queryClient.invalidateQueries({ queryKey: ["users"] });
},
});
const handleAddUser = async () => {
await mutation.mutateAsync(newUserData);
};
์ ์ฝ๋๋ ์๋ก์ด ์ ์ ๋ฅผ ์ถ๊ฐํ ํ, ["users"]
๋ผ๋ Query Key๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ stale ์ํ๋ก ์ ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ ๋ชฉ๋ก์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ์์ ์๋์ผ๋ก ์ต์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋ฉ๋๋ค.
์ด๋ฌํ Query Invalidation์ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ๊ฐ์ํํ ๋ฟ๋ง ์๋๋ผ, ๋คํธ์ํฌ ์์ฒญ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ Query๋ง ๊ฐฑ์ ํ๋ฏ๋ก ๋ถํ์ํ ์์ฒญ์ด ์ค์ด๋ค๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ๊ฐ์ ๋ฉ๋๋ค. TanStack Query๋ ์ด๋ฅผ ํตํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉด์๋, ๋คํธ์ํฌ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
TanStack Query๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๊ฐฑ์ ํ๋ ๋๊ตฌ๋ฅผ ๋์ด, ์๋ฒ ์ํ ๊ด๋ฆฌ๋ฅผ ์ฒด๊ณํํ๋ ์๋ก์ด ๊ธฐ์ค์ ์ ์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์บ์ฑํ๊ณ , ํ์ํ ๋๋ง ๊ฐฑ์ ํ๋ฉฐ, ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์์ ํ๋ ํ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ก์ง์ ๊ตฌํํ๋ ๋ถ๋ด์์ ๋ฒ์ด๋, ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ๋ ๋ชฐ์ ํ ์ ์์ต๋๋ค. ๋ํ, TanStack Query๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๊ฐฑ์ ํ๋ ์ญํ ์ ๋์ด, ์๋ฒ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ฐ์ดํฐ์ ํน์ฑ๊ณผ ์๊ตฌ ์ฌํญ์ ๋ง์ถฐ ์ ์ฐํ๊ฒ ์ค์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ค๋๋ค.
์๋ฒ ์ํ ๊ด๋ฆฌ๋ก ์ธํ ์ด๋ ค์์ ๋๋ผ๊ณ ์๋ค๋ฉด, TanStack Query๋ฅผ ๋์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํด ๋ณด์ธ์. ๊ฐ๋ฐ ๊ฒฝํ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ, ๋ ๋ง๋ฆฌ์ ํ ๋ผ๋ฅผ ํ ๋ฒ์ ์ก์ ์ ์์๊ฑฐ์์ ๐ฐโ๏ธ