๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (93) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Side Project] ๊ฐ๋ก์ธ๋ก ๋ฑ๋งํด์ฆ ๊ฒ์ ๋ง๋ค๊ธฐ(01) 2024๋ 11์๋ถํฐ, ํ์ฌ ๋๋ฃ๋ถ 2๋ช ๊ณผ ํจ๊ป ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ํด๋ณด๊ธฐ๋ก ํ๋ค.์ผ๋จ ๋ฉค๋ฒ ๊ตฌ์ฑ์ ํ๋ก ํธ๋ ๋, ๋๋ฃ๋ถ 2๋ช ์ ๋ฐฑ์๋. ์ด๋ ๊ฒ 3๋ช ์ด์ ์งํํ๊ธฐ๋ก ํ๋ค. ํด๊ทผํ๊ณ ๋งค์ฃผ ์์์ผ์ ์จ๋ผ์ธ ๋๋ ์คํ๋ผ์ธ์ผ๋ก ๋ง๋์ ๊ธฐํํ๊ณ ๊ณํ์ ์ธ์ ๋ค.์ฒ์์ ์กฐ๊ธ ํฐ ๊ท๋ชจ์ ์๋น์ค๋ฅผ ์๊ฐํ๋ค๊ฐ, ์ฌ์ด๋ ํ๋ก์ ํธ์ธ ๋งํผ ๋น ๋ฅด๊ฒ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ์ ์๋๋ก๋ ์์ ๊ท๋ชจ์ ์๋น์ค ์์ด๋์ด ํ์๋ฅผ ์งํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๊ฐ๋ก์ธ๋ก ๋ฑ๋งํด์ฆ ์๋น์ค๋ฅผ ๋ง๋ค์ด๋ณด๊ธฐ๋ก ํ๋ค. ํด์ฆ์ ๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์๊ณ , ๋จธ์ ๋ฌ๋์ ํตํด ์ถํ ์๋ํ๊น์ง ๊ณ ๋ คํ๊ธฐ๋ก ํ์๊ณ (์ฝํ ์ธ ์ ์ง๊ณผ ์์ด ์ค์ํ ์๋น์ค์ด๊ธฐ ๋๋ฌธ์)๊ธฐ์ ์คํ์ ๋ค๋ค ๊ฐ์ ํด๋ณด๊ณ ์ถ์ง๋ง ์ค๋ฌด์์๋ ๊ฒฝํํ๊ธฐ ํ๋ ์ต์ ๊ธฐ์ ๋๋ ๋ณธ์ธ๋ค์ด ํด๋ณด๊ณ ์ถ์๋ ์คํ์ผ๋ก ๊ณต๋ถํ๋ฉฐ ์์ ์ ์งํํ.. [ WEB ] ์น ํ๋ก ํธ์๋ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ ์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ทน๋ํํ๊ธฐ ์ํด ์ฑ๋ฅ ์ต์ ํ๊ฐ ๊ผญ ํ์ํ๋ค๊ณ ์๊ฐํ๋ค. ์๋น์ค๋ฅผ ์ฌ์ฉํ ๋, ๋๋ฆฐ ๋ก๋ฉ ์๋์ ์ฑ๋ฅ์ด ์ ํ๋๋ ๋ถํ์ํ ์์ ๋ญ๋น๋ ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์ข์ง ์์ ๊ฒฝํ์ ๋จ๊ธฐ๊ณ , ์ด๋ฐ ๊ฒฝํ์ ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์๋น์ค๋ฅผ ์ดํํ๊ฒ๋ ๋ง๋๋ ์ฃผ์ ์์ธ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ์น ํ๋ก ํธ์๋ ์ฑ๋ฅ ์ต์ ํ์ ๋ํด ๊ฐ๋จํ ์์๋ณด๋ ค๊ณ ํ๋ค. 1. ์ด๊ธฐ ๋ก๋ฉ ์ต์ ํ์ฝ๋ ๋ถํ (Code Splitting): ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ์ฒญํฌ๋ก ๋๋์ด ํ์ํ ๋ถ๋ถ๋ง ๋ก๋ํ๋ค. Webpack, Rollup ๋ฑ์ ๋ฒ๋ค๋ฌ์์ dynamic import๋ฅผ ํ์ฉํ์ฌ ํ์ํ ๋ถ๋ถ์์๋ง ํ์ผ์ ์ฌ์ฉํ์ฌ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค. Lazy Loading: ์ด๋ฏธ์ง๋ ๋น๋์ค ๊ฐ์ ๋ฆฌ์.. [ React 18+ ] RSC(React Server Componen) ํํค์น๊ธฐ. RSC๋ React Server Components์ ์ฝ์๋ก, React18 ๋ฒ์ ๋ถํฐ ๋ฑ์ฅํ ๊ฐ๋ ์ด๋ค.์๋ฒ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํ๊ณ ํด๋ผ์ด์ธํธ์์ ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ผ๋ก, ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ์ํด ๋ฑ์ฅํ ๊ธฐ๋ฅ์ด๋ค. RSC๋ React์ ์์ฒด์ ์ธ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ๊ผญ Next.js๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ตฌํํ ์ ์์ง๋ง, RSC๋ ์๋ฒ-ํด๋ผ์ด์ธํธ์ ์ํธ์์ฉ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ Node.js๊ธฐ๋ฐ์ ์๋ฒ ํ๊ฒฝ์ด ํ์ํ๋ค. ๊ทธ๋์ Next.js๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด Express.js ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ HTTP ์๋ฒ๋ฅผ ๋ง๋ค๊ณ , ์๋ฒ-ํด๋ผ์ด์ธํธ ์คํธ๋ฆฌ๋ฐ, Webpack ๋ฒ๋ค๋ง(์๋ฒ / ํด๋ผ์ด์ธํธ), ๋ฐ์ดํฐ ํต์ , ์ฑ๋ฅ ์ต์ ํ(์บ์ฑ) ๋ฑ์ ์ถ๊ฐ์ ์ธ ์ค.. [ Next.js ] Next15์ ๋ํด ์์๋ณด๊ธฐ. 2024๋ 10์ 21์ผ Next15 ๋ฒ์ ์ด ๊ณต์ ๋ธ๋ก๊ทธ์ ์ ๋ฐ์ดํธ๋์๋ค.๊ณต์์ ์ผ๋ก ์์ ํ๋์ด ํ๋ก๋์ ์์ ์ฌ์ฉํ ์ค๋น๊ฐ ์๋ฃ๋์๋ค๊ณ ํ๋ค. ์ด๋ฒ ๋ฆด๋ฆฌ์ฆ๋ RC1๊ณผ RC2์ ์ ๋ฐ์ดํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์์ ์ฑ์ ์ค์ ์ ๋๋ฉด์๋ ํฅ๋ฏธ๋ก์ด ์ ๋ฐ์ดํธ๋ฅผ ์ถ๊ฐํ์๋ค๊ณ ํ๋ค.10์ 24์ผ์ ์ด๋ฆฐ Next.js Conf๊ฐ ์์๋๋ฐ, ์ฌ์ ์ ์ฒญํ๊ณ ๋ชป ๋ค์ด์ ๋ นํ๋ณธ์ ๋ณด๊ณ ๋ค์์ ๊ทธ ๋ด์ฉ์ ๋ํ ํฌ์คํ ๋ ํ ์์ ์ด๋ค. Next15์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.# ์๋ก์ด ์๋ ์ ๊ทธ๋ ์ด๋ CLI ์ฌ์ฉnpx @next/codemod@canary upgrade latest# ...๋๋ ์๋์ผ๋ก ์ ๊ทธ๋ ์ด๋npm install next@latest react@rc react-dom@rc Next.js 15์ ์๋ก์ด ๊ธฐ๋ฅ.. React 18 ๋ณ๊ฒฝ์ ์ ๋ฆฌ ์ค๋์ React19 release version์ด ๋์ค๊ธฐ ์ ์ React 18์ ํฐ ๋ณ๊ฒฝ์ ์ ๋ํด ์ดํด๋ณด๋ ค๊ณ ํ๋ค.ํ์ฌ ๊ธฐ์ค React ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ 18.3.1 ์ด๋ค.(2024๋ 4์ 26์ผ) ๊ทธ๋ฆฌ๊ณ React18์ 2022๋ 3์ 29์ผ์ ์ ์ ๋ฆด๋ฆฌ์ฆ ๋์๋ค. 1. ๋์ ๋ ๋๋ง(Concurrent Rendering) ๋์ ๋ ๋๋ง(Concurrent Rendering)์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ ์ ์ฐํ๊ณ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ผ๋ก, ์ ํต์ ์ธ ๋ ๋๋ง ๋ฐฉ์์์๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋ ๋, ๋ณ๊ฒฝ ์ฌํญ์ด ํ ๋ฒ์ ๋ ๋๋ง๋๋ฉด์ ์ค๋ ์๊ฐ์ด ์์๋๋ฉฐ UI๊ฐ ๋ฉ์ถ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ๋์ ๋ ๋๋ง(Concurrent Rendering)์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ.. [ React ] React 19 RC์ ๋ํด์ ์์๋ณด์ React19 RC(Release Candidate)๋ ํ์ฌ ๊ฐ๋ฐ ์ค์ด๋ฉฐ 2024๋ 9์ ๊ธฐ์ค์ผ๋ก ์์ง ์ ์ ์ถ์๋์ง ์์๋ค. ๊ฐ์ฅ ์ต์ ์ ๋ณด(2024๋ 4์ ๊ธฐ์ค, React Blog ์ฐธ๊ณ )๋ฅผ ๋ฐํ์ผ๋ก ์ค๋ช ํ์๋ฉด React 19๋ ์ด์ ๋ฒ์ ๋ค๊ณผ ๋น๊ตํด ๋ช ๊ฐ์ง ์ฃผ์ ๊ฐ์ ์ฌํญ๊ณผ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ํฌํจํ ๊ฒ์ผ๋ก ์์๋๋ค. ์ฑ๋ฅ ๊ฐ์ : ๋ ๋๋ง๊ณผ ์ํ ์ ๋ฐ์ดํธ ์ฑ๋ฅ์ด ํฅ์๋ ์ ๋ง.์๋ฒ ์ปดํฌ๋ํธ: ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ๋์ฑ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ์๋ฒ ์ปดํฌ๋ํธ์ ์์ ํ ๊ตฌํ์ด ํฌํจ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.๋์์ฑ ๊ธฐ๋ฅ ๊ฐ์ : React 18์์ ๋์ ๋ ๋์์ฑ ๊ธฐ๋ฅ๋ค์ด ๋์ฑ ์์ ํ๋๊ณ ๋ฐ์ ๋ ๊ฒ์ผ๋ก ์์.์๋ก์ด ํ : ๊ฐ๋ฐ์๋ค์ ์์ ์ ๋์ฑ ํธ๋ฆฌํ๊ฒ ๋ง๋ค์ด์ค ์๋ก์ด ํ ๋ค์ด ์ถ๊ฐ๋ ์ ์๋ค.ํ์ ์คํฌ๋ฆฝํธ ์ง์ ๊ฐํ: ํ์ ์คํฌ๋ฆฝ.. [ JS ] e.stopPropagation ๊ณผ e.preventDefault ์ฐจ์ด ์๊ณ ๋์ด๊ฐ๊ธฐ e.stopPropagation()๊ณผ e.preventDefault()๋ ๋น์ทํ๊ฒ ์ฌ์ฉ๋์ง๋ง, ์์ ๋ค๋ฅธ ์ด๋ฒคํธ์ด๋ค.e.stopPropagation()์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์์ ํ๊ทธ์์ ์คํ๋์ง ์๋๋ก ๋ง๋ ์ญํ ์ ํ๋ค. ๋ค์๋งํด ์ด๋ฒคํธ์ ๋ฒ๋ธ๋ง์ ์ค์งํ์ฌ ํ์ฌ ์ด๋ฒคํธ๊ฐ ์์ ์์(๋ถ๋ชจ)๋ก ์ ํ๋๋ ๊ฒ์ ๋ง๋๋ค.e.preventDefault() ๋ ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ๋์์ ๊ฐ์ง ์ผ๋ถ ์ด๋ฒคํธ๊ฐ ํด๋น ๊ธฐ๋ณธ ๋์์ ์คํํ์ง ์๋๋ก ๋ฐฉ์งํ๋ค. ๋ณดํต ๋งํฌ ํด๋ฆญ ์ ํ์ด์ง ์ด๋๋ง๊ธฐ, ํผ ์ ์ถ์ ํ์ด์ง ๋ฆฌ๋ก๋ ๋ฐฉ์ง๋ฑ์ ๊ธฐ๋ณธ ๋์ ์ ์ด ์ญํ ์ ํ๋ค. e.stopPropagation() ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋ฒ๋ธ๋ง์ ๋ฐฉ์งํด์ค๋ค.( ๋ฒ๋ธ๋ง : ์ด๋ฒคํธ์ ์์ ์ปดํฌ๋ํธ์์ ๋ถ๋ชจ๋ก (์์ชฝ -> ๋ฐ๊นฅ์ชฝ) ์ ํ๋๋ ๊ฒ. ) ex.. [ WEB ] ์นํ๋ก ํธ์๋์์ ์ฑ ์ฑ๋ฅ ์ต์ ํ ํ๋ ๋ค์ํ ๋ฐฉ๋ฒ ์น ํ๋ก ํธ์๋์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ด ์์๊น?ํฌ๊ฒ ๋ก๋ฉ ์ฑ๋ฅ ์ต์ ํ์ ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ ์ด๋ ๊ฒ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ ๊ฒ ๊ฐ๋ค. ๋ก๋ฉ ์ฑ๋ฅ ์ต์ ํ์นํ๋ก ํธ์์ ๋ก๋ฉ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค.์ฐ์ ๋ฆฌ์์ค ์ต์ํ ๋ฐ ์์ถ์ ํตํ ์ฌ์ด์ฆ ๊ฐ์(JavaScript, CSS, HTML ํ์ผ ์์ถ, ์ด๋ฏธ์ง ์ต์ ํ-ํฌ๊ธฐ ์กฐ์ , ์์ถ, webP์ฌ์ฉ ๋ฑ)๋ฅผ ํตํด ์ฑ์ ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ์ค์ผ ์๋ ์๊ณ , ์บ์ฑ ์ ๋ต์ ๊ตฌํํ์ฌ ๋ถํ์ํ ๋ฐ์ดํฐ ์ถ๊ฐ ์์ฒญ๋ฑ์ ๋ฐฉ์งํ ์๋ ์๋ค. ์บ์ฑ ์ ๋ต์ผ๋ก๋ ๋ธ๋ผ์ฐ์ ์บ์ฑ ์ค์ ์ ์ต์ ํํ๊ฑฐ๋, ์๋น์ค ์์ปค๋ฅผ ์ด์ฉํ ์คํ๋ผ์ธ ์บ์ฑ, CDN์ ํตํ ๋ฆฌ์์ค ์บ์ฑ๋ฑ์ด ์ฌ๊ธฐ์ ์ํ๋ค. SSR, SSG ๋ฑ์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์ธก JavaScript ์ค.. ์ด์ 1 2 3 4 ยทยทยท 12 ๋ค์