๋จผ์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๊ฐ ๋ญํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ์ง๋ฅผ ๊ฐ๋ณ๊ฒ ์ค๋ช ํ์๋ฉด, ๋ฐ์ดํฐ Fetching, ์บ์ฑ, ๋๊ธฐํ, ์๋ฒ ์ชฝ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ ๋ฑ์ ์ฝ๊ฒ ๋ง๋ค์ด ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์ด์ ์ ๋ด๊ฐ ๋ค๋ค๋ดค๋ Redux์๋ ๋ค๋ฅด๊ฒ ํด๋ผ์ด์ธํธ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ์๋ฒ ๋ฐ์ดํฐ๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋์์ค๋ค.
๊ณ ๋ฏผ ๋์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ๋์ ํ๊ฒ๋ ํ๋ฆ์ ์๋์์ ์์ธํ ์ด์ ์ ์ ์ฉํด๋ณด๋ ์ด๋ ๋์ง ์์๋ณด๋๋ก ํ์!
์ง๋ 5์ฐจ ๋ฐ๋ชจ๋ฐ์ด ๋, ๋ฐฑ์๋์ ์ฟผ๋ฆฌ ๊ฐ์ ์ผ๋ก API Response์ ๋ณ๊ฒฝ์ด ์์๋ค. ๊ทธ๋์ ๋ฉ์ธํ์ด์ง์์ ํ ์์ธ ํ์ด์ง๋ก ๋ค์ด๊ฐ ๋, ํ ์์ธ ์ ๋ณด๋ฅผ ์๋ก ์์ฒญํด์ผํ๊ธฐ์ ํ๋ฉด ๊น๋นก์์ด ๋ฐ์ํ๋ค.
์ถ๊ฐ์ ์ผ๋ก ํ ํํฐ๋ง ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด์๋ ํ์ด ํํฐ๋ง์ด ๋๋ ๋์, ํํฐ๋ง ๋๊ธฐ ์ ํ ํ๋ฉด์์ ๊ฐ๋งํ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ด์ผํ๋ ์ํ๊ฐ ๋ฐ์ํ๋ค.
์ฌ์ฉ์๊ฐ ๋๋ผ๊ธฐ์ ๋ต๋ตํ ์ ์ด ์์ ๊ฒ ๊ฐ์ โ์ค์ผ๋ ํค UIโ๋ฅผ ํ์ฉํ๋ ค๊ณ ๋ง์์ ๋จน์์ผ๋, ์ง๊ธ ์ฝ๋๋ ๊ฝค๋ ๋ช ๋ นํ์ด๋ผ ์ปดํฌ๋ํธ ๋ ๋๋ง ์ ์ ๋ถ๊ธฐ๋ฌธ์ ํตํด ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํ๋ค.
const Components = () => {
// ...
if (isLoading) return <Loading />
if (isError) return <Error />
return (
<div>data</div>
)
}
๊ฐ๋จํ ์์ฑํด๋ณด๋ฉด ์ด๋ฐ์์ด๋ค!
ํ์ง๋ง ํ์ด์ง์์ ๊ฐ์ ธ์ค๋ ์ํ๊ฐ ๋ง๋ค๋ฉด isLoading
, isError
๊ฐ์ด ๋ง์์ง๊ณ ์ผ์ผํ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผํ๋ค. ๊ฐ์ด ๋์ด๋๋ฉด ๋๊ฐ ๋จผ์ ๋์ฐฉํ ์ง ๋ชจ๋ฅด๋ ๋น๋๊ธฐ์ ๊ฒฝ์ ์ํ๋ ์๋นํ ๊ณจ์น ์ํ ๋ฌธ์ ๊ฐ ๋์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ธ์ค๋ ์ํ๋ฅผ ํ๋๋ก ๋ฌถ์ด์ ์ ์ฒด๊ฐ ๋ก๋ฉ๋๊ธฐ ์ ๊น์ง ๋ ๋๋ง์ ํ์ง ์์์ผํ๋ค. ํ์ง๋ง ์ปดํฌ๋ํธ๊ฐ ์๋ ๋ท๋ฉด์์๋ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๊ฐ ๋์ด๋๊ณ , ๋ฌด์๋ณด๋ค ์์ ๊ฐ์ ๋ถ๊ธฐ์ฒ๋ฆฌ๊ฐ ์ปดํฌ๋ํธ์์ ๋์ด๋๊ณ ๋น์ฆ๋์ค ๋ก์ง์์ ์๋ฌ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๊ณ ๋์ด๋๋ฉด์ ์ปดํฌ๋ํธ์ ํจ์๊ฐ ํ๋ ์ญํ ์ด ์ ์ ๊ฐ๋ ค์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค!
์ด๋ฅผ ์ํด ๋ฆฌ์กํธ์ Suspense
์ ErrorBoundary
๋ฅผ ์ด์ฉํด ๋น๋๊ธฐ๋ก ๊ฐ์ ธ์ค๋ ์ํ์ ์ฑ๊ณต, ์คํจ, ๋ก๋ฉ์ ๊ดํ ์ฒ๋ฆฌ๋ฅผ ์ญํ ์ ๋ง๋ ๊ณณ์ ์์ํด ์ฝ๋๋ฅผ ์ ์ธ์ ์ผ๋ก ๋ฆฌํฉํฐ๋งํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ คํ๋ค.
๊ทธ๋ฌ๋, ๋ ๋ฒจ๋ก๊ทธ์์๋ ํ์ ์ปดํฌ๋ํธ๋ฅผ ๋ฉ์ฒญํ๊ฒ ๋ง๋ค๊ธฐ ์ํด Page
๋จ์์ ์ต์์ ์ปดํฌ๋ํธ์์๋ง ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ํ์ ์ปดํฌ๋ํธ๋ฅผ ์ด๋ฅผ ๋ฐ์์ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ์ญํ ๋ง ํ๋๋ก ์ค๊ณํ๋ค.
Suspense
๋ฅผ ๋์
ํ๋ คํ์ง๋ง, ์ด๋ฏธ ์ต์์ ์ปดํฌ๋ํธ์ธ Page
์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ํ์ ์ปดํฌ๋ํธ์์ Suspense
๋ฅผ ์ฌ์ฉํ ์๊ฐ ์๋ค.
์ด๋ฅผ ์ํด์๋ ์์ ์ปดํฌ๋ํธ์์ ๋ชจ๋ ์ํ๋ฅผ ๋ฐ์์ ์๊ฒผ๋ ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ , ํ์ ์ปดํฌ๋ํธ๊ฐ ์์ ์ด ํ์ํ ์ํ๊ฐ์ ์ง์ ์์ฒญํ๋๋ก ํ๋๋ก ํด์ผํ๋ค.
์ฆ ์ ์ฒด์ ์ธ ์ํ๊ด๋ฆฌ์ ๋ฐฉ์์ด ๋ณํํด์ผํ๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ๋ค์ ๋ฆฌํฉํฐ๋ง ๊ณผ์ ์์ ์ธ์งํ๊ณ ๋์ ํ ์ ์๋ ๊ฐ์ฅ ์ ํฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ผ๋ ๊ฒฐ๋ก ์ด ๋ด๋ ค์ก๋ค.
์์ง๊น์ง ErrorBoundary
๋ ๋์
์ ํ์ง ๋ชปํ๊ณ , (์๋ง ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ฐ๊ธฐ์ ์ข ์์ฌ์ด ๋ถ๋ถ๋ค์ด ์กฐ๊ธ ์์ด์ ์ด์ง ๊ฐ์กฐํด์ ์ฐ๊ฒ ๋ ๊ฒ ๊ฐ๋ค) Suspense
์ ๊ฒฝ์ฐ์๋ ๋๋ถ๋ถ ๋์
ํ๋ค. ์๊ฐ๋ณด๋ค ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๊ฐ ์ง์ํ๋ ๊ธฐ๋ฅ๋ค์ด ๋ง์์ ๋ณต์กํ๋ ๋ฐ์ดํฐ fetching๊ณผ ์ปค์คํ
ํ
๋ค์ด ๊ฐ์ํ๋๋ ํจ๊ณผ๋ฅผ ๋ฐฐ์ฐ ๋ง์ด ๋ดค๋ค.
๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ๋์ ํ๋ฉด์ ์ด์ ์ ๊ฐ์ง๊ณ ์์๋ ๋ฌธ์ ์ ๋ค์ด ํด๊ฒฐ์ด ๋์๋์ง ํ์ด์ง ์ปดํฌ๋ํธ ์ฝ๋์ ๋ณํ๋ฅผ ์ดํด๋ณด์!
ํด๋น ์ฌ์ง์ ์ฝ๋๋ InterviewTeams
ํ์ด์ง๋ก, ์ ์ฒด ํ์ ๋ถ๋ฌ์ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ด๋ค. ๋ณด๋ค์ํผ, ์ฌ๋ฌ ๋ฌธ์ ์ ์ด ์์๋๋ฐ ํ๋์ฉ ์ดํด๋ณด์.
isActive
๋ status(์ ์ฒด ๋ฐ์ดํฐ fetching์ด ์ฑ๊ณตํ๋์ง, ์์ง response๊ฐ ๋์ฐฉํ์ง ์์๋์ง, ์คํจํ๋์ง๋ฅผ ๊ฐ์ง๋ ๊ฐ์ด๋ค.)๋ฅผ ํตํด "์ ์ฒด ํ"์ ์ํ๋ฅผ ์๋ ค์ฃผ๊ณ , ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ์์๋ ์๋ง๋ ์ฒ๋ฆฌ๋ฅผ ์ผ์ผํ ํด์ฃผ์ด์ผ ํ๋ค.
์ ์ฒด ํ์ ๋ฐ์ดํฐ์ ์ด๋ค ์ ํ์ ํ(์งํ์ค, ์ข
๋ฃ, ๋)์ ๋ถ๋ฌ์ค๋์ง๋ ํ์ด์ง ์ปดํฌ๋ํธ์์ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํด ์๋๋ก ๋ด๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ Suspense
๋ ErrorBoundary
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ด์ ๋ ์์ ์๋ ๋ฌธ์ ์ ๋ค์ ์ด๋์ ๋ ํด๊ฒฐํ์์ ์ดํด๋ณผ ์ ์๋ค!
๋ ์ด์ isActive
์ status ํ๋กํผํฐ๋ ํ์ ์์ด์ก๋ค! ๋น์ฐํ ๊ฒ์ด ํด๋น ์ปดํฌ๋ํธ์์ ์ ์ฒด ํ ๋ฐ์ดํฐ๋ฅผ fetching์ ํ์ง ์๊ณ ํ์ ์ปดํฌ๋ํธ์์ ์ญํ ์ ๋๊ฒจ ์ฃผ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Suspense๋ฅผ ์ฌ์ฉํด ํ์ ์ปดํฌ๋ํธ์์ ํ์ํ ์ํ๋ฅผ ์์ง ๋ถ๋ฌ์ค์ง ๋ชปํ๋ค๋ฉด <Loading />
์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ๊น๋ํ๊ฒ ์ฒ๋ฆฌ๊ฐ ๋๋ค! ์ด์ ErrorBoundary๋ง ์ ์ฉ๋๋ค๋ฉด ๋น์ฆ๋์ค ๋ก์ง์ ์๋ ๋ณต์กํ ์๋ฌ ์ฒ๋ฆฌ ์ฝ๋๋ค๋ ๊ฑท์ด๋ผ ์ ์์ ๊ฒ์ด๋ค.
์์ง ๋ถ์กฑํ๊ฑฐ๋, ๋ชจ๋ฅด๋ ๋ถ๋ถ๋ค์ด ๋ง์์ ๋ค์์ฃผ์ ๋ง์ง๋ง ๋ฐ๋ชจ ์ค๋น๊ฐ ๋๋๋ค๋ฉด ํ ๋ฒ ๋ ์ด ์ฃผ์ ๋ก ํฌ์คํ ์ ํ๊ณ ์ถ๋ค!