ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ์•กํŠธ(React.js) : ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ตœ์‹  ๊ธฐ์ˆ ๊นŒ์ง€ ์™„๋ฒฝํ•˜๊ฒŒ

๋ฆฌ์•กํŠธ 19์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript)์™€ ํ•จ๊ป˜ ๋ฐฐ์šฐ๋Š” ๋ฆฌ์•กํŠธ ์™„์„ฑ ๊ฐ•์˜! ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ƒํƒœ๊ด€๋ฆฌ(Context, Redux Toolkit, Zustand), API ํ†ต์‹ (Fetch, Axios), ์ตœ์‹  ํ›…(use, useActionState, useOptimistic ๋“ฑ), ์‹ค์ „ ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ์ตํ˜€ ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์•กํŠธ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(4.9) ์ˆ˜๊ฐ•ํ‰ 61๊ฐœ

์ˆ˜๊ฐ•์ƒ 470๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

react
react
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
react
react
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

4.9

5.0

์ „ํฌ์„ฑ

36% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

์ˆ˜๊ฐ•ํ‰์„ ํ•œ ๋ฒˆ๋„ ์ž‘์„ฑํ•ด๋ณธ ์ ์ด ์—†๋Š”๋ฐ, React ํ•™์Šต์šฉ์œผ๋กœ ์ด ๊ฐ•์˜ ์ •๋ง ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค!!! ๊ธ‰ํ•˜๊ฒŒ ๋ฆฌ์•กํŠธ๋ฅผ ํ•™์Šตํ•ด์•ผ ํ•ด์„œ ํ˜„์žฌ ์•ฝ 30% ์ •๋„ ์ˆ˜๊ฐ•ํ–ˆ๋Š”๋ฐ, ํ ์žก์„ ๊ณณ์ด ์—†๋Š” ๊ฐ•์˜๋ผ๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜ํ•˜๋‚˜ ํ•„์š” ์—†๋Š” ๋ถ€๋ถ„์ด ์—†๋„ค์š”. ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋ณผ ํ•„์š” ์—†์ด, ์ด ๊ฐ•์˜ ํ•˜๋‚˜๋ฉด ๋ฆฌ์•กํŠธ ๊ธฐ๋ณธ์€ ๋งˆ์Šคํ„ฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

5.0

OZST

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

- ๊ฐœ๋…์„ค๋ช…์ด ๊น”๋”ํ•˜๊ณ  ์ž์„ธํ•จ - ํ•ด๋‹น ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๊ฒŒ๋œ ์ด์œ  ์„ค๋ช… - ์‹ค๋ฌด์—์„œ ์“ฐ๋Š” ๋ฐฉํ–ฅ์„ฑ ์ œ์‹œ - ๊ฐœ๋…์„ค๋ช…์„ ์‹œ๊ฐํ™”ํ•ด์„œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€ - ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์„๋ฒ•ํ•œ ๋ถ€๋ถ„์€ ๋ณ„๋„์˜ ์˜ˆ์‹œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋””ํ…Œ์ผํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์คŒ - ์†Œ๋‹จ์›๋ณ„๋กœ ๋ฐฐ์šด๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ํ•œ ์‹ค์Šต ์ง„ํ–‰์œผ๋กœ ์ดํ•ด๊ฐ€ ๊นŠ์–ด์ง - ์ฃผ์˜ํ•ด์•ผ ํ•  ๋ฌธ๋ฒ•์‚ฌํ•ญ๊ณผ ์ด์œ  ์„ค๋ช… - ์‹ค์Šต ์‹œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ํ™œ์šฉํ•ด์„œ ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์คŒ - ์ด์ „์˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ํ•™์Šต - ๋งˆ๋ฌด๋ฆฌ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์ „์ฒด์ ์ธ ํ๋ฆ„ ๋ฐ ๊ฐœ๋… ํ•™์Šต **์ด ๋ชจ๋“  ๊ณผ์ •์ด ๋ฌผ ํ๋ฅด๋“ฏ ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ๊น”๋”ํ•จ** ๊ฐ•์˜์— ์ด๋Œ๋ ค์„œ ๋ฆฌ์•กํŠธ ์ฑ…๋„ ๊ตฌ๋งคํ•ด์„œ ์ž˜ ๋ณด๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ‘

5.0

์ฑ™์ค€

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

9์›” 12์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 10์›” 24์ผ์— ์™„๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€ํŠธ์บ ํ”„์—์„œ ํ•™์Šตํ•œ ๋‚ด์šฉ, ๋‹ค๋ฅธ ๊ฐ•์˜์—์„œ ํ•™์Šตํ•œ ๋‚ด์šฉ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณต๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ํ•ด๋‹น ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์—…์˜ ์ˆ˜๊ฐ€ ๋ฐ˜์ฆ์„ ํ•˜๋“ฏ, ์ •๋ง ๋งŽ์€ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. UI ๋””์ž์ธ๋ถ€ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ, React ๋‚ด์žฅ ํ›… ์‚ฌ์šฉ, (์ „์—ญ) ์ƒํƒœ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ํŒจ์นญ, ๋ผ์šฐํŒ…, ๋ฐฐํฌ๊นŒ์ง€ ์ •๋ง ๋งŽ์€ ๋‚ด์šฉ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๋‹ค๋ฅธ ๊ฐ•์˜์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์€ ํšจ์œจ์ ์ธ ํ›…๋“ค์˜ ์‚ฌ์šฉ๋ฒ• ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด์„œ, ์–ธ์ œ ์ด๋Ÿฐ ํ›…์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, TypeScript ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์„ธ๋ถ€์ ์œผ๋กœ ๋‹ค๋ฃจ์ง€ ์•Š์•„์„œ ํ•ด๋‹น ๊ฐ•์˜ ์ˆ˜๊ฐ•๊ณผ ๋ณ„๋„๋กœ Type ํ•™์Šต์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (e.g. ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž… ์‚ฌ์šฉ ๋“ฑ) ์ข‹์€ ๊ฐ•์˜ ์ œ๊ณตํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • 2026๋…„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ๋‚ด์šฉ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ ๋ฌธ๋ฒ•๊ณผ ํƒ€์ž… ์‹œ์Šคํ…œ ์ดํ•ด

  • ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ, JSX ๋ฌธ๋ฒ•, props & state ์‚ฌ์šฉ๋ฒ•

  • ๋ฆฌ์•กํŠธ + ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•(useState, useReducer)

  • ๋ฐ˜๋ณต ๋ Œ๋”๋ง, ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์˜ ํ•ต์‹ฌ ๋ฌธ๋ฒ•๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ํผ ์ฒ˜๋ฆฌ ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ(์ œ์–ด/๋น„์ œ์–ด)

  • ์ตœ์‹  ์Šคํƒ€์ผ๋ง ๊ธฐ๋ฒ•(CSS Module, Styled-component, emotion, vanilla extract, tailwind css

  • Context API๋กœ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ

  • Redux Toolkit์„ ์ด์šฉํ•œ ๊ตฌ์กฐ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ

  • Zustand๋กœ ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅธ ์ƒํƒœ๊ด€๋ฆฌ ๊ตฌํ˜„

  • ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋กœ์ง ์žฌ์‚ฌ์šฉํ•˜๊ธฐ

  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: useMemo, useCallback, React.memo

  • ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ์„ค๊ณ„์™€ ํด๋” ๊ตฌ์กฐ ์ •๋ฆฌ ์ „๋žต

  • ๋ฆฌ์•กํŠธ 19์˜ ๊ฝƒ !!! use() + Suspense + ErrorBoundary๋กœ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ

  • useOptimistic()์œผ๋กœ ๋‚™๊ด€์  UI ๊ตฌํ˜„

  • useActionState()๋กœ ํผ ์ฒ˜๋ฆฌ์™€ ์ƒํƒœ ๊ด€๋ฆฌ ํ†ตํ•ฉํ•˜๊ธฐ

  • React Router(v7)๋กœ SPA ๋ผ์šฐํŒ… ๊ตฌํ˜„

  • ํŽ˜์ด์ง€ ์ „ํ™˜๊ณผ ๋™์  ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ

  • Fetch์™€ Axios๋กœ API ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์—๋Ÿฌ ํ•ธ๋“ค๋ง

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ์‹ค์ „ ํ”„๋กœ์ ํŠธ ๊ธฐํš ๋ฐ ์„ค๊ณ„

  • ์ƒํƒœ๊ด€๋ฆฌ + API ํ†ต์‹  + ๋ผ์šฐํŒ… ํ†ตํ•ฉ ์˜ˆ์ œ ๊ตฌํ˜„

  • ์‹ค๋ฌด์— ๊ฐ€๊นŒ์šด ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋ฐ ์ตœ์ข… ๋งˆ๋ฌด๋ฆฌ(node.js + express + mongodb + kakao + react 19))

๋น„์ „๊ณต์ž๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด React.JS!!
๐Ÿ›ฉ ์ˆ˜์ฝ”๋”ฉ์˜ ํ”„๋ŸฐํŠธ์—”๋“œ ๋กœ๋“œ๋งต ์‹œ๋ฆฌ์ฆˆ 6๋‹จ๊ณ„!! ๐Ÿ›ฉ

๋กœ๋“œ๋งต ์ถœ์‹œ

ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๋กœ๋“œ๋งต ์ถœ์‹œ!

์ˆ˜์ฝ”๋”ฉ ๊ฐ•์˜๋“ค์„ ๋ชจ์€ ๋กœ๋“œ๋งต์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!
(๐Ÿ“Œ ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋กœ๋“œ๋งต ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค)

์ „์ฒด ๊ฐ•์˜์— 30% ํ• ์ธ์ด ์ ์šฉ๋˜์–ด,
๊ฐœ๋ณ„ ๊ฐ•์˜๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ €๋ ดํ•˜๊ฒŒ ์ˆ˜๊ฐ•ํ•˜์‹ค ์ˆ˜ ์žˆ์–ด์š”.

๋กœ๋“œ๋งต ๋งํฌ

โžก https://www.inflearn.com/roadmaps/9957 (HTML + CSS + JS + TS + React + Vue)
โžก https://www.inflearn.com/roadmaps/10015 (JS + TS + React)

๋ฆฌ์•กํŠธ ์ž…๋ฌธ ๋ถ„์•ผ ๋ฒ ์ŠคํŠธ ์…€๋Ÿฌ

์ˆ˜์ฝ”๋”ฉ ์˜จ๋ผ์ธ ๊ฐ•์˜๊ฐ€ ์ฑ…์œผ๋กœ๋„ ์ถœ๊ฐ„๋˜์—ˆ์–ด์š”!

2025 ใ€Ž์ฝ”๋”ฉ ์ž์œจํ•™์Šต ๋ฆฌ์•กํŠธใ€ ์ถœ๊ฐ„! ๐ŸŽ‰

์ˆ˜์ฝ”๋”ฉ ์˜จ๋ผ์ธ ๊ฐ•์˜๊ฐ€ ์ฑ…์œผ๋กœ๋„ ์ถœ๊ฐ„๋˜์—ˆ์–ด์š”.๐Ÿ˜Ž
์ˆ˜์ฝ”๋”ฉ์€ ํ”„๋ŸฐํŠธ์—”๋“œ ๋ถ„์•ผ์˜ ์ฑ…์„ ๋‹ค์ˆ˜ ์ง‘ํ•„ํ•œ ์ž‘๊ฐ€์ด๊ธฐ๋„ ํ•ด์š”!
์˜จ๋ผ์ธ ๊ฐ•์˜์™€ ๋„์„œ๋ฅผ ํ•จ๊ป˜ ๋ณด๋ฉด ์‹œ๋„ˆ์ง€๊ฐ€ ๋ช‡ ๋ฐฐ๋กœ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค!!

