๋ฆฌ์กํธ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด, ๊ธ๋ก๋ฒ ์ํ ์ด๊ธฐํ ๊ณผ์ ์์ ์์์น ๋ชปํ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ณดํต Zustand๋ฅผ ์ ์ ์ ์ํ ์ ์ฅ์ ์ํด ์ฌ์ฉํ๊ณ React-query๋ฅผ ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๊ทธ๋์ ์ฒ์์๋ ๋จ์ํ ๋ ๋ค ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉฐ ์ฌ์ฉํ๊ฒ ๋๋ค.
ํ์ง๋ง, ์ด ๋์ ์ด๊ธฐํํ๋ ๊ณผ์ ์์ ์ฐจ์ด์ ์ ๋๋ผ๊ฒ ๋๋ค.
ํนํ, React Query๊ฐ ๋จ์ํ ์ํ ๊ด๋ฆฌ ํด์ด ์๋ '์บ์์ ๊ตฌ๋ ์ ๊ด๋ฆฌํ๋ ํด'์ด๋ผ๋ ์ ์ ๊นจ๋ซ๊ฒ ๋๋ค. ์ด ๋๋ฌธ์ React Query์ ์บ์๋ ๋๋๋ก ์ถ๊ฐ์ ์ธ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค.
์ด ๊ธ์ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ์ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง์ ๋ํด ๋ค๋ฃจ๊ณ ์ ํ๋ค.
const onLogout = async () => {
await logout(); // ๋ก๊ทธ์์ api
resetUser(); // ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ์ ์ ๋ฐ์ดํฐ ์ด๊ธฐํ Zustand code
queryClient.clear(); // ์บ์ ์ด๊ธฐํ๋ฅผ ์ํ React Query code
router.push('/home'); // Navigate
};
์ผํ ๋ณด๋ฉด ๋ฌธ์ ๊ฐ ์์ด ๋ณด์ธ๋ค. ํ์ง๋ง ์ค์ ๋ก ์คํํด๋ณด๋ฉด router.push()
์ ๊ด๋ จ๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ค์ํ ์๋ ๋์ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ ํ์ธํ ์ ์๋ค.
const onLogout = async () => {
await logout();
resetUser(); // Zustand
Promise.resolve().then(() => queryClient.clear()); // React Query
router.push('/home');
};
๊ทธ๋ฆฌ๊ณ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฐ ์๋ฌธ์ด ์๊ธด๋ค.
"์ React Query ์ฝ๋๋ Promise๊ฐ ํ์ํ๊ณ , Zustand ์ฝ๋๋ Promise ์์ด๋ ์ ์๋ํ ๊น?"
resetUser()
๋ฅผ ์คํํ๋ฉด Zustand๋:
1. ์คํ ์ด์ ์ํ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ๋ณํ์ํจ๋ค.
2. ์ํ๋ฅผ ๊ตฌ๋
์ค์ธ ์ปดํฌ๋ํธ๋ค์๊ฒ ๋ฆฌ๋ ๋๋ง์ ์์ฒญํ๋ค.
3. ์ด๋ฏธ ์ธ๋ง์ดํธ๋ ์ปดํฌ๋ํธ๋ ๊ตฌ๋
์ด ์ทจ์๋์ด ๋ฌด์๋๋ค.
queryClient.clear()
์ ์คํํ๋ฉด:
1. ์บ์๋ก๋ถํฐ ์ฟผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฌดํจํํ๋ค.
2. ํ์ฑํ ์ํ์ ๊ตฌ๋
์๋ค์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฆฐ๋ค.
3. ์งํ ์ค์ธ ๋คํธ์ํฌ ์์ฒญ, ์ฌ์๋, ๋ฆฌํ์น๋ฅผ ์ฒ๋ฆฌํ๋ค.
์ฃผ์ ๋ฌธ์ ๋ queryClient.clear()
๊ฐ ์คํ๋๋ ๋์, router.push()
๋ก ์ธํด ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋๋ฉด ๋ ์ด์ค ์ปจ๋์
์ด ๋ฐ์ํ ์ ์๋ค๋ ์ ์ด๋ค.
โ๋ ์ด์ค ์ปจ๋์ โ์ด๋ ๋ ๊ฐ ์ด์์ ์์ ์ด ๋์์ ์คํ๋๋ฉด์, ์คํ ์์๋ ํ์ด๋ฐ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์ํฉ์ ๋งํ๋ค. ์ด ๊ฒฝ์ฐ, React Query ์บ์๋ฅผ ํด๋ฆฌ์ดํ๋ ๊ฒ๊ณผ ๋ผ์ฐํธ์ ์ํ ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ๊ฐ ๊ฒน์น ์ ์๋ค. ์ด๊ฒ์ ์์์น ๋ชปํ ๋์์ด๋ ์ค๋ฅ๋ก ์ด์ด์ง ์ ์๋ค.
๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด:
Promise.resolve().then(() => queryClient.clear());
์บ์ ํด๋ฆฌ์ด๋ ๋ค์ ๋ง์ดํฌ๋กํ์คํฌ์์ ์งํ๋๋ค.
์ด๋ก ์ธํด ๋ฆฌ์กํธ๊ฐ ๋ค์ ์์
์ ๋จผ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
1. router.push()
๋ก ์ธํด ๋ฐ์ํ ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ๋ฅผ ์๋ฃํ๋ค.
2. React Query์ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ๋ค์ด ๊ตฌ๋
์ทจ์๋ฅผ ์๋ฃํ๋ค.
3. ๊ทธ ์ดํ, ์งํ ์ค์ธ ๋ฆฌ์กํธ ๋ผ์ดํ ์ฌ์ดํด๊ณผ ๊ฐ์ญ ์์ด, ์์ ํ๊ฒ ์บ์๋ฅผ ํด๋ฆฌ์ดํ๊ฒ ํ๋ค.
์ด๋ฌํ ๋น๋๊ธฐ ์ง์ฐ ์ฒ๋ฆฌ๊ฐ ๋ ์ด์ค ์ปจ๋์ ์ ํผํ๋ ํต์ฌ์ด๋ค.
Zustand ์ํ ๋ณ๊ฒฝ์ ๋๊ธฐ์ ์ด๊ณ ๋ผ์ดํ ์ฌ์ดํด์ ๋ฏผ๊ฐํ๊ฒ ๋ฐ์ํ์ง ์๋๋ค.
resetUser()
์คํ ์, ๋ง์ดํธ๋ ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง๋๋ค.์ด๋ ๋ฏ ๊ฐ๋จํ ๊ตฌ์กฐ ๋๋ถ์, ๋ค๋น๊ฒ์ด์ ์ด๋ ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด๊ณผ ๊ด๊ณ์์ด ์ธ์ ๋ ์์ ํ๊ฒ ์ํ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
Zustand๋ ๋๊ธฐ์ ์ด๊ณ ๋จ์ํ ๊ตฌ์กฐ ๋๋ถ์ ์์ ํ๊ฒ ์ด๊ธฐํํ ์ ์์ง๋ง, React Query๋ ์บ์์ ๋น๋๊ธฐ ์์ฒญ ์ํ๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด๊ณผ ๋ง๋ฌผ๋ ค ๋ ์ด์ค ์ปจ๋์ ์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด, ๋น๋๊ธฐ์ ์ผ๋ก ์บ์ ์ด๊ธฐํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฑ์ ์ฃผ์๊ฐ ํ์ํ๋ค.