HTTP ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ปค์คํ ์๋ฌ ํธ๋ค๋ง ์์คํ ์ ๊ตฌํํ์ต๋๋ค. ํนํ 401 Unauthorized ์๋ฌ์ ์ด์ ์ ๋ง์ถ์ด, ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋์ง ์์ ์ํ์์ API ์์ฒญ์ ํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ React Router ์๋ฌ UI ๋์ ์๋์ผ๋ก Discord ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ๋๋๋ก ํ์ต๋๋ค.
์ด ๊ตฌํ์ ์๋ฌ ์ํ ์ฝ๋์ ๋ฐ๋ฅธ ํจํด ๋งค์นญ์ ์ํด ts-pattern์ ์ฌ์ฉํ๊ณ , ์ปดํฌ๋ํธ ๋ ๋ฒจ์์ ์๋ฌ๋ฅผ ์บ์นํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํด react-error-boundary๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
- ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
- ์ฝ๋ ๋ฆฌํฉํ ๋ง
- ํ ์คํธ ์ถ๊ฐ, ํ ์คํธ ๋ฆฌํฉํ ๋ง
- ๋น๋ ๋ถ๋ถ ํน์ ํจํค์ง ๋งค๋์ ์์
-
ํจํค์ง ์ค์น
- ts-pattern: HTTP ์๋ฌ ์ํ ์ฝ๋์ ๋ฐ๋ฅธ ํจํด ๋งค์นญ์ ์ํด ์ค์น
- react-error-boundary: ์ปดํฌ๋ํธ ๋ ๋ฒจ์์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ค์น
-
์ปค์คํ ์๋ฌ ํด๋์ค ์ ์
- UnauthorizedError ํด๋์ค ์์ฑ (401 ์๋ฌ ์ฒ๋ฆฌ์ฉ)
- ky์ HTTPError๋ฅผ ์์ํ์ฌ ๊ธฐ์กด ์๋ฌ ์ฒ๋ฆฌ์ ํธํ์ฑ ์ ์ง
-
ky ํด๋ผ์ด์ธํธ ์ค์ ์ ๋ฐ์ดํธ
- beforeError ํ ์์ ts-pattern์ ์ฌ์ฉํ์ฌ HTTP ์๋ฌ ์ํ ์ฝ๋์ ๋ฐ๋ผ ์ฒ๋ฆฌ
- 401 ์๋ฌ ๋ฐ์ ์ UnauthorizedError๋ก ๋ณํ
-
GlobalErrorFallback ์ปดํฌ๋ํธ ์์ฑ
- ์๋ฌ ์ ํ์ ๋ฐ๋ฅธ UI ํ์
- UnauthorizedError ๋ฐ์ ์ /discordlogin์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ
- ์คํ์ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ UI ๊ตฌํ
-
App.tsx์ ErrorBoundary ํตํฉ
- react-error-boundary์ ErrorBoundary๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋ํ
- GlobalErrorFallback์ FallbackComponent๋ก ์ค์
-
ํ ์คํธ ์ถ๊ฐ
- GlobalErrorFallback ์ปดํฌ๋ํธ์ ๋ํ ์คํ ๋ฆฌ๋ถ ์คํ ๋ฆฌ ์ถ๊ฐ
- ๋ค์ํ ์๋ฌ ์๋๋ฆฌ์ค ํ ์คํธ (์ผ๋ฐ ์๋ฌ, HTTP ์๋ฌ, ์ธ์ฆ ์๋ฌ)