๊ถ๊ธˆํ•ด์š”

๋ฌด์—‡์„ ๋ฐฐ์šฐ๋‚˜์š”?

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

ํ•˜์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ React์™€ TypeScript๋ฅผ ๋™์‹œ์— ๋ฐฐ์šฐ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
JSX, Props, State ๊ฐ™์€ ๊ฐœ๋…์— ์–ด๋–ป๊ฒŒ ํƒ€์ž…์„ ๋ถ™์—ฌ์•ผ ํ• ์ง€ ๋ง‰๋ง‰ํ•˜๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์ฃ .

์ด ๊ฐ•์˜์—์„œ๋Š” ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” React + TypeScript ์กฐํ•ฉ๋งŒ ์„ ๋ณ„ํ•ด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
๋ณต์žกํ•œ ํƒ€์ž… ์ถ”๋ก ์ด๋‚˜ ๋“œ๋ฌผ๊ฒŒ ์“ฐ์ด๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์€ ๊ณผ๊ฐํžˆ ์ œ์™ธํ•˜๊ณ ,
์ดˆ๋ณด์ž๋„ ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ๋Š” ์‹ค์ „ ์ค‘์‹ฌ์˜ ๋‚ด์šฉ์œผ๋กœ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜์—์„œ ๋‹ค๋ฃจ๋Š” ํ•ต์‹ฌ ์ฃผ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

๐Ÿงฑ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํƒ„ํƒ„ํžˆ

  • React 19(18+) ๊ธฐ๋ฐ˜ ์ตœ์‹  ๊ฐœ๋ฐœ ํ๋ฆ„ ๋ฐ˜์˜

  • react.js ์ปดํฌ๋„ŒํŠธ์— TypeScript ์ ์šฉํ•˜๊ธฐ

  • ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ดํ•ด ๋ฐ ์ •์˜ ๋ฐฉ๋ฒ•

  • Props, State, Event์— ํƒ€์ž… ์•ˆ์ „ํ•˜๊ฒŒ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ํƒ€์ž… ์ •์˜

  • Children, Optional Props, Default Props ๋“ฑ ์‹ค๋ฌด ํŒจํ„ด

  • react-router v7 ์ตœ์‹  ๋ฒ„์ „ ๋ผ์šฐํŒ… ๊ฐœ๋… ํ•™์Šต

โš™ ์ƒํƒœ๊ด€๋ฆฌ์™€ ๋ Œ๋”๋ง

  • useState, useReducer๋ฅผ ํ™œ์šฉํ•œ ์ƒํƒœ ์ •์˜ ๋ฐ ํƒ€์ž… ์ฒ˜๋ฆฌ

  • ๋ฐ˜๋ณต ๋ Œ๋”๋ง, ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์˜ ํ•ต์‹ฌ ๋ฌธ๋ฒ•๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ

๐ŸŽจ ์Šคํƒ€์ผ๋ง ์ „๋žต

  • ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ๋ง ๋ฐฉ๋ฒ• ํ•™์Šต

  • (CSS Module, styled-components, emotion, vanilla-extract, Tailwind CSS ๋“ฑ)

๐Ÿ” ๋ฆฌ์•กํŠธ ํ›…๊ณผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

  • useState, useEffect, useReducer, useRef, useContext ๋“ฑ ์ฃผ์š” ํ›… ์‚ฌ์šฉ๋ฒ•

  • React 19์˜ ์ตœ์‹  ํ›… (use, useOptimistic, useActionState) ํƒ€์ž… ์ฒ˜๋ฆฌ

  • ์ปค์Šคํ…€ ํ›…๊ณผ Context API์— ํƒ€์ž… ์ ์šฉํ•˜๊ธฐ

๐Ÿง  ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ

  • redux-toolkit, zustand ๋“ฑ ์‹ค๋ฌด์— ๋งŽ์ด ์“ฐ์ด๋Š” ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ๋„๊ตฌ ํ•™์Šต

๐Ÿ“ฎ API & ํผ ์ฒ˜๋ฆฌ

  • React + TypeScript ๊ธฐ๋ฐ˜์˜ Form ๋‹ค๋ฃจ๊ธฐ (Controlled/Uncontrolled)

  • API ์—ฐ๋™ ์‹œ ์‘๋‹ต ํƒ€์ž… ์ •์˜ ๋ฐ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฐฉ๋ฒ•

๐Ÿ›  ์‹ค์ „ ์ค‘์‹ฌ ๊ตฌ์„ฑ

  • ๋””์ž์ธ ๊ธฐ๋ฐ˜์˜ ๋‹ค์–‘ํ•œ ์‹ค์Šต ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๊ฐœ๋ฐœ ๊ฐ๊ฐ ์ตํžˆ๊ธฐ


๋“ฑ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ํ™œ์šฉ๋˜๋Š” ๋‚ด์šฉ์— ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋ฅผ ํ†ตํ•ด React(19) + TypeScript์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ๋ฌธ๋ฒ•์„ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ณ ,
์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ ์—ญ๋Ÿ‰์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ‚ค์›Œ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€

์™„์ „ ์ดˆ๋ณด์ž๋„ ๊ดœ์ฐฎ์•„์š”,

๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ชจ๋‘ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”.

React + TypeScript, ์ฒ˜์Œ ์‹œ์ž‘ํ•˜์…”๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”.
๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ, ํ•˜๋‚˜์”ฉ ํ•จ๊ป˜ ๋ฐฐ์›Œ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ,
TypeScript๋Š” ๊ทธ React๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ณ  ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‘ ๊ธฐ์ˆ ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋ฉด ์ด๋Ÿฐ ๊ณ ๋ฏผ์ด ์ƒ๊ธฐ๊ธฐ ๋งˆ๋ จ์ด์ฃ :

โ€œ์ปดํฌ๋„ŒํŠธ์— ํƒ€์ž…์€ ์–ด๋–ป๊ฒŒ ๋ถ™์ด์ง€?โ€
โ€œuseState์—๋Š” ์–ด๋–ค ํƒ€์ž…์„ ์จ์•ผ ํ• ๊นŒ?โ€

์ด ๊ฐ•์˜๋Š” React์™€ TypeScript ๋ชจ๋‘ ์ฒ˜์Œ์ธ ๋ถ„๋“ค๋„
๋ถ€๋‹ด ์—†์ด ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก,
์‰ฌ์šด ์˜ˆ์ œ์™€ ์‹ค์Šต ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ฝ”๋”ฉ์ด ์ž์‹ ์žˆ๊ฒŒ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋Š” ์„ธ์ƒ ๊ทธ ์–ด๋–ค ๋ฆฌ์•กํŠธ ๊ฐ•์˜๋ณด๋‹ค ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ๋ฆฌ์•กํŠธ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.


๐Ÿš€ React(19) + TypeScript, ์‰ฝ๊ณ  ์‹ค์šฉ์ ์œผ๋กœ ์ตํžˆ๊ธฐ

React 19์˜ ์ตœ์‹  ๊ธฐ๋Šฅ๋ถ€ํ„ฐ
์ƒํƒœ ๊ด€๋ฆฌ, ํผ ์ฒ˜๋ฆฌ, API ์—ฐ๋™, ์‹ค์ „ ํ”„๋กœ์ ํŠธ๊นŒ์ง€!

ํ•ต์‹ฌ ๊ฐœ๋…์„ ํ•˜๋‚˜์”ฉ ์ตํžˆ๊ณ ,
์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค๋ ฅ์„ ๋งŒ๋“ค์–ด ๋“œ๋ฆด๊ฒŒ์š”.

โ€œReact + TypeScript๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ณ , ๋” ๋˜‘๋˜‘ํ•˜๊ฒŒ!โ€
์ด ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐœ๋ฐœ ์‹ค๋ ฅ์„ ํ•œ ๋‹จ๊ณ„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด๋ณด์„ธ์š”. ๐ŸŽฏ

์ˆ˜์ฝ”๋”ฉ ๊ฐ•์˜๋งŒ์˜
ํŠน๋ณ„ํ•œ ์ 

์ตœ์‹  React 19 ๊ธฐ๋Šฅ ์™„๋ฒฝ ๋ฐ˜์˜

  • ์ด ๊ฐ•์˜๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ React 19 ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋ฆฌ์•กํŠธ 18๋กœ ์ฐ๋‹ค๊ฐ€ 19๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ๊ฒŒ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฆฌ์–ผ ์ตœ์‹ ! ๐Ÿš€)

  • ์ƒˆ๋กœ์šด useOptimistic, useFormStatus ๋“ฑ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ํ•™์Šตํ•˜๋ฉฐ, React 19 ํ”„๋กœ์ ํŠธ์—๋„ ์ž์‹  ์žˆ๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ํ•ต์‹ฌ ์ค‘์‹ฌ ์ปค๋ฆฌํ˜๋Ÿผ

  • JSX, Props, State, Event ๋“ฑ React์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์„ TypeScript์™€ ํ•จ๊ป˜ ๋ฐฐ์›๋‹ˆ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ ํƒ€์ž… ์ •์˜, Hooks ํƒ€์ž… ์ฒ˜๋ฆฌ, ์ œ๋„ค๋ฆญ ํ™œ์šฉ๊นŒ์ง€! ์‹ค์ œ ํ˜„์—…์—์„œ ์“ฐ์ด๋Š” ๊ธฐ์ˆ ๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์ง‘์ค‘ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

์ง๊ด€์ ์ด๊ณ  ์‰ฌ์šด ์˜ˆ์ œ์™€ ์‹ค์Šต ์œ„์ฃผ ๊ฐ•์˜

  • ๋ฆฌ์•กํŠธ๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋…์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ณ , ์˜ˆ์ œ โ†’ ์‹ค์Šต ๋ฐฉ์‹์œผ๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

  • ์†์œผ๋กœ ์ง์ ‘ ์ฝ”๋”ฉํ•˜๋ฉฐ ๋ฐฐ์šฐ๋Š” ์‹ค์Šต ์ค‘์‹ฌ ๊ฐ•์˜๋กœ, ์ด๋ก ์„ ์‹ค์ „์— ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€์˜ ์ฐจ์ด์  ๋ช…ํ™•ํžˆ ์ดํ•ด

  • ๋ฆฌ์•กํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ๋งŒ ์จ๋ดค๋‹ค๋ฉด?
    TypeScript์™€์˜ ์ฐจ์ด์ ๊ณผ ์žฅ์ ์„ ๋ช…ํ™•ํžˆ ๋น„๊ตํ•˜์—ฌ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • ๊ธฐ์กด JS ์ฝ”๋“œ๋„ ์–ด๋–ป๊ฒŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์˜ฎ๊ธฐ๋Š”์ง€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฒ„์ „์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ๊นŒ์ง€ ์™„๋ฒฝ ์ ์šฉ

  • ์ตœ์‹  ๋ฒ„์ „์˜ React์™€ TypeScript ๊ธฐ๋Šฅ์„ ์ ์šฉํ•ด,
    ์•ž์œผ๋กœ์˜ ํ”„๋กœ์ ํŠธ์—๋„ ๋ฌด๋ฆฌ ์—†์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์„ ๋‹ค์ง‘๋‹ˆ๋‹ค.

  • ์ตœ์‹  ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ์™€ ์—…๋ฐ์ดํŠธ ๋‚ด์šฉ์„ ์ˆ˜์‹œ๋กœ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด ํŒ๊ณผ ๊ฐœ๋ฐœ์ž ๋…ธํ•˜์šฐ ์•„๋‚Œ์—†์ด ๊ณต๊ฐœ

  • ๊ต๊ณผ์„œ์— ์—†๋Š” ํ˜„์—… ๊ฐœ๋ฐœ์ž๋งŒ์˜ ์‹ค์ „ ํŒ๊ณผ ์—…๋ฌด ํšจ์œจ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉํ–ฅ์„ฑ๋„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๊ฐ•์ƒ ๋งž์ถค ํ”ผ๋“œ๋ฐฑ๊ณผ ๊ผผ๊ผผํ•œ Q&A ์ง€์›

  • ์ˆ˜๊ฐ•์ƒ์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ๋น ๋ฅด๊ณ  ์นœ์ ˆํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜๋‚˜ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์„ ์งš์–ด์ฃผ๋ฉฐ, ๊ฐœ๊ฐœ์ธ์˜ ํ•™์Šต ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๋ณด์ž์˜ ๋ˆˆ๋†’์ด์—
