๐Ÿฅ€ ๋ ˆ๋ฒจ๋กœ๊ทธ์˜ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ๋„์ž…๊ธฐ

thumb_hyeokยท2022๋…„ 10์›” 9์ผ
0

๐Ÿ”ฅ WoowaCourse

๋ชฉ๋ก ๋ณด๊ธฐ
5/10

๐Ÿค” ์™œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ?

๋จผ์ € ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๊ฐ€ ๋ญํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ์ง€๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, ๋ฐ์ดํ„ฐ Fetching, ์บ์‹ฑ, ๋™๊ธฐํ™”, ์„œ๋ฒ„ ์ชฝ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ๋“ฑ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ด์ „์— ๋‚ด๊ฐ€ ๋‹ค๋ค„๋ดค๋˜ Redux์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋„์™€์ค€๋‹ค.

๊ณ ๋ฏผ ๋์— ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ๋œ ํ๋ฆ„์„ ์•„๋ž˜์—์„œ ์ƒ์„ธํ•œ ์ด์œ ์™€ ์ ์šฉํ•ด๋ณด๋‹ˆ ์–ด๋• ๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž!


1๏ธโƒฃ ์„ ์–ธ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ

์ง€๋‚œ 5์ฐจ ๋ฐ๋ชจ๋ฐ์ด ๋•Œ, ๋ฐฑ์—”๋“œ์˜ ์ฟผ๋ฆฌ ๊ฐœ์„ ์œผ๋กœ API Response์˜ ๋ณ€๊ฒฝ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ”์ธํŽ˜์ด์ง€์—์„œ ํŒ€ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐˆ ๋•Œ, ํŒ€ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์ƒˆ๋กœ ์š”์ฒญํ•ด์•ผํ–ˆ๊ธฐ์— ํ™”๋ฉด ๊นœ๋นก์ž„์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ํŒ€ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ๋„ ํŒ€์ด ํ•„ํ„ฐ๋ง์ด ๋˜๋Š” ๋™์•ˆ, ํ•„ํ„ฐ๋ง ๋˜๊ธฐ ์ „ ํŒ€ ํ™”๋ฉด์—์„œ ๊ฐ€๋งŒํžˆ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์–ด์•ผํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋Š๋ผ๊ธฐ์— ๋‹ต๋‹ตํ•œ ์ ์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ โ€œ์Šค์ผˆ๋ ˆํ†ค UIโ€๋ฅผ ํ™œ์šฉํ•˜๋ ค๊ณ  ๋งˆ์Œ์„ ๋จน์—ˆ์œผ๋‚˜, ์ง€๊ธˆ ์ฝ”๋“œ๋Š” ๊ฝค๋‚˜ ๋ช…๋ นํ˜•์ด๋ผ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์ „์— ๋ถ„๊ธฐ๋ฌธ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ–ˆ๋‹ค.

const Components = () => {
	// ...

	if (isLoading) return <Loading />
	if (isError) return <Error />
		
	return (
		<div>data</div>
	)
} 

๊ฐ„๋‹จํžˆ ์ž‘์„ฑํ•ด๋ณด๋ฉด ์ด๋Ÿฐ์‹์ด๋‹ค!

ํ•˜์ง€๋งŒ ํŽ˜์ด์ง€์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ƒํƒœ๊ฐ€ ๋งŽ๋‹ค๋ฉด isLoading , isError ๊ฐ’์ด ๋งŽ์•„์ง€๊ณ  ์ผ์ผํžˆ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ–ˆ๋‹ค. ๊ฐ’์ด ๋Š˜์–ด๋‚˜๋ฉด ๋ˆ„๊ฐ€ ๋จผ์ € ๋„์ฐฉํ•  ์ง€ ๋ชจ๋ฅด๋Š” ๋น„๋™๊ธฐ์˜ ๊ฒฝ์Ÿ ์ƒํƒœ๋„ ์ƒ๋‹นํžˆ ๊ณจ์น˜ ์•„ํ”ˆ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ƒํƒœ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์ „์ฒด๊ฐ€ ๋กœ๋”ฉ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ Œ๋”๋ง์„ ํ•˜์ง€ ์•Š์•„์•ผํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•„๋‹Œ ๋’ท๋ฉด์—์„œ๋Š” ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ , ๋ฌด์—‡๋ณด๋‹ค ์œ„์™€ ๊ฐ™์€ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๊ฐ€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋Š˜์–ด๋‚˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋ณต๋˜๊ณ  ๋Š˜์–ด๋‚˜๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ์ˆ˜๊ฐ€ ํ•˜๋Š” ์—ญํ• ์ด ์ ์  ๊ฐ€๋ ค์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค!

