๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(90)
React / Next.js Next.jsReact๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ’€์Šคํƒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ. ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ ํž˜๋“  SSR์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. /*SSR(Server Side Rendering) : ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์„œ๋ฒ„๋กœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด HTML ๋ฌธ์„œ ์ „์ฒด๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๋ฐฉ์‹ MPA(Multi Page Application) : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ ํ”Œ๋ฆฌ์ปค ํ˜„์ƒ ๋ฐœ์ƒ CSR(Client Side Rendering) : ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ, ์„œ๋ฒ„๋Š” ๋นˆ html๋งŒ ๋ณด๋‚ด์ฃผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ jsํŒŒ์ผ์„ ๋ณด๋‚ด๋ฉฐ ๋นˆ html์„ ์ฑ„์›Œ์คŒ, ํŽ˜์ด์ง€๊ฐ€ ์ „ํ™˜๋˜๋ฉฐ ํ™”๋ฉด์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ๊ทธ ๋ถ€๋ถ„๋งŒ js๋กœ ๋ณ€ํ™”์‹œํ‚ดSPA(Single Page Applica..
React / Debounce, Throttle Debounce & Throttle์—ฐ์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ํ•จ์ˆ˜๋‚˜ ์ด๋ฒคํŠธ์˜ ์‹คํ–‰ ๋นˆ๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, ์ตœ์ ํ™”๋ฅผ ํ†ตํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๋ชฉ์ ์ด๋‹ค. Debounce vs Thottle 1) ํ•จ์ˆ˜๋‚˜ ์ด๋ฒคํŠธ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ 2) ํ•จ์ˆ˜๋‚˜ ์ด๋ฒคํŠธ๊ฐ€ ์—ฐ์†์ ์ด ์•„๋‹Œ ๋Š์–ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ Debounce : ์—ฐ์†์ ์œผ๋กœ ํ•จ์ˆ˜๋‚˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ ํ›„ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ถ”๊ฐ€ ์ด๋ฒคํŠธ/ํ•จ์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด ์‹คํ–‰Throttle : ์—ฐ์†์ ์œผ๋กœ ํ•จ์ˆ˜๋‚˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋™์•ˆ ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ(ํ…€์„ ๊ฐ€์ง€๊ณ )์œผ๋กœ ์‹คํ–‰ Debounce์—ฐ์†์ ์œผ๋กœ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋งˆ์ง€๋ง‰์— ํ•œ ๋ฒˆ์— ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•ด๋„ ์ƒ๊ด€ ์—†์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.๊ฒ€์ƒ‰ ์ž๋™ ์™„์„ฑ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ์— ์œ ์šฉํ•˜๋‹ค. ์˜ˆ์‹œ์ด๋ฒˆ์—๋„ ์ด์ „์— ..
React / ๋ฒˆ๋“ค๋ง, ์ฝ”๋“œ์Šคํ”Œ๋ฆฌํŒ… ๋ฒˆ๋“ค๋ง์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ(Javascript, CSS ๋“ฑ)์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒVite๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ Rollup, CRA๋Š” Webpack์ด๋ผ๋Š” ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํšจ๊ณผHTTP ์š”์ฒญ์˜ ์ˆ˜๋ฅผ ์ค„์—ฌ ์†๋„ ํ–ฅ์ƒ (๋ชจ๋“  javascript, css, ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด๋‚˜ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๊ฒฐํ•ฉํ•จ)์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•ด ํŒŒ์ผ ํฌ๊ธฐ ์ถ•์†Œ (๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ, ์ฃผ์„ ๋“ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ณ€์ˆ˜๋ช…์„ ๋‹จ์ถ•ํ•จ)์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ด ์ตœ์ ํ™” (Tree shaking์œผ๋กœ dead code ์ œ๊ฑฐ) package.json์—์„œ build ํ•ญ๋ชฉ์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด build์—๋Š” ๋ฒˆ๋“ค๋ง ๊ณผ์ •์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์ด์ „์— ์‹ค์Šตํ–ˆ๋˜ https://hydeveloper.tistory.com/210์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•ด ๋ดค๋‹ค.ํ„ฐ๋ฏธ๋„..
React / lazy, Suspense React์—์„œ๋Š” SPA(Single Page Application)์œผ๋กœ ๊ตฌํ˜„๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๋„ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ Œ๋”๋ง ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด lazy์™€ Suspense๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. lazy์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ”๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ์‹ค์ œ๋กœ ๊ทธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.lazy์˜ ์ธ์ž๋กœ import ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.* lazy๋Š” ๋ณดํ†ต ๋ชจ๋“ˆ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ์„ ์–ธ๋˜์–ด์•ผ ๋ Œ๋”๋ง ์‹œ ๋ชจ๋“  ์ƒํƒœ๊ฐ€ ์žฌ์„ค์ •๋˜๋Š” ํ˜„์ƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค// ๊ธฐ์กด import ๋ฐฉ์‹import Main from "./Main.jsx"// lazy ์‚ฌ์šฉ ์‹œconst Main = lazy(()=>import("./Main.jsx")); Suspsen..
React / React Developer Tools React ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  Props์™€ State๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.์ปดํฌ๋„ŒํŠธ ํƒ์ƒ‰, ๊ณ„์ธต ๊ตฌ์กฐ ํ‘œ์‹œ์ƒํƒœ ๋ฐ props, hooks ํ™•์ธ์ƒํƒœ ๋ณ€ํ™” ์ถ”์ virtual DOM ์‹œ๊ฐํ™” ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ : https://ko.react.dev/learn/react-developer-tools ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์ž„์˜์˜ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ, ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ Components ํƒญ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ํ™”๋ฉด์˜ ๊ตฌ์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, props๋‚˜ hooks๋„ ๋ณด์—ฌ์ง„๋‹ค. ์—ฌ๊ธฐ์„œ ๋นจ๊ฐ„ ๋™๊ทธ๋ผ๋ฏธ๋กœ ํ‘œ์‹œํ•ด๋‘” ํ†ฑ๋‹ˆ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์„ค์ • ๋ชจ๋‹ฌ์ด ๋œจ๋Š”๋ฐ,Highlight ..
React / ์ตœ์ ํ™” ํ•จ์ˆ˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”๋˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜๋Š” ๊ฒƒ์€ React์˜ ๊ธฐ๋ณธ ํŠน์ง•์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ๋ Œ๋”๋ง์ด ํ•„์š”์—†๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค๋„ ํ•จ๊ป˜ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜๊ณค ํ•œ๋‹ค. ๋˜, ํŽ˜์ด์ง€ ์ฒซ ๋กœ๋”ฉ ์‹œ csr๋ฐฉ์‹ ๋•Œ๋ฌธ์— ๋น„๊ต์  ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ด์ง„๋‹ค. ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ƒ๋ช… ์ฃผ๊ธฐ ๊ธ€ ์ฐธ๊ณ  ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์ปดํฌ๋„ŒํŠธ๋ฅผ ํด๋ž˜์Šค๋กœ ์ •์˜ -> ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋จ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ -> ์ธ์Šคํ„ด์Šค์˜ ๋‚ด๋ถ€ ๊ฐ’์ด ๋ณ€๊ฒฝ -> ๋ฐ”๋€ ๊ฐ’์— ๋งž์ถฐ ํ™”๋ฉด์ด ๋ฆฌ๋ Œ๋”๋ง=> ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค๋Š” ์ œ๊ฑฐ๋˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ์žฌ์‚ฌ์šฉ๋จ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜๋กœ ์ •์˜ -> ํ•จ์ˆ˜ ํ˜ธ์ถœ์ƒํƒœ ๋ณ€๊ฒฝ -> ๊ธฐ์กด์— ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ์ œ๊ฑฐ -> ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ -> ํ™”๋ฉด์— ๋ Œ..
React / ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (2) - Redux, Redux Toolkit Redux์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, flux ๊ทœ๊ฒฉ์— reducer๊ฐ€ ๊ฒฐํ•ฉ๋œ ํŒจํ„ด์ด๋‹ค. Flux๋ณด๋‹ค ๋”์šฑ ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์ ์ด ํŠน์ง•์ด๋‹ค. * Flux ํŒจํ„ดFacebook์—์„œ ๋งŒ๋“  ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ๋ฐ์ดํ„ฐ ํ๋ฆ„ : View → Action → Dispatcher → Store → View ์—…๋ฐ์ดํŠธ Redux์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ตฌ์„ฑ์š”์†ŒAction : ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”์‹œํ‚ฌ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋‹ด์€ ๊ฐ์ฒด↓Dispatch : ์•ก์…˜ ๊ฐ์ฒด๋ฅผ Reducer๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํ•จ์ˆ˜↓Reducer : ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์ด ์ƒˆ๋กœ์šด ์ƒํƒœ๊ฐ€ ๋˜๋Š” ํ•จ์ˆ˜์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด combineReducers ํ•จ์ˆ˜๋กœ ๋ฌถ์–ด ํ•˜๋‚˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ŒStore : Redux์˜ ์ „์—ญ ์ƒํƒœ ์ €์žฅ์†Œ, ..
React / ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (1) - ๋‚ด๋ถ€ React๋Š” ๋Œ€ํ‘œ์ ์ธ SPA(Single Page Application) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.SPA๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ด๋ฅผ ๊ฐ์ง€ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฆฌ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. React์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.๋‚ด๋ถ€์™ธ๋ถ€useStateContextAPIRedux, Redux ToolkitRecoil, MobX, Zustand, Jotai ... ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ์˜ ์žฅ์ Props Drilling ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ ํ•  ๋•Œ, ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋“ค๊นŒ์ง€ props๋ฅผ ๊ณ„์† ๋„˜๊ฒจ์ค˜์•ผ ํ•˜๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด์ „์— ํ–ˆ๋˜ todo list ๋งŒ๋“ค๊ธฐ์—๋„ props drilling์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. ..