์ตœ์ ํ™”๋œ
ํ•ต์‹ฌ ์ปค๋ฆฌํ˜๋Ÿผ

Chapter 01
์ค€๋น„ํ•˜๊ธฐ

๋ฆฌ์•กํŠธ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์„ค์ •์„ ๋ฐฐ์›๋‹ˆ๋‹ค.
๊ฐ๊ฐ์˜ OS๋ณ„๋กœ VSCode๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ณ 
Prettier ๋ฐ ์ต์Šคํ…์…˜์„ ์„ค์น˜ํ•˜์—ฌ ํ•™์Šต ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

Chapter 02
์‹œ์ž‘ํ•˜๊ธฐ

์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ตœ์‹  ๋ฐฉ์‹์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Create React App(CRA)์„ ๋Œ€์ฒดํ•˜๋Š” Vite ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋ฉฐ, ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ํ•„์ˆ˜ ์„ค์ •์„ ์ตํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • CRA์˜ ํ•œ๊ณ„์™€ Vite์˜ ์žฅ์  ๋น„๊ต

  • Webpack๊ณผ Vite์˜ ์ฐจ์ด์ ๊ณผ ์ƒํƒœ๊ณ„ ํ๋ฆ„ ์ดํ•ด

  • Vite๋ฅผ ํ™œ์šฉํ•œ ๋น ๋ฅด๊ณ  ์ง๊ด€์ ์ธ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์„ธํŒ…

  • ์Šค๋‹ˆํŽซ๊ณผ ์œ ์ € ์Šค๋‹ˆํŽซ์„ ํ†ตํ•œ ์ฝ”๋“œ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

  • ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ •๋ฆฌ์™€ npm run dev ์‹คํ–‰ ํ๋ฆ„ ํŒŒ์•…

๋˜ํ•œ, ๋ฆฌ์•กํŠธ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ JSX ๋ฌธ๋ฒ•์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. JSX๊ฐ€ ์–ด๋–ป๊ฒŒ HTML๊ณผ JavaScript๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š”์ง€, ์–ด๋–ค ๋ฌธ๋ฒ•์  ํŠน์ง•์ด ์žˆ๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋ฉด์„œ ์ดํ›„ ์ปดํฌ๋„ŒํŠธ ํ•™์Šต์„ ์œ„ํ•œ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Chapter 03
์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ณธ

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

  • ์ปดํฌ๋„ŒํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๊ทธ๋ฆฌ๊ณ  ์™œ ์ค‘์š”ํ•œ๊ฐ€?

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ž‘์„ฑ ์กฐ๊ฑด๊ณผ ๊ตฌ์„ฑ ๋ฐฉ์‹

  • React.Fragment๋ฅผ ์ด์šฉํ•œ ๋ถˆํ•„์š”ํ•œ DOM ์ œ๊ฑฐ

  • ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๊ณผ ํด๋” ๊ตฌ์กฐ ์„ค๊ณ„

  • ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ์™€ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๊ฐœ๋… ์ดํ•ด

๋˜ํ•œ, ์‹ค์Šต์„ ํ†ตํ•ด ์ง์ ‘ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ ์ ˆํ•œ ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์„ค๊ณ„์— ๋Œ€ํ•œ ๊ฐ๊ฐ์„ ์ตํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์„ ํ†ตํ•ด, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด๋Š” ๋ˆˆ์ด ๋‹ฌ๋ผ์ง€๊ณ , ์ดํ›„์˜ ๋ณต์žกํ•œ ๋ฆฌ์•กํŠธ ๊ตฌ์กฐ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์„ ๋งˆ๋ จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Chapter 04
์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ์™€ Props

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

  • ๋ฆฌ์•กํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ด€๊ณ„ ์ดํ•ด: ์กฐ์ƒ-๋ถ€๋ชจ-์ž์‹ ๊ตฌ์กฐ

  • JSX ๋‚ด์—์„œ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž… ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ํƒœ๊ทธ ์†์„ฑ์— ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋ณธ ์›๋ฆฌ

  • Props๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹๊ณผ ํŒจํ„ด

  • ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ํ™œ์šฉํ•œ props ๋ถ„๋ฆฌ์™€ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ props์˜ ํƒ€์ž…์„ ์‰ฝ๊ฒŒ ์ถ”๋ก ํ•˜๊ณ  ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์ „๊ฐœ ์—ฐ์‚ฐ์ž(...)๋ฅผ ํ™œ์šฉํ•œ props ์ „๋‹ฌ ๋ฐฉ์‹ ์ดํ•ด

  • children์ด๋ผ๋Š” ํŠน๋ณ„ํ•œ prop์„ ํ™œ์šฉํ•œ ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ ํ™•์žฅ

  • props์™€ children์˜ ์—ญํ•  ์ฐจ์ด ๋น„๊ต

์ด ์ฑ•ํ„ฐ๋ฅผ ํ†ตํ•ด, ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ , ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋™์‹œ์— ๊ณ ๋ คํ•œ props ์„ค๊ณ„ ์—ญ๋Ÿ‰์„ ํ‚ค์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Chapter 05
์ปดํฌ๋„ŒํŠธ์™€ ์ด๋ฒคํŠธ

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

  • JSX ๋ฌธ๋ฒ•์„ ํ†ตํ•œ ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ ๋ฐฉ์‹

  • ์ด๋ฒคํŠธ ์†์„ฑ๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์˜ ์ž‘์„ฑ ํŒจํ„ด

  • ํ•ธ๋“ค๋Ÿฌ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๊ณผ ์ถ”์ฒœ ๋ฐฉ์‹

  • ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์—์„œ props๋ฅผ ์ฝ๋Š” ํ๋ฆ„๊ณผ ์‹ค์ „ ์˜ˆ์‹œ

  • ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ props๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ตฌ์กฐ

  • ์ด๋ฒคํŠธ ๊ฐ์ฒด(SyntheticEvent)์˜ ๊ตฌ์กฐ ๋ฐ ํ™œ์šฉ๋ฒ•

  • target, currentTarget์˜ ์ฐจ์ด์ ๊ณผ ์šฉ๋„

  • ์ด๋ฒคํŠธ ์ „ํŒŒ ๊ฐœ๋…: ๋ฒ„๋ธ”๋ง๊ณผ ์บก์ฒ˜๋ง์˜ ์ดํ•ด

  • ์ด๋ฒคํŠธ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์ฐจ๋‹จ ๋ฐฉ๋ฒ• (e.preventDefault())

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

Chapter 06
์ปดํฌ๋„ŒํŠธ ์ƒํƒœ - useState ํ›…

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

  • ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ์™€ ์ƒํƒœ๊ฐ’์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

  • useState ํ›…์˜ ๊ธฐ์ดˆ์ ์ธ ์‚ฌ์šฉ๋ฒ•๋ถ€ํ„ฐ ์‹ค์ „ ์ ์šฉ๊นŒ์ง€

  • ๊ฐ์ฒด ๋ฐ ๋ฐฐ์—ด ์ƒํƒœ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ฃผ์˜ํ•  ์ ๊ณผ ๋ฆฌ๋ Œ๋”๋ง ๋™์ž‘ ๋ฐฉ์‹

  • setState์˜ ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹๊ณผ ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ

  • ์ƒํƒœ์˜ ๋…๋ฆฝ์„ฑ ๊ฐœ๋…๊ณผ ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ(lifting state up)

  • ์บก์Аํ™”(encapsulation)๋ฅผ ํ†ตํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ์ฑ…์ž„ ๋ถ„๋ฆฌ

  • ์นด์šดํ„ฐ ์•ฑ์„ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๋ฉฐ ์ƒํƒœ ๊ด€๋ฆฌ ์‹ค๋ ฅ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐ•ํ™”

  • useReducer๋ฅผ ์ด์šฉํ•œ ๋ณต์žกํ•œ ์ƒํƒœ ๋กœ์ง์˜ ๊ตฌ์กฐํ™”

  • reducer ํŒจํ„ด์œผ๋กœ์˜ ์ „ํ™˜ ๋ฐ ์‹ค์ „ ๋ฏธ์…˜ ์ˆ˜ํ–‰

์ด ์ฑ•ํ„ฐ๋ฅผ ๋งˆ์น˜๋ฉด, ๋‹จ์ˆœํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ๋ถ€ํ„ฐ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊นŒ์ง€ ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์ž๋กœ ํ•œ์ธต ์„ฑ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Chapter 07
๋ฐ˜๋ณต&์กฐ๊ฑด ๋ Œ๋”๋ง

์‹ค์ œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ํ™”๋ฉด์ด ์กฐ๊ฑด์ ์œผ๋กœ ๋ฐ”๋€Œ๊ณ , ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ๋ฆฌ์•กํŠธ์—์„œ ์ด๋Ÿฐ UI๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ์ง‘์ค‘์ ์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๐Ÿ”น ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

  • if, switch, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž(? :), ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž(&&) ๋“ฑ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด ํ‘œํ˜„ ๋ฐฉ์‹

  • ๊ฐ ์กฐ๊ฑด ๋ฐฉ์‹์˜ ์‚ฌ์šฉ ์‹œ์ ๊ณผ ์žฅ๋‹จ์  ๋น„๊ต

  • ํŠธ๋ž˜ํ”ฝ ์‹ ํ˜ธ๋“ฑ, ๋กœ๊ทธ์ธ ์ƒํƒœ, ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ๋“ฑ ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ธฐ๋ฐ˜ ์‹ค์Šต

  • ์ค‘์ฒฉ ์กฐ๊ฑด, ๊ฐ€๋…์„ฑ, ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ ์ „๋žต ๋“ฑ ์‹ค์ „ ํŒ ์ œ๊ณต

๐Ÿ”น ๋ฐ˜๋ณต ๋ Œ๋”๋ง

  • ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ map()์„ ์ด์šฉํ•œ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜๋ณต ์ถœ๋ ฅ

  • ๋ฐ˜๋ณต ๋ Œ๋”๋ง์—์„œ์˜ key ์†์„ฑ ์ค‘์š”์„ฑ ๋ฐ ์œ ํšจ ๋ฒ”์œ„ ์ดํ•ด

  • filter() ๋“ฑ์„ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์„ ๋ณ„ ๋ฐ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์˜ ๊ฒฐํ•ฉ

  • ๋ ˆ์‹œํ”ผ ๋ชฉ๋ก ๋ Œ๋”๋ง ๋“ฑ์˜ ์‹ค์ „ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต ํŒจํ„ด์„ ์ฒด๋“