์ด๋ฅผ ์œ„ํ•ด ๋ฆฌ์•กํŠธ์˜ Suspense ์™€ ErrorBoundary ๋ฅผ ์ด์šฉํ•ด ๋น„๋™๊ธฐ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ƒํƒœ์˜ ์„ฑ๊ณต, ์‹คํŒจ, ๋กœ๋”ฉ์— ๊ด€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์—ญํ• ์— ๋งž๋Š” ๊ณณ์— ์œ„์ž„ํ•ด ์ฝ”๋“œ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋ คํ–ˆ๋‹ค.


2๏ธโƒฃ โ€œwaterfallโ€์‹ ์ƒํƒœ๊ด€๋ฆฌ์˜ ๋ฌธ์ œ์ 

๊ทธ๋Ÿฌ๋‚˜, ๋ ˆ๋ฒจ๋กœ๊ทธ์—์„œ๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฉ์ฒญํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Page ๋‹จ์œ„์˜ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด๋ฅผ ๋ฐ›์•„์„œ ํ™”๋ฉด์„ ๊ทธ๋ ค์ฃผ๋Š” ์—ญํ• ๋งŒ ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค.

Suspense ๋ฅผ ๋„์ž…ํ•˜๋ คํ–ˆ์ง€๋งŒ, ์ด๋ฏธ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ Page ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ Suspense ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ๋ฐ›์•„์™€ ์ƒ๊ฒผ๋˜ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ด ํ•„์š”ํ•œ ์ƒํƒœ๊ฐ’์„ ์ง์ ‘ ์š”์ฒญํ•˜๋„๋ก ํ•˜๋„๋ก ํ•ด์•ผํ–ˆ๋‹ค.

์ฆ‰ ์ „์ฒด์ ์ธ ์ƒํƒœ๊ด€๋ฆฌ์˜ ๋ฐฉ์‹์ด ๋ณ€ํ™”ํ•ด์•ผํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋“ค์„ ๋ฆฌํŒฉํ„ฐ๋ง ๊ณผ์ •์—์„œ ์ธ์ง€ํ•˜๊ณ  ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๋ผ๋Š” ๊ฒฐ๋ก ์ด ๋‚ด๋ ค์กŒ๋‹ค.


๐Ÿฅ€ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ

์•„์ง๊นŒ์ง€ ErrorBoundary ๋Š” ๋„์ž…์„ ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , (์•„๋งˆ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ์—” ์ข€ ์•„์‰ฌ์šด ๋ถ€๋ถ„๋“ค์ด ์กฐ๊ธˆ ์žˆ์–ด์„œ ์‚ด์ง ๊ฐœ์กฐํ•ด์„œ ์“ฐ๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค) Suspense ์˜ ๊ฒฝ์šฐ์—๋Š” ๋Œ€๋ถ€๋ถ„ ๋„์ž…ํ–ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์•„์„œ ๋ณต์žกํ–ˆ๋˜ ๋ฐ์ดํ„ฐ fetching๊ณผ ์ปค์Šคํ…€ ํ›…๋“ค์ด ๊ฐ„์†Œํ™”๋˜๋Š” ํšจ๊ณผ๋ฅผ ๋ฐฐ์šฐ ๋งŽ์ด ๋ดค๋‹ค.

๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๋ฅผ ๋„์ž…ํ•˜๋ฉด์„œ ์ด์ „์— ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ ๋ฌธ์ œ์ ๋“ค์ด ํ•ด๊ฒฐ์ด ๋˜์—ˆ๋Š”์ง€ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ์˜ ๋ณ€ํ™”๋ฅผ ์‚ดํŽด๋ณด์ž!


๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ๋„์ž… ์ด์ „

ํ•ด๋‹น ์‚ฌ์ง„์˜ ์ฝ”๋“œ๋Š” InterviewTeams ํŽ˜์ด์ง€๋กœ, ์ „์ฒด ํŒ€์„ ๋ถˆ๋Ÿฌ์™€ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€์ด๋‹ค. ๋ณด๋‹ค์‹œํ”ผ, ์—ฌ๋Ÿฌ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž.

  1. isActive ๋Š” status(์ „์ฒด ๋ฐ์ดํ„ฐ fetching์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€, ์•„์ง response๊ฐ€ ๋„์ฐฉํ•˜์ง€ ์•Š์•˜๋Š”์ง€, ์‹คํŒจํ–ˆ๋Š”์ง€๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ’์ด๋‹ค.)๋ฅผ ํ†ตํ•ด "์ „์ฒด ํŒ€"์˜ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ฃผ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์•Œ๋งž๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ผ์ผํžˆ ํ•ด์ฃผ์–ด์•ผ ํ–ˆ๋‹ค.

  2. ์ „์ฒด ํŒ€์˜ ๋ฐ์ดํ„ฐ์™€ ์–ด๋–ค ์œ ํ˜•์˜ ํŒ€(์ง„ํ–‰์ค‘, ์ข…๋ฃŒ, ๋‚˜)์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”์ง€๋„ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•ด ์•„๋ž˜๋กœ ๋‚ด๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— Suspense ๋‚˜ ErrorBoundary ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.


๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ๋„์ž… ์ดํ›„

์ด์ œ๋Š” ์œ„์— ์žˆ๋˜ ๋ฌธ์ œ์ ๋“ค์„ ์–ด๋Š์ •๋„ ํ•ด๊ฒฐํ–ˆ์Œ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค!

  1. ๋” ์ด์ƒ isActive ์˜ status ํ”„๋กœํผํ‹ฐ๋Š” ํ•„์š” ์—†์–ด์กŒ๋‹ค! ๋‹น์—ฐํ•œ ๊ฒƒ์ด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „์ฒด ํŒ€ ๋ฐ์ดํ„ฐ๋ฅผ fetching์„ ํ•˜์ง€ ์•Š๊ณ  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์—ญํ• ์„ ๋„˜๊ฒจ ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  2. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Suspense๋ฅผ ์‚ฌ์šฉํ•ด ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•„์š”ํ•œ ์ƒํƒœ๋ฅผ ์•„์ง ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด <Loading /> ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋„๋ก ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‹ค! ์ด์ œ ErrorBoundary๋งŒ ์ ์šฉ๋œ๋‹ค๋ฉด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์žˆ๋Š” ๋ณต์žกํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋“ค๋„ ๊ฑท์–ด๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.


๐Ÿง ํ›„๊ธฐ

์•„์ง ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜, ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•„์„œ ๋‹ค์Œ์ฃผ์— ๋งˆ์ง€๋ง‰ ๋ฐ๋ชจ ์ค€๋น„๊ฐ€ ๋๋‚œ๋‹ค๋ฉด ํ•œ ๋ฒˆ ๋” ์ด ์ฃผ์ œ๋กœ ํฌ์ŠคํŒ…์„ ํ•˜๊ณ  ์‹ถ๋‹ค!

profile
์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 4๊ธฐ ์›น ํ”„๋ก ํŠธ์—”๋“œ

0๊ฐœ์˜ ๋Œ“๊ธ€