๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

๋ฆฌ์•กํŠธ JS์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ• ๐Ÿ’ป

by infomationtree 2025. 4. 9.
๋ฐ˜์‘ํ˜•

๋ฆฌ์•กํŠธ JS์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ•

๋ฆฌ์•กํŠธ JS๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์–ด์š”. ๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์š”.

 

๋ฆฌ์•กํŠธ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ 'Virtual DOM'์„ ์ด์šฉํ•ด ์‹ค์ œ DOM ์กฐ์ž‘์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ ์ด์—์š”. ์ƒํƒœ(state)์™€ ์†์„ฑ(props)์„ ์‚ฌ์šฉํ•ด ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์ฃ . ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋งค์šฐ ํ–ฅ์ƒ๋œ๋‹ต๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ์˜ ๋˜ ๋‹ค๋ฅธ ์žฅ์ ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํ™œ๋ฐœํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋„๊ตฌ๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์˜ˆ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Redux, ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Recoil ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ด์ฃ .

 

์ด ๊ธ€์—์„œ๋Š” ๋ฆฌ์•กํŠธ JS์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๋ถ€ํ„ฐ ์ฃผ์š” ํŠน์ง•, ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ, ์ƒํƒœ ๊ด€๋ฆฌ, ํ›… ํ™œ์šฉ, ๋ผ์šฐํŒ…, ์„ฑ๋Šฅ ์ตœ์ ํ™”๊นŒ์ง€ ์ „๋ฐ˜์ ์ธ ๋‚ด์šฉ์„ ๋‹ค๋ค„๋ณผ๊ฒŒ์š”!

๋ฆฌ์•กํŠธ JS์˜ ์†Œ๊ฐœ์™€ ํŠน์ง• ๐Ÿš€

๋ฆฌ์•กํŠธ JS๋Š” 2013๋…„ ํŽ˜์ด์Šค๋ถ์—์„œ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ•œ ์ดํ›„ ๋น ๋ฅด๊ฒŒ ์ธ๊ธฐ๋ฅผ ๋Œ์—ˆ์–ด์š”. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์žˆ์–ด ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•˜๋ฉด์„œ ๋ชจ๋˜ ์›น ๊ฐœ๋ฐœ์˜ ํ•„์ˆ˜ ์š”์†Œ๋กœ ์ž๋ฆฌ ์žก์•˜์ฃ .

 

๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ์€ '์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜'์™€ 'Virtual DOM'์ด์—์š”. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚œ ๋ถ€๋ถ„๋งŒ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผฐ์–ด์š”.

 

๋˜ํ•œ, JSX(JavaScript XML)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTML๊ณผ JavaScript๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ํฐ ์žฅ์ ์ด์—์š”. ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ๋ณต์žกํ•œ UI๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ, ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ผ์šฐํŒ… ๊ฐ™์€ ๋ถ€๋ถ„์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์š”. ๋Œ€ํ‘œ์ ์œผ๋กœ Redux๋‚˜ React Router๊ฐ€ ๋งŽ์ด ํ™œ์šฉ๋˜์ฃ .

๐Ÿ“Œ ๋ฆฌ์•กํŠธ JS์˜ ์ฃผ์š” ํŠน์ง• ๋น„๊ต ๐ŸŒŸ

ํŠน์ง• ์„ค๋ช…
์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ UI๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™”
Virtual DOM ์‹ค์ œ DOM ๋ณ€๊ฒฝ ์ตœ์†Œํ™”๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ
JSX ์‚ฌ์šฉ HTML๊ณผ JavaScript์˜ ๊ฒฐํ•ฉ ํ‘œํ˜„
์ƒํƒœ ๊ด€๋ฆฌ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ๋ฅผ ๊ฐ„๋‹จํžˆ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
๊ฐ•๋ ฅํ•œ ์ƒํƒœ๊ณ„ Redux, Recoil ๋“ฑ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ˜ธํ™˜

 

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ ์ดํ•ด ๐Ÿงฉ

๋ฆฌ์•กํŠธ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์˜ˆ์š”. ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ, ํ•˜๋‚˜์˜ UI ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ด์š”. ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

 

์ปดํฌ๋„ŒํŠธ๋Š” ํฌ๊ฒŒ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์š”. ์ตœ๊ทผ์—๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์—ฌ๊ธฐ์— ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

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

 

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

๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์œ ํ˜• ๋น„๊ต ๐ŸŒŸ