์ด ์ฑ•ํ„ฐ๋ฅผ ๋งˆ์น˜๋ฉด, ๋ฆฌ์•กํŠธ๋กœ ๋ณต์žกํ•œ ์กฐ๊ฑด๊ณผ ๋ฐ˜๋ณต์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ€๋…์„ฑ ์ข‹์€ ๋™์  UI๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค๋ ฅ์„ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Chapter 08
์Šคํƒ€์ผ๋ง

์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ๋ฆฌ์•กํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•๋“ค์„ ํญ๋„“๊ฒŒ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
๋‹จ์ˆœํ•œ ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋ถ€ํ„ฐ CSS-in-JS, Tailwind, ์ด๋ฏธ์ง€ ์Šคํƒ€์ผ๋ง๊นŒ์ง€ ์‹ค์ œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ๋ชจ๋“  ์Šคํƒ€์ผ๋ง ๊ธฐ๋ฒ•์„ ์‹ค์Šต๊ณผ ํ•จ๊ป˜ ์ตํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ์Šคํƒ€์ผ๋ง์˜ ๊ธฐ๋ณธ

  • ์ธ๋ผ์ธ ์Šคํƒ€์ผ๊ณผ ์ „์—ญ CSS ํ™œ์šฉ๋ฒ•

  • CSS ๋ชจ๋“ˆ์„ ํ†ตํ•œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ์Šคํƒ€์ผ ์บก์Аํ™”

  • classnames ์œ ํ‹ธ์„ ํ™œ์šฉํ•œ ๋™์  ํด๋ž˜์Šค ๊ด€๋ฆฌ

  • ๐Ÿงฉ ๋ฏธ์…˜: ๋ฒ„ํŠผ ๊ทธ๋ฃน UI ๊ตฌํ˜„์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ ๋ฐฉ์‹ ๋น„๊ต ์ฒดํ—˜

๐Ÿ”น CSS-in-JS โ€” styled-components

  • styled-components์˜ ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • props๋ฅผ ํ™œ์šฉํ•œ ๋™์  ์Šคํƒ€์ผ๋ง

  • keyframes, as ๋“ฑ์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๊ณผ ํ—ฌํผ ํ•จ์ˆ˜ ๋ฐ ๋ฏน์Šค์ธ ์‚ฌ์šฉ๋ฒ•

  • ์ „์—ญ ์Šคํƒ€์ผ ๊ด€๋ฆฌ์™€ ํŒ ๋ชจ์Œ

  • ๐Ÿงฉ ๋ฏธ์…˜: styled-components๋กœ ์‹ ํ˜ธ๋“ฑ UI ๋งŒ๋“ค๊ธฐ

๐Ÿ”น Tailwind CSS โ€” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํผ์ŠคํŠธ ์Šคํƒ€์ผ๋ง

  • Tailwind์˜ ํ•ต์‹ฌ ์ฒ ํ•™๊ณผ ์ง€์‹œ์–ด ์ฒด๊ณ„

  • ์กฐ๊ฑด๋ถ€ ํด๋ž˜์Šค ์ ์šฉ ๋ฐฉ๋ฒ•๊ณผ ์‹ค์ „ ์ ์šฉ ์ „๋žต

  • ๐Ÿงฉ ๋ฏธ์…˜: Tailwind๋กœ ๊ณ„์‚ฐ๊ธฐ UI ์™„์„ฑํ•˜๊ธฐ

  • ๐Ÿงฉ ๋ณด๋„ˆ์Šค ๋ฏธ์…˜: Tailwind์˜ ์‹ค์ „ ๊ฐ๊ฐ์„ ๋”ํ•ด ๊ณ ๊ธ‰ UI ๋„์ „!

๐Ÿ”น ์ด๋ฏธ์ง€ & ํฐํŠธ ์Šคํƒ€์ผ๋ง

  • ์ด๋ฏธ์ง€ ๋ Œ๋”๋ง ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ ๋ฐ CSS ์กฐ์ • ๋ฐฉ๋ฒ•

  • ๐Ÿงฉ ๋ฏธ์…˜: ๋žจํ”„์— ๋ถˆ์ด ๋“ค์–ด์˜ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ UI ๊ตฌํ˜„

  • ๊ตฌ๊ธ€ ์›นํฐํŠธ ์ ์šฉ๋ฒ•๊นŒ์ง€ ํ•จ๊ป˜ ์ •๋ฆฌ

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

Chapter 09
๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ

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

๐Ÿ›  ํ”„๋กœ์ ํŠธ ๊ธฐ๋ฐ˜ ํ•™์Šต

  • ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์ „, ๊ณ„์‚ฐ๊ธฐ ๋™์ž‘ ์›๋ฆฌ์™€ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ฐœ์š”

  • UI ์„ค๊ณ„ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐํ™”

  • ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์„ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ์ •๋ฆฌ

  • ๐Ÿงฉ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•ด ์ƒํƒœ์™€ ์—ฐ์‚ฐ์ž ํƒ€์ž…์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ

  • ์ˆซ์ž, ์—ฐ์‚ฐ์ž, ๋งˆ์นจํ‘œ, ํด๋ฆฌ์–ด ๋“ฑ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„

  • ์‹ค์ „์—์„œ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ๋ฒ„๊ทธ ์ฒ˜๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… ํ๋ฆ„ ํ•™์Šต

๐Ÿงช ๊ฐœ๋ฐœ ๋„๊ตฌ ํ™œ์šฉ

  • React Developer Tools ์„ค์น˜ ๋ฐ ํ™œ์šฉ๋ฒ•์„ ํ†ตํ•ด ์ƒํƒœ ๋ณ€ํ™” ํ๋ฆ„ ์‹œ๊ฐํ™”

  • ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ์ถ”์ ๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๋ถ„์„ ๋Šฅ๋ ฅ ํ–ฅ์ƒ

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

Chapter 10
ํผ๋‹ค๋ฃจ๊ธฐ

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

๐Ÿ”น ์ œ์–ด ์ปดํฌ๋„ŒํŠธ

  • input, checkbox, radio, textarea ๋“ฑ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ ์ „๋ฐ˜ ์‹ค์Šต

  • ์ƒํƒœ์™€ ์—ฐ๊ฒฐ๋œ ์ž…๋ ฅ ์ฒ˜๋ฆฌ ํ๋ฆ„๊ณผ ๋ฆฌ๋ Œ๋”๋ง ์ดํ•ด

  • ๐Ÿงฉ ๋ฏธ์…˜: ๋‹ค์–‘ํ•œ ์ œ์–ด ์ž…๋ ฅ์„ ์กฐํ•ฉํ•œ ํผ UI ๊ตฌํ˜„

๐Ÿ”น ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ

  • ref๋ฅผ ํ†ตํ•œ ์ž…๋ ฅ๊ฐ’ ์ ‘๊ทผ๊ณผ DOM ๊ธฐ๋ฐ˜ ์ œ์–ด ๋ฐฉ์‹

  • ์ œ์–ด/๋น„์ œ์–ด ๋ฐฉ์‹์˜ ์žฅ๋‹จ์  ๋น„๊ต ๋ฐ ํ†ตํ•ฉ ์ „๋žต

  • ๐Ÿงฉ ๋ฏธ์…˜: ๋น„์ œ์–ด ๋ฐฉ์‹์œผ๋กœ ๋‹ค์ค‘ ์ž…๋ ฅ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๐Ÿ”น ๋ฆฌ์•กํŠธ 19 ๊ณ ๊ธ‰ ํผ ์ œ์–ด

  • ref๋ฅผ props๋กœ ์ „๋‹ฌํ•˜๋Š” ์ƒˆ๋กœ์šด ํŒจํ„ด (๋ฆฌ์•กํŠธ 19)

  • ๋ณต์žกํ•œ ์ž…๋ ฅ ์ฒ˜๋ฆฌ๋ฅผ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์ด๊ธฐ

  • ์ปค์Šคํ…€ ํ›… ์‹ฌํ™”: ๋‚ด๋ถ€ ์ƒํƒœ ์ถ”์ƒํ™”, ์ปค์Šคํ…€ ๋ฒจ๋ฆฌ๋ฐ์ด์…˜ ์—ฐ๋™

๐Ÿ”น ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (Validation)

  • ํ•„์ˆ˜๊ฐ’, ๊ธธ์ด, ํฌ๋งท ๋“ฑ์˜ ๊ธฐ๋ณธ ๋ฒจ๋ฆฌ๋ฐ์ด์…˜ ๊ตฌํ˜„ ํŒจํ„ด

  • ์ปค์Šคํ…€ ๋ฒจ๋ฆฌ๋ฐ์ด์…˜ ํ•จ์ˆ˜ ์ž‘์„ฑ ๋ฐ ํ›… ํ†ตํ•ฉ

  • ๐Ÿงฉ ๋ฏธ์…˜: ๋กœ๊ทธ์ธ ํผ ์™„์„ฑํ•˜๊ธฐ
    โ†’ ์ž…๋ ฅ ์ œ์–ด + ๋ฒจ๋ฆฌ๋ฐ์ด์…˜ + ์ƒํƒœ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์ด์ฒด์  ํผ ์‹ค์Šต

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

Chapter 11
ํ•  ์ผ ๊ด€๋ฆฌ ์•ฑ

์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ, ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ํ• ์ผ ๊ด€๋ฆฌ(Todo) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ, ์ƒํƒœ ๊ด€๋ฆฌ, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง, ์ˆ˜์ •/์‚ญ์ œ ๋“ฑ ์‹ค์ „ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ํ๋ฆ„์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ฑ•ํ„ฐ์ž…๋‹ˆ๋‹ค.

๐Ÿ›  ์‹ค์ „ ๊ตฌํ˜„ ๋‚ด์šฉ

  • ํ”„๋กœ์ ํŠธ ์„ธํŒ…๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ธฐ๋ณธ ๊ตฌ์กฐ ์žก๊ธฐ

  • ์ž…๋ ฅ ํผ์„ ํ†ตํ•œ ํ• ์ผ ๋“ฑ๋ก ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง์œผ๋กœ ํ• ์ผ ๋ชฉ๋ก ํ‘œ์‹œํ•˜๊ธฐ

  • ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํ†ตํ•œ ํ• ์ผ ์™„๋ฃŒ ํ‘œ์‹œ ๋ฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  • ๐Ÿงฉ ํ• ์ผ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ†ตํ•ด ์ƒํƒœ ์—…๋ฐ์ดํŠธ์™€ UI ์ œ์–ด ๋กœ์ง ์ˆ™๋ จ

โœ… ์‹ค์Šต์„ ํ†ตํ•ด ์–ป๋Š” ๊ฒƒ

  • ๋‹จ์ˆœํ•œ API ์ดํ•ด๋ฅผ ๋„˜์–ด, ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์—ญํ•  ๋ถ„๋ฆฌ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์„ค๊ณ„

  • ์ƒํƒœ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฆฌ์•กํŠธ ์•ฑ์˜ ๊ตฌ์กฐ์™€ ํ๋ฆ„์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์Šค์Šค๋กœ ๊ตฌํ˜„

  • ๋ฏธ์…˜์— ๊ฐ€๊นŒ์šด ์™„์„ฑํ˜• ํ”„๋กœ์ ํŠธ๋กœ ์ž‘์€ ๊ทœ๋ชจ์˜ CRUD ์•ฑ์„ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณธ ๊ฒฝํ—˜

