Next.js Error Boundaries๋ฅผ ํตํ UI ๊ฒฉ๋ฆฌ๋ก White Screen of Death ์์ ์ฐจ๋จ
Stop the White Screen of Death: Master Next.js Error Boundaries ๐ก๏ธ
AI ์์ฝ
Context
React์ ๊ธฐ๋ณธ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ฅธ ๋จ์ผ ์ปดํฌ๋ํธ ์ค๋ฅ ์ ์ ์ฒด Component Tree๊ฐ ์ธ๋ง์ดํธ๋๋ ๊ตฌ์กฐ์ ์ทจ์ฝ์ ์กด์ฌ. ํนํ B2B SaaS ๋์๋ณด๋์ ๊ฐ์ด ๋ณต์กํ ์ธํฐํ์ด์ค์์ ๋นํต์ฌ ์์ ฏ์ ์ฅ์ ๊ฐ ์ ์ฒด ์๋น์ค ์ค๋จ์ผ๋ก ์ด์ด์ง๋ ๊ฐ์ฉ์ฑ ๋ฌธ์ ๋ฐ์.
Technical Solution
- Next.js App Router์ ํ์ผ ์์คํ
๊ธฐ๋ฐ ๋ผ์ฐํ
์ ํ์ฉํ
error.tsx๋ฐฐ์น๋ก Segment ๋จ์ Error Boundary ๊ตฌ์ถ - ์ค๋ฅ ๋ฐ์ ์ง์ ์์ ๊ฐ์ฅ ๊ฐ๊น์ด
error.tsx๋ฅผ ํ์ํ๋ ๊ณ์ธต์ Fallback ๊ตฌ์กฐ ์ค๊ณ๋ฅผ ํตํ ์ํฅ ๋ฒ์ ์ต์ํ use client์ง์์ด๋ฅผ ํตํ Client Component ๊ตฌํ์ผ๋ก ๋ฐํ์ ์์ธ ์บก์ฒ ๋ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ ์ดreset()ํจ์๋ฅผ ํตํ ์คํจํ ์ธ๊ทธ๋จผํธ์ ์ฌ๋ ๋๋ง ์๋๋ก ์๋น์ค ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ ์ ๊ณต- ๋ฃจํธ ๋๋ ํ ๋ฆฌ ๋ด
global-error.tsx๋ฐฐ์น๋ฅผ ํตํ ์ต์์ Layout ๋ถ๊ดด ๋๋น ์ต์ข ๋ฐฉ์ด์ ๊ตฌ์ถ - Sentry ๋ฑ ์ธ๋ถ ๋ก๊น
์๋น์ค ์ฐ๋์ ์ํ
useEffect๊ธฐ๋ฐ์ ์๋ฌ ํธ๋ํน ๋ก์ง ํตํฉ
์ค์ฒ ํฌ์ธํธ
1. ๋ฐ์ดํฐ ํ์นญ ์ํ๋๊ฐ ๋์ ๋ ๋ฆฝ์ ์์ ฏ ๋จ์๋ก `error.tsx`๋ฅผ ๋ฐฐ์นํ๋๊ฐ
2. ์ต์์ ๋ฃจํธ์ `global-error.tsx`๋ฅผ ๊ตฌํํ์ฌ ์ต์ ์ ์ํฉ์์๋ ๋ธ๋๋ UI๋ฅผ ์ ์งํ๋๊ฐ
3. ์๋ฌ UI ๋ด์ `reset` ํจ์๋ฅผ ํฌํจํ์ฌ ์ฌ์ฉ์๊ฐ ์๋์ผ๋ก ๋ณต๊ตฌ๋ฅผ ์๋ํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋๊ฐ
4. ์๋ฌ ์บก์ฒ ์ ์ธ๋ถ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ก ์ ๋ฐํ ๋ก๊ทธ๋ฅผ ์ ์กํ๋ ๋ก์ง์ด ํฌํจ๋์๋๊ฐ