๊ตฌ๋ถ„ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ
๊ธฐ๋ณธ ๊ตฌ์กฐ JavaScript ํ•จ์ˆ˜ ES6 ํด๋ž˜์Šค
์ƒํƒœ ๊ด€๋ฆฌ useState ํ›… ์‚ฌ์šฉ this.state ์‚ฌ์šฉ
์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ useEffect ํ›… ์‚ฌ์šฉ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
์‚ฌ์šฉ ๋นˆ๋„ ๋†’์Œ (์ตœ์‹  ํŠธ๋ Œ๋“œ) ๋‚ฎ์Œ (๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ)
์žฅ์  ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์  ์ „ํ†ต์  ๋ฐฉ์‹์œผ๋กœ ์•ˆ์ •์ 

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํŠนํžˆ React Hooks์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๋”์šฑ ๊ฐ•๋ ฅํ•ด์กŒ์–ด์š”. ์ƒํƒœ์™€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์ตœ์‹  ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฑฐ์˜ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์–ด์š”.

 

์ƒํƒœ ๊ด€๋ฆฌ์™€ Props ํ™œ์šฉ ๐Ÿ—ƒ๏ธ

๋ฆฌ์•กํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์ด ๋ฐ”๋กœ ์ƒํƒœ(State)์™€ ์†์„ฑ(Props)์ด์—์š”. ์ด ๋‘ ๊ฐ€์ง€๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ฃ .

 

State๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋กœ, ์ฃผ๋กœ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด๋‚˜ UI ๋ณ€ํ™”๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•ด์š”. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” useState ํ›…์„ ์ด์šฉํ•ด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์ฃ . ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋ผ์š”.

 

๋ฐ˜๋ฉด, Props๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ˆ์š”. Props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์–ด์š”. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ํ†ต์‹  ์—ญํ• ์„ ๋‹ด๋‹นํ•ด์š”.

 

State์™€ Props์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์˜ˆ์š”. State๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, Props๋Š” ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์–ด์š”.

๐Ÿ“Š State์™€ Props ๋น„๊ต ํ‘œ ๐Ÿ“

๊ตฌ๋ถ„ State Props
๋ฐ์ดํ„ฐ ์†Œ์œ  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ
์ˆ˜์ • ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์ˆ˜์ • ๊ฐ€๋Šฅ (setState) ์ฝ๊ธฐ ์ „์šฉ
์‚ฌ์šฉ ๋ชฉ์  ๋™์  ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
์ˆ˜์ • ๋ฐฉ์‹ setState ๋˜๋Š” useState ์‚ฌ์šฉ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ด€๋ฆฌ
์ฃผ์š” ์‚ฌ์šฉ ์œ„์น˜ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

 

State์™€ Props๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉด์„œ๋„ ์ปดํฌ๋„ŒํŠธ์˜ ๋…๋ฆฝ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ ์ƒํƒœ๋ฅผ ์ ์ ˆํžˆ ๊ด€๋ฆฌํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ ์ตœ์ ํ™”์—๋„ ๋„์›€์ด ๋ผ์š”.

 

๋ฆฌ์•กํŠธ ํ›…์˜ ์ข…๋ฅ˜์™€ ์‚ฌ์šฉ๋ฒ• ๐Ÿช

๋ฆฌ์•กํŠธ ํ›…(Hooks)์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ์™€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ•จ์ˆ˜์˜ˆ์š”. 2018๋…„ ๋ฆฌ์•กํŠธ 16.8 ๋ฒ„์ „๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ  ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋งŒ์œผ๋กœ๋„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”.

 

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ํ›…์œผ๋กœ๋Š” useState, useEffect, useContext๊ฐ€ ์žˆ์–ด์š”. ์ด ์™ธ์—๋„ ๊ณ ๊ธ‰ ํ›…์œผ๋กœ useReducer, useMemo, useCallback ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ๊ฐ ํ›…์€ ํŠน์ • ๋ชฉ์ ์— ๋”ฐ๋ผ ์‚ฌ์šฉ๋ผ์š”.

 

useState๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ , useEffect๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์š”. useContext๋Š” ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•˜์ฃ . ์ด์™ธ์—๋„ useMemo์™€ useCallback์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๊ณ„์‚ฐ์„ ์บ์‹ฑํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•ด์š”.

 