์ด ์ฑ•ํ„ฐ๋ฅผ ๋งˆ์น˜๋ฉด, ๋ฆฌ์•กํŠธ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•ด ํ•˜๋‚˜์˜ ์•ฑ์„ ์„ค๊ณ„ํ•˜๊ณ  ์™„์„ฑํ•˜๋Š” ์ž์‹ ๊ฐ ์žˆ๋Š” ์ฒซ ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Chapter 12
์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ์™€ ์ปดํฌ๋„ŒํŠธ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

์ด ์ฑ•ํ„ฐ๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹จ์ˆœํžˆ โ€œ๋ Œ๋”๋งโ€๋งŒ ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ, ๋น„๋™๊ธฐ ์ž‘์—…, ๋ธŒ๋ผ์šฐ์ € ์ด๋ฒคํŠธ, ์™ธ๋ถ€ API ์ฒ˜๋ฆฌ ๋“ฑ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ๊ด€๋ฆฌ์™€ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ด๋Š” ์ตœ์ ํ™” ์ „๋žต๊นŒ์ง€ ํ•จ๊ป˜ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๐Ÿ”น ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ๊ด€๋ฆฌ (useEffect, useId ๋“ฑ)

  • useId ํ›…์„ ํ™œ์šฉํ•œ ์ ‘๊ทผ์„ฑ ํ–ฅ์ƒ ๋ฐ ๊ณ ์œ  ์‹๋ณ„์ž ์ƒ์„ฑ

  • ๐Ÿงฉ ํ• ์ผ ๊ด€๋ฆฌ ์•ฑ์— useId๋ฅผ ์ ์šฉํ•ด ์‹ค๋ฌด ์ ‘๊ทผ์„ฑ ๊ฐ๊ฐ ์ฒด๋“

  • useEffect์˜ ๋™์ž‘ ์‹œ์ , ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ์›๋ฆฌ ๋“ฑ ์ด๋ก  + ์‹ค์Šต

  • ๐Ÿงฉ Todo ์•ฑ์— useEffect๋ฅผ ์ ์šฉํ•ด ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ, ์ƒํƒœ ๋ณ€ํ™” ๋ฐ˜์‘ ์ฒ˜๋ฆฌ ๊ตฌํ˜„

๐Ÿ”น ์ปดํฌ๋„ŒํŠธ ์ตœ์ ํ™” (React.memo, useCallback, useMemo)

  • React.memo๋ฅผ ํ†ตํ•œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€

  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ์–ธ์ œ ํ’€๋ฆฌ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ด์œ  ๋ถ„์„

  • useCallback๊ณผ useMemo์˜ ์ฐจ์ด์™€ ์ ์šฉ ์‹œ์ 

  • ๐Ÿงฉ ํ• ์ผ ๊ด€๋ฆฌ ์•ฑ์— React.memo์™€ useCallback์„ ์ ์šฉํ•˜์—ฌ ์ตœ์ ํ™” ์ฒด๊ฐ

๐Ÿ”น ๊ณ ๊ธ‰ ๋ Œ๋”๋ง ์ „๋žต (lazy, suspense, error-boundary)

  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง€์—ฐ ๋กœ๋”ฉํ•˜๋Š” lazy()์™€ Suspense์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

  • ๋กœ๋”ฉ ๋Œ€๊ธฐ ์ค‘์˜ UI ๊ตฌ์„ฑ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ ์ „๋žต

  • ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์•ฑ์„ ๋ฌด๋„ˆ์ง€์ง€ ์•Š๊ฒŒ ๋ณดํ˜ธํ•˜๋Š” ErrorBoundary ์ฒ˜๋ฆฌ ๋ฐฉ์‹

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

Chapter 13
Context API

์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊นŠ์€ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? Context API๊ฐ€ ๊ทธ ํ•ด๋‹ต์ž…๋‹ˆ๋‹ค.
์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๊ธฐ์ดˆ๋กœ Context API์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•์„ ํ•™์Šตํ•˜๊ณ , ์‹ค์ „ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋ฉฐ ๊ตฌ์กฐํ™”๋œ ์•ฑ ๊ฐœ๋ฐœ ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฆ…๋‹ˆ๋‹ค.

๐Ÿ”น ์ „์—ญ ์ƒํƒœ์˜ ํ•„์š”์„ฑ๊ณผ Context API ๊ธฐ๋ณธ

  • props drilling ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ „์—ญ ์ƒํƒœ์˜ ํ•„์š”์„ฑ

  • createContext, useContext๋ฅผ ํ™œ์šฉํ•œ ๊ธฐ๋ณธ ์ „์—ญ ์ƒํƒœ ์„ค๊ณ„

  • ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฌธ์ œ์™€ ๊ตฌ์กฐ ๊ฐœ์„  ๋ฐฉ๋ฒ• (memo, context ๋ถ„๋ฆฌ)

  • reducer์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ์ „์—ญ ์ƒํƒœ๋„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ

  • โœ… ๋‘ ๊ฐœ ์ด์ƒ์˜ Context๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด ์‹ค์Šต ํฌํ•จ

๐Ÿงฉ ์‹ค์ „: UserProfile ์ƒํƒœ ๊ด€๋ฆฌ ํ”„๋กœ์ ํŠธ

  • ์ดˆ๊ธฐ UserProfile ์ฝ”๋“œ ๋ถ„์„ โ†’ ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด๋กœ ์ƒํƒœ ๋ถ„๋ฆฌ

  • ๐Ÿงฉ ๊ธ€์ž ํฌ๊ธฐ, ํ…Œ๋งˆ, ์•Œ๋ฆผ ์„ค์ •, ์–ธ์–ด ์„ค์ •(i18n.ts) ๋“ฑ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์„ค์ •์„ ์ „์—ญ ์ƒํƒœ๋กœ ๊ด€๋ฆฌ

  • useLayoutEffect๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•ด ๋ Œ๋” ์ˆœ์„œ ๋ฐ ๋ ˆ์ด์•„์›ƒ ๋ฐ˜์‘์„ฑ ์ œ์–ด

  • โœ… Context API + ์ปค์Šคํ…€ ํ›… ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ํ™•์žฅ์„ฑ ๋†’์€ ์ „์—ญ ์ƒํƒœ ๊ตฌ์กฐ ํ•™์Šต

๐Ÿงฉ ๋ฏธ์…˜: Todo ์•ฑ์— Context API ์ ์šฉ

  • ๊ธฐ์กด ํ• ์ผ ์•ฑ์— ์ „์—ญ ์ƒํƒœ ๋„์ž… โ†’ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ƒํƒœ ๊ณต์œ  ๊ตฌ์กฐ ๊ฐœ์„ 

  • ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉฐ ์‹ค์ „ ์„ค๊ณ„ ๋Šฅ๋ ฅ ๊ฐ•ํ™”

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

Chapter 14
Redux ToolKit

Context API๋กœ ์ „์—ญ ์ƒํƒœ์˜ ๊ฐœ๋…์„ ์žก์•˜๋‹ค๋ฉด, ์ด์ œ๋Š” ๋ฆฌ๋•์Šค ํˆดํ‚ท(RTK)์œผ๋กœ ๋ณด๋‹ค ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฒฝํ—˜ํ•ด๋ด…๋‹ˆ๋‹ค.
์ด ์ฑ•ํ„ฐ๋Š” ๋ณต์žกํ•œ ์ƒํƒœ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌ๋•์Šค ํˆดํ‚ท์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์‹ค์Šต ์ค‘์‹ฌ์œผ๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น Redux Toolkit ์ด๋ก  + ๊ตฌ์กฐ ์žก๊ธฐ

  • Redux Toolkit์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ๊ณผ ๊ธฐ์กด Redux์™€์˜ ์ฐจ์ด์ 

  • ์Šคํ† ์–ด ์ƒ์„ฑ ๋ฐ createSlice๋ฅผ ํ†ตํ•œ ์Šฌ๋ผ์ด์Šค ๊ตฌ์กฐํ™”

  • ์ƒํƒœ ๋ณ€๊ฒฝ ํ๋ฆ„, ์•ก์…˜ ๋””์ŠคํŒจ์น˜, ๋ฆฌ๋ Œ๋”๋ง ํ๋ฆ„ ์ดํ•ด

  • โœ… Redux DevTools ์—ฐ๋™์„ ํ†ตํ•œ ์ƒํƒœ ๋””๋ฒ„๊น…

  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ, thunk๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง๊นŒ์ง€ ํ™•์žฅ

  • โœ… ์Šฌ๋ผ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ณ ๊ธ‰ ๊ตฌ์กฐ ์‹ค์Šต

๐Ÿงฉ ์‹ค์ „: UserProfile ์ƒํƒœ ๊ด€๋ฆฌ with Redux

  • UserProfile ์ƒํƒœ๋ฅผ Redux ๊ธฐ๋ฐ˜์œผ๋กœ ์žฌ๊ตฌ์„ฑ

  • ๐Ÿงฉ ๊ธ€์ž ํฌ๊ธฐ, ์•Œ๋ฆผ ์„ค์ •, ํ…Œ๋งˆ ์ƒํƒœ ๋“ฑ์„ ์Šฌ๋ผ์ด์Šค ๋‹จ์œ„๋กœ ๊ตฌ์กฐํ™”

  • Context API ๋Œ€๋น„ ๋” ๊ฐ•๋ ฅํ•œ ๊ตฌ์กฐ์  ํ†ต์ œ๋ ฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋น„๊ต ์ฒดํ—˜

๐Ÿงฉ ๋ฏธ์…˜: ํ• ์ผ ์•ฑ์— Redux ์ ์šฉ

  • ๊ธฐ์กด ํ• ์ผ ๊ด€๋ฆฌ ์•ฑ์„ Redux Toolkit ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜

  • โœ… Todo ์ƒํƒœ, ์ถ”๊ฐ€/์‚ญ์ œ/์ˆ˜์ • ๋กœ์ง์„ ์Šฌ๋ผ์ด์Šค ๋‹จ์œ„๋กœ ๊ตฌํ˜„

  • ์‹ค์ „์—์„œ์˜ ์ปดํฌ๋„ŒํŠธ-์Šคํ† ์–ด ๋ถ„๋ฆฌ ์ „๋žต๊ณผ ์ฝ”๋“œ ๊ด€๋ฆฌ ๊ฒฝํ—˜ ๊ฐ•ํ™”

์ด ์ฑ•ํ„ฐ๋ฅผ ๋งˆ์น˜๋ฉด, ๋‹จ์ˆœํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์—์„œ ํ•œ ๊ฑธ์Œ ๋‚˜์•„๊ฐ€
โ€œ์Šฌ๋ผ์ด์Šค ๋‹จ์œ„์˜ ๊ตฌ์กฐํ™”๋œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌโ€๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์‹ค๋ฌด์—์„œ Redux Toolkit์„ ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋˜ ๋ถ„๋“ค์—๊ฒŒ๋„ ๊ฐ•๋ ฅ ์ถ”์ฒœ๋˜๋Š” ์‹ค์ „ ์ฑ•ํ„ฐ์ž…๋‹ˆ๋‹ค.

Chapter 15
Zustand

๋ณต์žกํ•œ ์„ค์ • ์—†์ด ๋น ๋ฅด๊ฒŒ ์ „์—ญ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด?
์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ๊ฐ€๋ณ๊ณ  ์ง๊ด€์ ์ธ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Zustand๋ฅผ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
Redux๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  Context๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ๊ตฌ์กฐ๋กœ, ์‹ค๋ฌด์—์„œ๋„ ์ ์  ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค.

