๐Ÿš€ Do it! ๋ฆฌ์•กํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ •์„: ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋„ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋Š” ์™„๋ฒฝ ๊ฐ€์ด๋“œ








๐Ÿš€ Do it! ๋ฆฌ์•กํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ •์„: ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋„ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋Š” ์™„๋ฒฝ ๊ฐ€์ด๋“œ

๐Ÿš€ Do it! ๋ฆฌ์•กํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ •์„: ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋„ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋Š” ์™„๋ฒฝ ๊ฐ€์ด๋“œ

A. ๋ฆฌ์•กํŠธ๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๋ฆฌ์•กํŠธ๋Š” Facebook์—์„œ ๊ฐœ๋ฐœํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ DOM(Document Object Model)์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง์„ ์ œ๊ณตํ•˜๋ฉฐ, ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. ๋ณธ ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์‹ค๋ฌด ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

B. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ

๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ™˜๊ฒฝ ์„ค์ •์€ Node.js์™€ npm(๋˜๋Š” yarn) ์„ค์น˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ์ ˆ์—์„œ๋Š” ๋‹จ๊ณ„๋ณ„๋กœ ์ž์„ธํ•œ ์„ค์น˜ ๊ณผ์ •๊ณผ create-react-app์„ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋„ ํ•จ๊ป˜ ์ œ๊ณตํ•˜์—ฌ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋„ ์‰ฝ๊ฒŒ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ์ œ ๋ช…๋ น์–ด ๋ฐ ์Šคํฌ๋ฆฐ์ƒท ํฌํ•จ)

C. JSX์™€ ์ปดํฌ๋„ŒํŠธ ์ดํ•ดํ•˜๊ธฐ

๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ธ JSX(JavaScript XML)์™€ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. JSX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTML๊ณผ JavaScript ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด์ ์„ ๋น„๊ตํ•˜๋ฉฐ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‹ค์Šตํ•ด๋ด…๋‹ˆ๋‹ค. props์™€ state์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ , ๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ์‹ค์Šต์„ ํ†ตํ•ด ์‹ค๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

D. ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง

์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ(state)๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ(event)์— ๋ฐ˜์‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. useState์™€ useEffect hook์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ƒ์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ๊ณผ์ •์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

E. ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ(componentDidMount, componentDidUpdate, componentWillUnmount ๋“ฑ)์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ๊ณผ ์—ญํ• ์„ ์ดํ•ดํ•˜๊ณ , ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ ์šฉ ๋ฐฉ๋ฒ•์„ ์ตํž™๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ useEffect hook์„ ์ด์šฉํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ๋˜ํ•œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

F. ๋ฆฌ์•กํŠธ Router์™€ ๋ผ์šฐํŒ…

React Router๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค. BrowserRouter, Route, Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ๊ฐ„ ์ด๋™์„ ๊ตฌํ˜„ํ•˜๊ณ , URL์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค. Nested Routes์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

G. ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ(API ํ˜ธ์ถœ)

fetch API๋‚˜ axios ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์™ธ๋ถ€ API์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ด๋ฅผ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ์—๋Ÿฌ ํ•ธ๋“ค๋ง, ๋กœ๋”ฉ ์ƒํƒœ ํ‘œ์‹œ ๋“ฑ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ ํ•„์š”ํ•œ ์ค‘์š”ํ•œ ๊ธฐ์ˆ ๋“ค์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

H. ๊ณ ๊ธ‰ ๋ฆฌ์•กํŠธ ๊ธฐ๋ฒ•

Context API๋ฅผ ์‚ฌ์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ, Custom Hooks๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ, Redux์™€ ๊ฐ™์€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ํ™œ์šฉ๋ฒ• ๋“ฑ ๊ณ ๊ธ‰ ๋ฆฌ์•กํŠธ ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋“ค์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

I. ์‹ค์ „ ํ”„๋กœ์ ํŠธ

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

J. ๋งˆ๋ฌด๋ฆฌ

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



“`

..

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