ํ›…์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฉฐ, ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์›์น™์ด์—์š”. ์ด๋ฅผ ์–ด๊ธฐ๋ฉด ํ›…์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ” ์ฃผ์š” ๋ฆฌ์•กํŠธ ํ›… ์š”์•ฝ ๐ŸŒŸ

ํ›… ์ด๋ฆ„ ์‚ฌ์šฉ ๋ชฉ์  ์˜ˆ์‹œ
useState ์ƒํƒœ ๊ด€๋ฆฌ const [count, setCount] = useState(0);
useEffect ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ useEffect(() => {}, []);
useContext ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ const value = useContext(MyContext);
useMemo ์„ฑ๋Šฅ ์ตœ์ ํ™” (๊ฐ’ ์บ์‹ฑ) const memoValue = useMemo(() => calc(), [dep]);
useCallback ํ•จ์ˆ˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ const memoFunc = useCallback(() => {}, [dep]);

 

๋ฆฌ์•กํŠธ ํ›…์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ์™€ ๋กœ์ง์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”. ํŠนํžˆ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํ›…์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋ฉด ๋”์šฑ ๊น”๋”ํ•˜๊ณ  ์„ฑ๋Šฅ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋กœ SPA ๊ตฌํ˜„ ๐Ÿšฆ

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ(React Router)๋Š” ๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์—์„œ ํŽ˜์ด์ง€ ์ „ํ™˜์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ˆ์š”. URL ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜์—ฌ ๋งˆ์น˜ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์š”.

 

๋ฆฌ์•กํŠธ ์ž์ฒด๋Š” ํŽ˜์ด์ง€ ์ „ํ™˜ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋„ค๋น„๊ฒŒ์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฅผ ํ†ตํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋”์šฑ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์ฃ .

 

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ๋Š” BrowserRouter, Route, Link, Switch๊ฐ€ ์žˆ์–ด์š”. BrowserRouter๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ๊ฐ์‹ธ์„œ ๋ผ์šฐํŒ…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ , Route๋Š” ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•ด์š”. Link๋Š” ํŽ˜์ด์ง€ ์ด๋™์„ ์œ„ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ , Switch๋Š” ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ Œ๋”๋งํ•˜์—ฌ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•ด์š”.

 

SPA์—์„œ ์ค‘์š”ํ•œ ์ ์€ ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•  ๋•Œ ์ „์ฒด๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฐ”๊พธ๋Š” ๊ฑฐ์˜ˆ์š”. ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋Š” ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œ์ผœ์š”.

๐Ÿ—บ๏ธ ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ๐ŸŒŸ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช… ์˜ˆ์‹œ
BrowserRouter ๋ผ์šฐํ„ฐ์˜ ๋ฃจํŠธ ๊ตฌ์„ฑ ์š”์†Œ <BrowserRouter> ... </BrowserRouter>
Route ๊ฒฝ๋กœ์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฐ๊ฒฐ <Route path="/about" component={About} />
Link ํŽ˜์ด์ง€ ๊ฐ„ ์ด๋™ ๋งํฌ <Link to="/home">Home</Link>
Switch ์ฒซ ๋ฒˆ์งธ ์ผ์น˜ ๊ฒฝ๋กœ๋งŒ ๋ Œ๋”๋ง <Switch> ... </Switch>
useParams ๋™์  ๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ‘๊ทผ const { id } = useParams();

 

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด URL ๊ฒฝ๋กœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด์„œ๋„ SPA ํŠน์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ ๋„ค๋น„๊ฒŒ์ด์…˜์ด๋‚˜ ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ ๊นœ๋นก์ž„์ด ์—†์–ด์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์พŒ์ ํ•˜๋‹ต๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ๐Ÿš€

๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ, ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ ์ด์Šˆ๋กœ ์ธํ•ด ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์ฃ . ๊ทธ๋ž˜์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ค‘์š”ํ•œ ๊ณผ์ œ์˜ˆ์š”.

 

์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ์ด๋ฅผ ์œ„ํ•ด React.memo์™€ useCallback, useMemo ๊ฐ™์€ ํ›…์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•ด์•ผ ํ•ด์š”. ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๋ฉด, ๋™์ผํ•œ props๋กœ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋„๋ก ๋ง‰์•„์ค๋‹ˆ๋‹ค.

 

๋˜ํ•œ, ์ƒํƒœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”. ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” Context API ๋˜๋Š” Redux์™€ ๊ฐ™์€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ํŠนํžˆ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ, ์ƒํƒœ๋ฅผ ์ตœ๋Œ€ํ•œ ์ง€์—ญํ™”ํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋ผ์š”.

 

๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ์„ ํ†ตํ•ด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜๋„ ์žˆ์–ด์š”. ์ด๋ฅผ ์œ„ํ•ด React.lazy์™€ Suspense๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ํ™”๋ฉด ์ „ํ™˜์ด ํ•œ์ธต ๋ถ€๋“œ๋Ÿฌ์›Œ์ง„๋‹ต๋‹ˆ๋‹ค.

๐Ÿš€ ๋ฆฌ์•กํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ• ๐ŸŒŸ

๊ธฐ๋ฒ• ์„ค๋ช… ์‚ฌ์šฉ ์˜ˆ์‹œ
React.memo ์ปดํฌ๋„ŒํŠธ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์ง€ export default React.memo(MyComponent);
useCallback ํ•จ์ˆ˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์œผ๋กœ ์žฌ์ƒ์„ฑ ๋ฐฉ์ง€ const memoFunc = useCallback(() => {}, [dep]);
useMemo ์—ฐ์‚ฐ ๋น„์šฉ์ด ํฐ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑ const memoValue = useMemo(() => calc(), [dep]);
์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ… ํŽ˜์ด์ง€๋ณ„๋กœ ๋ฒˆ๋“ค ๋ถ„๋ฆฌํ•˜์—ฌ ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„  React.lazy(() => import('./Component'))
์ง€์—ฐ ๋กœ๋”ฉ ํ•„์š”ํ•œ ์‹œ์ ์—๋งŒ ์ปดํฌ๋„ŒํŠธ ๋กœ๋“œ <Suspense fallback={...}>

 

์ด ์™ธ์—๋„ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์ธ React Profiler๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฅผ ํ†ตํ•ด ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ตฌ์ฒด์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

FAQ ๐Ÿ’ก

Q1. ๋ฆฌ์•กํŠธ์™€ ์•ต๊ทค๋Ÿฌ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

 

A1. ๋ฆฌ์•กํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ UI ๊ตฌ์ถ•์— ์ค‘์ ์„ ๋‘๋ฉฐ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์ด์—์š”. ๋ฐ˜๋ฉด, ์•ต๊ทค๋Ÿฌ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌ์กฐํ™”์™€ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ๊ฐ•ํ™”ํ•œ ์ „๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ด์š”.

 

Q2. ๋ฆฌ์•กํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋‚˜์š”?

 

A2. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Redux์™€ Recoil์ด์—์š”. Redux๋Š” ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ์— ์ ํ•ฉํ•˜๊ณ , Recoil์€ React์™€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋ผ์„œ ์ƒํƒœ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์š”.

 

Q3. useEffect ํ›…์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ์—†์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

 

A3. ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ์—†์œผ๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์‹คํ–‰๋ผ์š”. ํŠน์ • ์ƒํƒœ ๋ณ€ํ™”์—๋งŒ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด ๋ฐฐ์—ด ์•ˆ์— ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ด์š”.

 

Q4. React.memo๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ๋„ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š”?

 

A4. ์ „๋‹ฌ๋˜๋Š” props๊ฐ€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ(๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ)์ผ ๊ฒฝ์šฐ, ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ์ธ์‹ํ•ด ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•ด์š”. useMemo๋‚˜ useCallback์œผ๋กœ ๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•ด ๋ณด์„ธ์š”.

 

Q5. SPA์—์„œ ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ๊นœ๋นก์ž„์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š”?

 

A5. ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์œผ๋กœ ์ธํ•ด ์ง€์—ฐ ๋กœ๋”ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ ๊นœ๋นก์ผ ์ˆ˜ ์žˆ์–ด์š”. Suspense์™€ fallback์„ ํ™œ์šฉํ•˜์—ฌ ๋กœ๋”ฉ ์ค‘ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

 

Q6. ๋ฆฌ์•กํŠธ์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด?

 

A6. useEffect ์•ˆ์—์„œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ , ๋‚ด๋ถ€์— async ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ด์š”. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

Q7. ์ปดํฌ๋„ŒํŠธ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€?

 

A7. React Profiler๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์‹œ๊ฐ„์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

Q8. ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด?

 

A8. ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์„ ์ ์šฉํ•˜๋ฉด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ Next.js์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด SSR ๊ตฌํ˜„์ด ์šฉ์ดํ•ด์š”.

๋ฐ˜์‘ํ˜•