๐Ÿ”น Zustand ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€

  • Zustand์˜ ๊ฐœ๋…๊ณผ ์ฒ ํ•™: โ€œGlobal store with minimal boilerplateโ€

  • ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ƒํƒœ ์ •์˜ ๋ฐฉ์‹

  • ์ƒํƒœ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ํŒŒ์ƒ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ

  • โœ… persist ๊ธฐ๋Šฅ์œผ๋กœ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ ์˜์†์„ฑ ์ €์žฅ

  • โœ… subscribeWithSelector๋ฅผ ์ด์šฉํ•œ ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™”

  • โœ… immer๋ฅผ ํ†ตํ•ด ๋ถˆ๋ณ€์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ง๊ด€์ ์œผ๋กœ

  • โœ… devtools ์—ฐ๋™์œผ๋กœ ๋””๋ฒ„๊น…๊นŒ์ง€ ์†์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ

๐Ÿงฉ ์‹ค์ „: UserProfile ์ƒํƒœ ๊ตฌํ˜„

  • UserProfile ์ƒํƒœ๋ฅผ Zustand ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„

  • Redux/Context์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ฝ”๋“œ ์–‘, ์ง๊ด€์„ฑ, ํ™•์žฅ์„ฑ ์ฐจ์ด ์ฒดํ—˜

๐Ÿงฉ ๋ฏธ์…˜: Todo ์•ฑ Zustand ๋ฆฌํŒฉํ† ๋ง

  • ๊ธฐ์กด ํ• ์ผ ์•ฑ์„ Zustand ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜

  • โœ… ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ• ์ง์ ‘ ๊ตฌํ˜„

  • ์ƒํƒœ ๋ณ€๊ฒฝ โ†’ UI ๋ Œ๋” โ†’ ์ €์žฅ/๋ณต๊ตฌ ํ๋ฆ„์„ ์ตœ์†Œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝํ—˜ ์ œ๊ณต

์ด ์ฑ•ํ„ฐ๋ฅผ ๋งˆ์น˜๋ฉด, ์„ธ ๊ฐ€์ง€ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ(Context API, Redux Toolkit, Zustand)๋ฅผ ๋ชจ๋‘ ์ฒดํ—˜ํ•œ ์‹ค๋ ฅ์ž๋กœ์„œ
์ƒํ™ฉ์— ๋งž๋Š” ์ „์—ญ ์ƒํƒœ ๋„๊ตฌ๋ฅผ ํŒ๋‹จํ•˜๊ณ  ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค๋ฌด ๊ธฐ์ค€๊ณผ ๊ฐ๊ฐ์„ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Chapter 16
๋ฐ์ดํ„ฐ ํ†ต์‹ 

์ด์ œ ๋ฆฌ์•กํŠธ ์•ฑ์„ โ€œ์‚ด์•„ ์žˆ๋Š” ์•ฑโ€์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ์‹ค์ œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•˜๊ณ , ์ด๋ฅผ PostBrowser ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•ด๋ณด๋ฉฐ ๋ฆฌ์•กํŠธ ์•ฑ์˜ ์‹ค์ „ ํ†ต์‹  ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ•ด๊ฐ‘๋‹ˆ๋‹ค.

๐Ÿ”น ๋ฐ์ดํ„ฐ ํŒจ์นญ์˜ ๊ธฐ์ดˆ

  • HTTP ํ†ต์‹ ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๊ตฌ์กฐ

  • json-server๋กœ ๋กœ์ปฌ API ์„œ๋ฒ„ ๊ตฌ์„ฑ โ†’ ๐Ÿ›  ์‹ค์Šต ๊ธฐ๋ฐ˜ API ํ™˜๊ฒฝ ๊ตฌ์ถ•

  • Thunder Client๋ฅผ ํ™œ์šฉํ•œ API ํ…Œ์ŠคํŠธ ์ž๋™ํ™”

  • ๐Ÿ“ db.json ํŒŒ์ผ ๊ตฌ์„ฑ ๋…ธํŠธ ์ œ๊ณต์œผ๋กœ ์‹ค์Šต ๊ธฐ๋ฐ˜ ์™„๋น„

๐Ÿ”น fetch๋ฅผ ํ™œ์šฉํ•œ CRUD ์‹ค์Šต

  • ๊ธฐ๋ณธ ์š”์ฒญ (GET, POST, PUT, DELETE) ๊ตฌ์กฐ ์ตํžˆ๊ธฐ

  • โœ… ๋กœ๋”ฉ ์ƒํƒœ, ์—๋Ÿฌ ํ•ธ๋“ค๋ง, ์š”์ฒญ ์ทจ์†Œ(AbortController) ๋“ฑ ์‹ค์ „ ์š”์†Œ๊นŒ์ง€ ๋ฐ˜์˜

  • ๐Ÿงฉ ์‹ค์ „ ์ค‘์‹ฌ CRUD ์ž‘์—…์„ fetch๋กœ ์ „๋ถ€ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฆฌ์•กํŠธ ์—ฐ๋™ ํ๋ฆ„ ์ดํ•ด

๐Ÿ”น axios๋ฅผ ํ™œ์šฉํ•œ ๊ณ ๊ธ‰ ํŒจ์นญ

  • axios ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•๋ถ€ํ„ฐ CRUD ์ „์ฒด ํ๋ฆ„ ์ •๋ฆฌ

  • โœ… axios.create()๋ฅผ ํ†ตํ•œ ๊ณตํ†ต ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ

  • โœ… ์ธํ„ฐ์…‰ํ„ฐ, ์—๋Ÿฌ ํ•ธ๋“ค๋ง, ์‘๋‹ต ๊ตฌ์กฐ ํ†ตํ•ฉ ๋“ฑ ์‹ค๋ฌด ์ „๋žต ์†Œ๊ฐœ

๐Ÿงฉ ์‹ค์ „ ํ”„๋กœ์ ํŠธ: PostBrowser ์•ฑ

  • ๊ธฐ๋ณธ ์ฝ”๋“œ ์ œ๊ณต โ†’ ๋ฆฌ์•กํŠธ ์•ฑ์— ๋ฐ์ดํ„ฐ ์—ฐ๋™ ์ ์šฉ

  • ๊ฒŒ์‹œ๊ธ€ ๋ Œ๋”๋ง โ†’ ํŽ˜์ด์ง• ๊ตฌํ˜„ โ†’ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๊นŒ์ง€ ์ˆœ์ฐจ์  ์™„์„ฑ

  • โœ… ์‹ค์Šต์„ ํ†ตํ•ด ์ƒํƒœ ๊ด€๋ฆฌ, ํŒจ์นญ ํ๋ฆ„, UI ์—…๋ฐ์ดํŠธ ํ๋ฆ„ ์ „๋ถ€ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ฒฝํ—˜

์ด ์ฑ•ํ„ฐ๋ฅผ ๋งˆ์น˜๋ฉด, ๋‹จ์ˆœํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋„˜์–ด์„œ API์™€ ํ†ต์‹ ํ•˜๋Š” ์‹ค์ „ํ˜• ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ดํ›„ TanStack Query๋‚˜ ๊ณ ๊ธ‰ ์ƒํƒœ ๊ด€๋ฆฌ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์‹คํ•œ ๊ธฐ๋ฐ˜์„ ๋‹ค์ง€๋Š” ํŒŒํŠธ์ž…๋‹ˆ๋‹ค.

Chapter 17
๋ฐ์ดํ„ฐ ํ†ต์‹  ์‹ฌํ™”

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

๐Ÿ”น ๋ฆฌ์•กํŠธ 19์˜ ํผ ์ฒ˜๋ฆฌ์™€ ๋น„๋™๊ธฐ ํ๋ฆ„

  • useTransition์„ ์ด์šฉํ•œ ์Šค๋ฌด์Šคํ•œ UI ์ƒํƒœ ์ „ํ™˜ ์ฒ˜๋ฆฌ

  • ๐Ÿงฉ Transition ์ ์šฉ ์ „ํ›„ ๋น„๊ต ์‹ค์Šต์„ ํ†ตํ•ด ์ฒด๊ฐํ˜• ํ•™์Šต

  • useActionState, form action, useFormStatus๋ฅผ ํ†ตํ•œ
    โ†’ ํผ ์ฒ˜๋ฆฌ์˜ ์ƒˆ๋กœ์šด ๋ฐฉ์‹๊ณผ ์„œ๋ฒ„ ์•ก์…˜ ํ๋ฆ„ ํ•™์Šต

๐Ÿ”น ์ตœ์‹  UX ๊ธฐ๋Šฅ ํ™œ์šฉ

  • useOptimistic์œผ๋กœ ๋‚™๊ด€์  UI ๊ตฌํ˜„

  • โœ… ๋น„๋™๊ธฐ ์ž‘์—… ์ „ ์‘๋‹ต ์—†์ด๋„ UI๋ฅผ ๋จผ์ € ๋ฐ˜์˜ํ•˜๋Š” ์ตœ์‹  UX ์„ค๊ณ„

  • use()๋ฅผ ํ†ตํ•œ Promise ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ง์ ‘ ์ฒ˜๋ฆฌ ๋ฐ Suspense ์—ฐ๊ณ„

  • ErrorBoundary์™€ Suspense ์กฐํ•ฉ์œผ๋กœ ์—๋Ÿฌ + ๋กœ๋”ฉ ๋Œ€์‘ ์ „๋žต ๊ตฌ์„ฑ

๐Ÿงฉ ์‹ค์ „: TMDB ์˜ํ™” ์•ฑ ๊ฐœ๋ฐœ

  • ์˜ํ™” ๋ชฉ๋ก ๋ Œ๋”๋ง โ†’ ํŽ˜์ด์ง• โ†’ ๋ฌดํ•œ์Šคํฌ๋กค ๊ตฌํ˜„๊นŒ์ง€ ์ „๊ฐœ

  • ๐Ÿงฉ Suspense + use() + ErrorBoundary ์กฐํ•ฉ์œผ๋กœ ์‹ค์ „ ์™„์„ฑ๋„ ๋†’์€ ์˜ํ™” ์•ฑ ๊ตฌ์„ฑ

  • โœ… ํšŒ์›๊ฐ€์ž… ํ๋ฆ„๊นŒ์ง€ ํ†ตํ•ฉํ•œ ์„œ๋ฒ„์™€์˜ ํ†ต์‹  ์ „์ฒด ์‚ฌ์ดํด ๊ฒฝํ—˜

์ด ์ฑ•ํ„ฐ๋ฅผ ๋งˆ์น˜๋ฉด, ๋‹จ์ˆœํ•œ fetch๋‚˜ axios ์ˆ˜์ค€์„ ๋„˜์–ด
๋ฆฌ์•กํŠธ 19 ์‹œ๋Œ€์˜ ๋ฐ์ดํ„ฐ UX๋ฅผ ์„ ๋„ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์‹ค์ „ ์•ฑ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…น์—ฌ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ์ค‘์‹ฌ์˜ UI ์‘๋‹ต์„ฑ๊ณผ ์‹ค์‹œ๊ฐ„์„ฑ ์žˆ๋Š” ์•ฑ ๊ตฌํ˜„์„ ์›ํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœ๋˜๋Š” ํŒŒํŠธ์ž…๋‹ˆ๋‹ค.

Chapter 18
React Router v7

๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ผ์šฐํ„ฐ๋Š” ํŽ˜์ด์ง€ ๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ ํ๋ฆ„, ์‚ฌ์šฉ์ž ์ด๋™ ๊ฒฝํ—˜์„ ์ฑ…์ž„์ง€๋Š” ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.
์ด ์ฑ•ํ„ฐ์—์„œ๋Š” React Router v7์˜ ์ตœ์‹  API๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ SPA ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ ,
๋ผ์šฐํŒ… + ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ + ์—๋Ÿฌ ํ•ธ๋“ค๋ง๊นŒ์ง€ ์™„์ „ํ•œ ์ „ํ™˜ ํ๋ฆ„์„ ๊ตฌ์ถ•ํ•ด๋ด…๋‹ˆ๋‹ค.

๐Ÿ”น ๋ผ์šฐํŒ… ๊ธฐ์ดˆ์™€ ๊ตฌ์กฐํ™”

  • ๊ธฐ๋ณธ ์„ค์น˜ ๋ฐ ๋ผ์šฐํ„ฐ ์„ค์ •

  • ์ค‘์ฒฉ ๋ผ์šฐํŠธ, ์ธ๋ฑ์Šค ๋ผ์šฐํŠธ, ๋ ˆ์ด์•„์›ƒ ๋ผ์šฐํŠธ ๊ตฌ์„ฑ

  • โœ… ๋ผ์šฐํŠธ ํ”„๋ฆฌํ”ฝ์Šค, ๋™์ /์˜ต์…”๋„ ์„ธ๊ทธ๋จผํŠธ, ์Šคํ”Œ๋žซ ๋“ฑ ์‹ค๋ฌดํ˜• ๊ฒฝ๋กœ ํŒจํ„ด ํ•™์Šต

  • NavLink, Link๋ฅผ ํ™œ์šฉํ•œ UI ์ค‘์‹ฌ์˜ ์ด๋™ ์ œ์–ด

๐Ÿ”น ํผ & ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋™์ž‘

  • <Form> ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ๊ธฐ๋ฐ˜ ํผ ์ฒ˜๋ฆฌ ์ดํ•ด

  • navigate() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ์ด๋™ ์ฒ˜๋ฆฌ

  • โœ… ์ „ํ†ต์ ์ธ form ์ œ์ถœ ๋ฐฉ์‹๊ณผ ๋ผ์šฐํ„ฐ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ์˜ ์ฐจ์ด ์ฒดํ—˜

๐Ÿ”น ๋ฐ์ดํ„ฐ ํŒจ์นญ + ๋กœ๋”ฉ + ์—๋Ÿฌ ํ•ธ๋“ค๋ง

  • loader ์†์„ฑ์„ ํ†ตํ•œ ๋ผ์šฐํŠธ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ ํŒจ์นญ ํ๋ฆ„ ์„ค๊ณ„

  • loader์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋น„๋™๊ธฐ ์š”์ฒญ โ†’ ๋กœ๋”ฉ ์ฒ˜๋ฆฌ โ†’ ์—๋Ÿฌ ํ•ธ๋“ค๋ง

  • โœ… loader + suspense, loader + errorElement ๋“ฑ ์‹ค์ „ ๊ตฌ์กฐ ๊ตฌํ˜„

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

Chapter 19
Final Project - SULOG

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


๐Ÿ›  ๋ฐฑ์—”๋“œ + ์ธ์ฆ ๊ตฌํ˜„

  • MongoDB ์„ค์ • ๋ฐ ๋ฐฑ์—”๋“œ API ์—ฐ๋™

  • โœ… ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ตฌํ˜„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก๋ถ€ํ„ฐ OAuth ํ”Œ๋กœ์šฐ ์ „์ฒด ๊ตฌ์„ฑ

  • โœ… ์ž์ฒด ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๊ตฌํ˜„: ํผ ๊ตฌ์„ฑ + ์„œ๋ฒ„ ์—ฐ๋™ + ์ƒํƒœ ๊ด€๋ฆฌ

  • ํ† ํฐ ์ธ์ฆ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ, ์ธ์ฆ ํ๋ฆ„ ๋””๋ฒ„๊น… ์‹ค์Šต


๐Ÿงฉ ๊ฒŒ์‹œ๊ธ€ ๊ธฐ๋Šฅ ์ „์ฒด ๊ตฌํ˜„

  • ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก โ†’ ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ํ”„๋ฆฌ์…‹ ์—ฐ๋™

  • โœ… ์ˆ˜์ •, ์‚ญ์ œ, ์ƒ์„ธ ๋ณด๊ธฐ ๊ธฐ๋Šฅ๊นŒ์ง€ ๋ชจ๋“  CRUD ํ๋ฆ„ ์‹คํ˜„

  • ๋Œ“๊ธ€ ์ž‘์„ฑ, ์‚ญ์ œ, ๋ Œ๋”๋ง ๋กœ์ง โ†’ ์ƒํƒœ ์—ฐ๋™ ๋ฐ ๋ฆฌ๋ Œ๋”๋ง ์ฒ˜๋ฆฌ

  • โœ… ๋ฐฑ์—”๋“œ ์ˆ˜์ • ๋‚ด์šฉ์€ ๊ฐ•์˜ ๋…ธํŠธ๋กœ ํ•จ๊ป˜ ์ œ๊ณต


๐Ÿ” ํŽ˜์ด์ง€๋„ค์ด์…˜ + ๋ฆฌ์ŠคํŠธ ์ตœ์ ํ™”

  • ๋ฉ”์ธ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

  • โœ… ํŽ˜์ด์ง€๋„ค๋น„๊ฒŒ์ด์…˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ์„ค๊ณ„ํ•˜์—ฌ ์‹ค์ „ ๊ฐ๊ฐ ๊ฐ•ํ™”

  • ๋ฌดํ•œ์Šคํฌ๋กค์ด ์•„๋‹Œ ์ •ํ˜•ํ™”๋œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ์ „๋žต ์ดํ•ด


๐ŸŽฏ UI ๋‹ค๋“ฌ๊ธฐ + ์˜ค๋ฅ˜ ๋ณด์™„ + ์‹ค์ œ ๋ฐฐํฌ

  • ์‚ฌ์šฉ์ž ํ๋ฆ„์— ๋งž์ถ˜ UI/UX ๊ฐœ์„ ๊ณผ ๋ฏธ๋น„์  ๋ณด์™„

  • โœ… ํ”„๋ก ํŠธ์—”๋“œ & ๋ฐฑ์—”๋“œ ๊ฐ๊ฐ Vercel์„ ํ†ตํ•œ ์‹ค์ œ ๋ฐฐํฌ ์‹ค์Šต

  • ์‹ค ์„œ๋น„์Šค ๊ธฐ์ค€์œผ๋กœ ๋„๋ฉ”์ธ ๊ตฌ์„ฑ, ์ด๋ฏธ์ง€ ์ตœ์ ํ™”, ์ตœ์ข… ์ ๊ฒ€๊นŒ์ง€

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

๋‹ค์–‘ํ•œ ์‹ค์Šต

์ฑ•ํ„ฐ๋ณ„ ์ˆ˜์ค€์— ๋งž๊ฒŒ ๊ตฌ์„ฑ๋œ ์ตœ์ ํ™”๋œ ์‹ค์Šต

๋””์ž์ธ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์‹ค์Šต๋งŒ ๋นผ๊ณ , ๋””์ž์ธ์ด ์ ์šฉ๋œ ๊ฒƒ๋งŒ ์†Œ๊ฐœํ• ๊ฒŒ์š”!

์‹ ํ˜ธ๋“ฑ(chapter 08)

๋žจํ”„(chapter 08)

๊ณ„์‚ฐ๊ธฐ(chapter 09)

๋กœ๊ทธ์ธ(chapter 10)

ํ• ์ผ ๊ด€๋ฆฌ ์•ฑ(chapter 11)

์‚ฌ์šฉ์ž ์„ค์ •(chapter 13)

Post Browser(chapter 16)

TMDB(chapter 17)

ํŒŒ์ด๋„(chapter 19) - ์šฉ๋Ÿ‰๋ฌธ์ œ๋กœ ์›€์งค ๋ถˆ๊ฐ€..ใ… 

๋””์ž์ธ์ด ์ ์šฉ์•ˆ๋œ ์˜ˆ์ œ๊นŒ์ง€ ํ•˜๋ฉด ์ˆ˜์‹ญ๊ฐœ +

์ด๋Ÿฌํ•œ ๋ฐ€๋„ ๋†’์€ ๋ชจ๋“  ์˜ˆ์ œ๋“ค์ด ์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ๋‹จ๊ณ„์ ์ธ ํ•™์Šต์„

์™„๋ฒฝํ•˜๊ฒŒ ๋„์™€์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ž์‹ ํ•ฉ๋‹ˆ๋‹ค.

์ž ์‹œ๋งŒ์š”!

๊ฐ•์˜์—๋„ ๋‚˜์™€ ๋งž๋Š” '๊ฒฐ'์ด ์žˆ๋‹ค๋Š” ๊ฑฐ ์•„์‹œ๋‚˜์š”?

๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์ธ์ •๋ฐ›๋Š” ๋Œ€์ž‘ ๊ฒŒ์ž„์ด ๋‚˜์—๊ฒŒ๋Š” ์žฌ๋ฏธ์—†์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ,
๊ฐ•์˜๋„ ๋ชจ๋‘์—๊ฒŒ ๋˜‘๊ฐ™์ด ๋งž๋Š” ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค.

์•„๋ฌด๋ฆฌ ์นญ์ฐฌ์ด ์ž์žํ•œ ๊ฐ•์˜๋ผ๋„ ๋‚˜์™€ ๋งž์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ ,
๋ฐ˜๋Œ€๋กœ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒ ํ‰๋ฒ”ํ•œ ๊ฐ•์˜๊ฐ€ ๋‚˜์—๊ฒ ์ตœ๊ณ ์˜ ๊ฐ•์˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์ฃ .

๊ทธ๋ž˜์„œ ์ œ ๋ชจ๋“  ๊ฐ•์˜๋Š” ์ตœ์†Œ 10% ์ด์ƒ ๋ฌด๋ฃŒ๋กœ ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ง์ ‘ ๋“ค์–ด๋ณด๊ณ , ์ €์™€ ์Šคํƒ€์ผ์˜ โ€˜๊ฒฐโ€™์ด ๋งž๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”!

๋งŒ์•ฝ ์ €์™€ ๊ฒฐ์ด ์ž˜ ๋งž๋Š”๋‹ค๋ฉด,
ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ๊ฐ€๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์ง€๋ฆ„๊ธธ์„ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ฏฟ๊ณ  ๋”ฐ๋ผ์˜ค์„ธ์š”! ๐Ÿš€

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q. ์ง„์งœ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋Š” ์ดˆ๋ณด์ž์ž…๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์„๊นŒ์š”?
A. ๋„ค. ์ •๋ง ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑํ•œ ๋งž์ถค ๊ฐ•์ขŒ์ž…๋‹ˆ๋‹ค. ๋‹จ, ํ•™์Šต์— ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์— ๋Œ€ํ•œ ์ตœ์†Œ ์ˆ˜์ค€์˜ ์ง€์‹์€ ๊ฐ–์ถ”์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Q. ์„ ์ˆ˜์ง€์‹์ด ํ•„์š”ํ•œ๊ฐ€์š”?

A. ๋„ค, ๋ณธ ๊ฐ•์ขŒ๋Š” ๋ฐ˜๋“œ์‹œ HTML5/CSS3/JavaScript/TypeScript์— ๋Œ€ํ•œ ์„ ํ–‰ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „(OS): Windows, macOS

  • ์‚ฌ์šฉ ๋„๊ตฌ: ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์–ด ์ฝ”๋“œ(Visual Studio Code), ํฌ๋กฌ(Chrome)

  • PC ์‚ฌ์–‘: ์›น ์„œํ•‘์ด ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์˜ ์ตœ์ € ์‚ฌ์–‘๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ•™์Šต ์ž๋ฃŒ

  • ์‹ค์Šต ์ง„ํ–‰์„ ์œ„ํ•œ ๊ฐ•์˜๋ณ„ ํ•™์Šต ์ž๋ฃŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


์„ ์ˆ˜ ์ง€์‹ ๋ฐ ์œ ์˜์‚ฌํ•ญ

  • ์™„์ „ ๋น„์ „๊ณต์ž, ์ดˆ๋ณด์ž๋„ ์ˆ˜๊ฐ• ๊ฐ€๋Šฅ

  • ๋‹จ, HTML5/CSS3/JavaScript/TypeScript์— ๋Œ€ํ•œ ํ•™์Šต์€ ์„ ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๋ฆฌ์•กํŠธ๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์ž…๋ฌธ์ž

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ๋ฆฌ์•กํŠธ๋Š” ์ต์ˆ™ํ•˜์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‚ฏ์„  ๊ฐœ๋ฐœ์ž

  • ์ƒํƒœ๊ด€๋ฆฌ ๋„๊ตฌ(Context, Redux Toolkit, Zustand)๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๋น„๊ตํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • React 19์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‹ค๋ฌด์— ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

  • ํฌํŠธํด๋ฆฌ์˜ค์šฉ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ•˜๊ณ  ์‹ถ์€ ์˜ˆ๋น„ ์ทจ์—…์ž

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • html + css

  • javascript

  • typescript

์•ˆ๋…•ํ•˜์„ธ์š”
์ˆ˜์ฝ”๋”ฉ์ž…๋‹ˆ๋‹ค.

5,029

๋ช…

์ˆ˜๊ฐ•์ƒ

291

๊ฐœ

์ˆ˜๊ฐ•ํ‰

149

๊ฐœ

๋‹ต๋ณ€

4.9

์ 

๊ฐ•์˜ ํ‰์ 

8

๊ฐœ

๊ฐ•์˜

์ˆ˜์ฝ”๋”ฉ์€ ์˜จ๋ผ์ธ๊ณผ ์˜คํ”„๋ผ์ธ์„ ๋ณ‘ํ–‰ํ•˜๋ฉด์„œ
์ฝ”๋”ฉ์„ ๊ฐ€๋ฅด์น˜๋Š” ํ™œ๋™์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋…„๊ฐ„์˜ ์˜คํ”„๋ผ์ธ ๊ฐ•์˜ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ,
๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ฝ”๋”ฉ์„ ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋„๋ก
๋งค์ผ ๊ณ ๋ฏผํ•˜๊ณ , ๋Š์ž„์—†์ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 4๊ถŒ์˜ ์ฑ…์„ ์ถœํŒํ•˜๋ฉฐ
ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐ•์˜ ๋ถ„์•ผ๋ฅผ ์„ ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

๋˜ํ•œ, ์œ ํŠœ๋ธŒ ์ฑ„๋„์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฌด๋ฃŒ ๊ฐ•์˜๋„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ‘‡ ์ง€๊ธˆ ๋ฐ”๋กœ ๋ฐฉ๋ฌธํ•ด ๋ณด์„ธ์š”
[์œ ํŠœ๋ธŒ ์ฑ„๋„ ๋งํฌ]

๋‹ค์–‘ํ•œ ํ• ์ธ ์†Œ์‹ ๋˜ํ•œ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ‘‡ ์ง€๊ธˆ ๋ฐ”๋กœ ๋ฐฉ๋ฌธํ•ด ๋ณด์„ธ์š”
[๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ๋งํฌ]

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

319๊ฐœ โˆ™ (26์‹œ๊ฐ„ 54๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

61๊ฐœ

4.9

61๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • ์ธ๊ตฌ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์ธ๊ตฌ

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    29% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์นœ์ ˆํ•œ ๋งํˆฌ๋กœ ์ง‘์ค‘๋„ ์ž˜๋˜๊ณ  ๋„ˆ๋ฌด ์„ฌ์„ธํ•œ๊ฑฐ๊ฐ™์Šต๋‹ˆ๋‹ค

    • ์ˆ˜์ฝ”๋”ฉ
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š” ์ธ๊ตฌ๋‹˜! ์ข‹์€ ๋ง์”€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ง‘์ค‘ํ•ด์„œ ๋“ค์–ด์ฃผ์…”์„œ ๋” ํž˜์ด ๋‚˜๋„ค์š”. ์•ž์œผ๋กœ๋„ ์„ฌ์„ธํ•˜๊ณ  ์นœ์ ˆํ•œ ๊ฐ•์˜๋กœ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š

  • ๊ณฐ์ฝ”๋“œ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ๊ณฐ์ฝ”๋“œ

    ์ˆ˜๊ฐ•ํ‰ 5

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

    31% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์ค‘๊ฐ„์— ๋ฏธ์…˜ ํŒŒํŠธ๊ฐ€ ์žˆ์–ด์„œ ์Šค์Šค๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์–ผ๋งŒํผ ๊ฐœ๋…์„ ์ดํ•ดํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ •๋ง ๋งŒ์กฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฐ•์˜๊ฐ€ ๋งŽ์ด ๊ธฐ๋‹ค๋ ค์ง‘๋‹ˆ๋‹ค. ๋นจ๋ฆฌ ๋‚˜์™”์œผ๋ฉด ์ข‹๊ฒ ๋„ค์š”! ๊ฐœ์ธ์ ์œผ๋กœ ์„ ์ƒ๋‹˜ ๊ฐ•์˜ ์Šคํƒ€์ผ์ด๋ฉด ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜๋„ ์ž˜ ๋งŒ๋“œ์‹ค๊ฑฐ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

    • ์ˆ˜์ฝ”๋”ฉ
      ์ง€์‹๊ณต์œ ์ž

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

  • ay.kim๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ay.kim

    ์ˆ˜๊ฐ•ํ‰ 1

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    17% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์‹ค๋ฌด์—์„œ ํ•„์š”ํ•ด์„œ ๋“ฃ๊ฒŒ ๋˜์—ˆ์–ด์š”. ์›น ๊ฐœ๋ฐœ์€ ์ฒ˜์Œ์ธ๋ฐ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ์ดํ•ดํ•˜๊ธฐ ์ข‹์•„์š”! ๋๊นŒ์ง€ ์ž˜ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    • ์ˆ˜์ฝ”๋”ฉ
      ์ง€์‹๊ณต์œ ์ž

      ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•˜์‹ ๋‹ค๋‹ˆ ๋ฉ‹์ง€๋„ค์š”! ์ฒ˜์Œ ์‹œ์ž‘ํ•˜์‹œ๋Š” ๋ถ„๋“ค๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์œผ๋‹ˆ ๊ฑฑ์ • ๋งˆ์‹œ๊ณ  ๋๊นŒ์ง€ ํ•จ๊ป˜ ํ•ด๋ด์š”. ์‘์›ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ’ช

  • sy๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    sy

    ์ˆ˜๊ฐ•ํ‰ 11

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๋‹ด๋ฐฑํ•จ, ๊น”๋”ํ•จ, ์„ฌ์„ธํ•จ, ์žฌ๋ฏธ๊นŒ์ง€ ๋‹ค ๊ฐ–์ถ˜ ๊ฐ•์˜. ์ข‹์€ ๊ฐ•์˜ ๋งŒ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    • ์ˆ˜์ฝ”๋”ฉ
      ์ง€์‹๊ณต์œ ์ž

      sy๋‹˜ ์ข‹์€ ํ‰๊ฐ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ–‰๋ณตํ•œ ํ•˜๋ฃจ ๋˜์„ธ์š”~!

  • ์ „ํฌ์„ฑ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์ „ํฌ์„ฑ

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

    36% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์ˆ˜๊ฐ•ํ‰์„ ํ•œ ๋ฒˆ๋„ ์ž‘์„ฑํ•ด๋ณธ ์ ์ด ์—†๋Š”๋ฐ, React ํ•™์Šต์šฉ์œผ๋กœ ์ด ๊ฐ•์˜ ์ •๋ง ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค!!! ๊ธ‰ํ•˜๊ฒŒ ๋ฆฌ์•กํŠธ๋ฅผ ํ•™์Šตํ•ด์•ผ ํ•ด์„œ ํ˜„์žฌ ์•ฝ 30% ์ •๋„ ์ˆ˜๊ฐ•ํ–ˆ๋Š”๋ฐ, ํ ์žก์„ ๊ณณ์ด ์—†๋Š” ๊ฐ•์˜๋ผ๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜ํ•˜๋‚˜ ํ•„์š” ์—†๋Š” ๋ถ€๋ถ„์ด ์—†๋„ค์š”. ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋ณผ ํ•„์š” ์—†์ด, ์ด ๊ฐ•์˜ ํ•˜๋‚˜๋ฉด ๋ฆฌ์•กํŠธ ๊ธฐ๋ณธ์€ ๋งˆ์Šคํ„ฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • ์ˆ˜์ฝ”๋”ฉ
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š” ์ „ํฌ์„ฑ๋‹˜! ์ฒ˜์Œ์œผ๋กœ ๋‚จ๊ฒจ์ฃผ์‹  ์ˆ˜๊ฐ•ํ‰์ด๋ผ๋‹ˆโ€ฆ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š ๊ธ‰ํ•˜๊ฒŒ React๋ฅผ ํ•™์Šตํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋„ ๋งŒ์กฑ์Šค๋Ÿฝ๊ฒŒ ์ˆ˜๊ฐ•ํ•˜๊ณ  ๊ณ„์‹œ๋‹ค๋‹ˆ, ๊ฐ•์˜๋ฅผ ๋งŒ๋“  ์ž…์žฅ์—์„œ ์ •๋ง ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋‚ด์šฉ์„ ๋œ์–ด๋‚ด๊ณ , ๊ผญ ์•Œ์•„์•ผ ํ•  ํ•ต์‹ฌ์— ์ง‘์ค‘ํ•˜๋ ค๊ณ  ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ ๊ทธ ๋ถ€๋ถ„์„ ์•Œ์•„๋ด ์ฃผ์…”์„œ ๋” ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์•„์ง 30% ์ •๋„ ์ˆ˜๊ฐ•ํ•˜์…จ๋‹ค๊ณ  ํ•˜์…จ๋Š”๋ฐ, ์•ž์œผ๋กœ ์ด์–ด์ง€๋Š” ๋‚ด์šฉ๋„ ๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ๋‹ค์งˆ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•ด ๋‘์—ˆ์œผ๋‹ˆ ๋๊นŒ์ง€ ํ•จ๊ป˜ํ•ด ์ฃผ์„ธ์š” ๐Ÿ’ช ๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์ด ๊ฐ•์˜ ํ•˜๋‚˜๋กœ React ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ œ๋Œ€๋กœ ๋‹ค์งˆ ์ˆ˜ ์žˆ๋„๋ก ๋๊นŒ์ง€ ์ฑ…์ž„์ง€๋Š” ๊ฐ•์˜๊ฐ€ ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง„์‹ฌ ์–ด๋ฆฐ ์ถ”์ฒœ๊ณผ ์‘์›, ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๐Ÿ™

์ˆ˜์ฝ”๋”ฉ๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

์ง€์‹๊ณต์œ ์ž๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

๋น„์Šทํ•œ ๊ฐ•์˜

๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

์›” โ‚ฉ19,800

5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

โ‚ฉ99,000