๐ŸŒ• Front/โš›๏ธ React JS ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

ํ•ด๋‹น ๊ธ€ 14๊ฑด

Next.js ์•ฑ์—์„œ ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ์ ์— ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์ดˆ๊ธฐํ™” ๋กœ์ง์ด ํ•„์š”ํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ์บ์‹œ ์„ค์ •, ์™ธ๋ถ€ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ๊ฐ™์€ ๊ฒƒ๋“ค ๋ง์ด๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋‹ˆ instrumentation.ts ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด ์•ฑ ์‹œ์ž‘ ์‹œ์ ์— ํ•œ ๋ฒˆ ๋Œ์•„๊ฐ€๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๊ณ  register ํ•จ์ˆ˜๋ฅผ exportํ•˜๋ฉด ๋œ๋‹ค๊ณ  ๋‚˜์™€์žˆ์—ˆ๋‹ค.// instrumentation.tsexport async function register() { console.log('์„œ๋ฒ„ ์ดˆ๊ธฐํ™” ์ค‘...'); // ์ดˆ๊ธฐํ™” ๋กœ์ง}๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž˜ ๋˜๋”๋ผ. npm run dev ํ•˜๋ฉด ์ฝ˜์†”์— ๋กœ๊ทธ๋„ ์ž˜ ์ฐํžˆ๊ณ , ์ดˆ๊ธฐํ™”๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ํ›„ ์‹คํ–‰ํ•˜๋‹ˆ๊นŒ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋œ๋‹ค. npm run buildnpm start์ฝ˜์†”์— ..

Currency ์•ฑ์— ์ƒˆ๋กœ ๋‚˜์˜จ Tailwind v4๋ฅผ ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ธฐ์กด ์•ฑ๋“ค์€ v3๋ฅผ ์“ฐ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, "๊ฐ๊ฐ ๋”ฐ๋กœ ๋นŒ๋“œํ•˜๋‹ˆ๊นŒ ์ƒ๊ด€์—†๊ฒ ์ง€"๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒŒ ์ฐฉ๊ฐ์ด์—ˆ๋‹ค. PostCSS ์„ค์ •์ด ์ถฉ๋Œํ•˜๋ฉด์„œ ๋นŒ๋“œ๊ฐ€ ๋ง๊ฐ€์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ๊ฒฐ๊ตญ ์ „์ฒด monorepo ๊ตฌ์กฐ๋ฅผ ๋œฏ์–ด๊ณ ์น˜๊ฒŒ ๋๋‹ค. ์ผ๋‹จ Tailwind v4 ์ ์šฉํ–ˆ๋˜ ๊ฒƒTailwind v4์˜ ์ƒˆ๋กœ์šด CSS ์—”์ง„์ด ๊ถ๊ธˆํ•ด์„œ Currency ์•ฑ์— ์ ์šฉํ•œ ์ฝ”๋“œ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋‹ˆ ์„ค์ • ๋ฐฉ๋ฒ•์ด ๊ฝค ๋‹ฌ๋ผ์ ธ ์žˆ์—ˆ๋‹ค.// apps/currency/vite.config.tsimport tailwindcss from '@tailwindcss/vite'export default defineConfig({ plugins: [ tailwin..

Virtual DOM ๋ณต์žกํ•œ SPA(์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜) ์—์„œ๋Š” DOM ์กฐ์ž‘์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ ๋ณ€ํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋งŽ์ด ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•œ๋‹จ ์†Œ๋ฆฌ๊ณ , ์ „์ฒด์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ด ์ด๋ถ€๋ถ„์—์„œ Virtual DOM ์ด ๋น›์„ ๋ฐœํ•œ๋‹ค! ๋งŒ์•ฝ์— ๋ทฐ์— ๋ณ€ํ™”๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ ๋ณ€ํ™”๋Š” ์‹ค์ œ DOM ์— ์ ์šฉ๋˜๊ธฐ์ „์— ๊ฐ€์ƒ์˜ DOM ์— ๋จผ์ € ์ ์šฉ์‹œํ‚ค๊ณ  ๊ทธ ์ตœ์ข…์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ œ DOM ์œผ๋กœ ์ „๋‹ฌํ•ด์ค€๋‹ค. ์ด๋กœ์จ, ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—ฐ์‚ฐ์˜ ์–‘์„ ์ค„์ด๋ฉด์„œ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜๋Š” ๊ฒƒ ์ด๋‹ค. Virtual DOM ์ด ํ•ด๊ฒฐ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๊ฑด ๋ฌด์—‡์ด๋ƒ? DOM fragment๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณผ์ •์„ ์ˆ˜๋™์œผ๋กœ ์ž‘์—… ํ•  ํ•„์š” ์—†์ด, ์ž๋™ํ™”ํ•˜๊ณ  ์ถ”์ƒํ™”ํ•˜๋Š”๊ฒƒ์ด๋‹ค. ๊ทธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋งŒ์•ฝ์— ์ž‘์—…์„ ์ง์ ‘ ํ•œ๋‹ค๋ฉด, ๊ธฐ์กด ..

๋“ค์–ด๊ฐ€๊ธฐ ์ „ ๋ฆฌ์—‘ํŠธ๊ฐ€ ์ธ๊ธฐ์žˆ๋Š” ์ด์œ ๋Š” ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง ๋ฐฉ์‹์— ์žˆ๋‹ค. ReactDOM์€ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋žœ๋”๋งํ•  ๋•Œ, ์ด์ „ ์—˜๋ฆฌ๋จผํŠธ์™€ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. render() render()ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€ ์ปดํฌ๋„ŒํŠธ ์žฌ๊ท€์  ๋ Œ๋”๋ง, ๋ทฐ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜์„ ํ•œ๋‹ค. ๋žœ๋”๋ง ์‹œ์ž‘: ๋‚ด๋ถ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹œ์ž‘์œผ๋กœ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•ด๊ฐ„๋‹ค. ๋งˆํฌ์—… ์ƒ์„ฑ: ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์ž‘์—…์ด ๋๋‚˜๋ฉด, HTML ๋งˆํฌ์—…์„ ๋งŒ๋“ ๋‹ค. DOM ์ฃผ์ž…, ํ‘œ์‹œ: ํ•ด๋‹น ๋งˆํฌ์—…์„ ์‹ค์ œ ํŽ˜์ด์ง€์˜ DOM์š”์†Œ ์•ˆ์— ์ฃผ์ž…ํ•˜์—ฌ, ํ™”๋ฉด์— ํ‘œ์‹œํ•œ๋‹ค. ๋ฆฌ ๋ Œ๋”๋ง https://felixgerschau.com/react-rerender-components/ When does React re-render components? React ..

JSX: Javascript XML 1) Javascript์—์„œ HTML์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฆฌ์•กํŠธ๋งŒ์˜ ๋ฌธ๋ฒ•(syntax)์„ ๋งํ•œ๋‹ค. 2) html์•ˆ์— ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์œผ๋ ค๋ฉด { }๋กœ ๊ฐ์‹ผ๋‹ค. 3) html์˜ attribute๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์“ด๋‹ค. class๋Œ€์‹  className, onclick๋Œ€์‹  onClick ๋“ฑ JSX๋Š” react ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋กœ์จ์˜ ์ƒ์ง•์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค. ECMAScript๊ฐ€ Javascript์˜ ํ‘œ์ค€๊ณผ ๊ทœ๊ฒฉ๋“ฑ ๋ฌธ๋ฒ•์— ๊ด€ํ•ด ์‚ฌ์šฉํ•  ๋•Œ ์“ฐ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, JSX๋„ JS์˜ ํŒŒ์ผ์— React ๋ผ์ด๋ธŒ๋Ÿฌ์˜ ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค๋Š” ์˜๋ฏธ๋กœ์จ ์‚ฌ์šฉ๋˜๋Š” ํ™•์žฅ์ž๋‹ค. ๋‹ค๋งŒ, ๋‘˜์„ ๊ตฌ๋ถ„์ง€์œผ๋ฉด์„œ ์–ป๋Š” ์ด์ต์ด ๋”ฑํžˆ ์—†๊ณ , JSํŒŒ์ผ์— JSX๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, CRA์™€ ๊ฐ™์€ ํˆด์ฒด์ธ์— ์˜ํ•ด JS ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ..

1. useEffect ๋ž€? ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋žœ๋”๋ง ์ดํ›„์— ์‹คํ–‰์‹œํ‚ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค. useEffect์˜ effect๋Š” side-effect๋ผ๋Š” ๋œป์ด๋ฉฐ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋žœ๋”๋ง ๋œ ํ›„ (main-effect) ์— ํ•ด์•ผํ•  ์ž‘์—…๋“ค์„ ๋งํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ๋ฐ์„œ ๊ฐ€์ ธ์™€ ๋‚˜์ค‘์— ๋‚ด์šฉ์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค๊ฑฐ๋‚˜, ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š” ์ž‘์—…๋“ค์— ํ•ด๋‹นํ•œ๋‹ค. DOM ์—…๋ฐ์ดํŠธ, Browser Paint๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— UseEffect๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ useEffect๋Š” ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ componentDidMount, componentDidUpdate ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. 2. useEffect ์‚ฌ์šฉํ•˜๊ธฐ 1) callback : render()ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋ฉฐ, return ..

1. React hook ์ด๋ž€? ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ state๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๊ณ , ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์†Œ๋ฉธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ์ธ ๋ผ์ดํ”„์‚ฌ์ดํด API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ์ € ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹œํ‚ค๋Š” ์ผ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์ˆœํ•œ ์ปดํฌ๋„ŒํŠธ์—๋งŒ ์‚ฌ์šฉ๋๋‹ค. ํ•˜์ง€๋งŒ 16.8 ๋ฒ„์ „๋ถ€ํ„ฐ ํ›…(hook)์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋„์ž…๋˜๋ฉฐ, ์ด ๋‘˜์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค. ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์— "hook into”, ๋Œ์–ด์™€ ์—ฐ๊ฒฐ ํ•œ๋‹ค๊ณ  ํ•ด์„œ "hook"์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋˜ํ•œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ท€์ฐฎ๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” didMount, render, this ๋“ฑ ๋Œ€์‹ , ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ๋กœ ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค. Class Component import { Component } from 'react';..

1. SPA์™€ ๋ผ์šฐํ„ฐ์˜ ๊ด€๊ณ„ • SPA๋Š” ์„œ๋ฒ„์— ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋งŒ ์š”์ฒญํ•˜์—ฌ ์ „์ฒด ์›น์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋Š” CSR, AJAX ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ, ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ๋ฆฌ๋กœ๋“œ ์—†์ด ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. • MPA์™€ ๋‹ค๋ฅด๊ฒŒ, ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜์˜ ์•ฑ์˜ ๊ตฌ์„ฑ์š”์†Œ๋กœ ๋ณด๊ณ , ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€ ๊ฐ„์˜ ์Šคํƒ€์ผ, ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์„ ํ™œ์šฉํ•ด ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ์—, ์ฒซ ์š”์ฒญ ์‹œ ๋นˆ ํŽ˜์ด์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋ฉฐ, ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์˜จ๋‹ค. SPA์˜ ๊ธฐ์ˆ ์  ์žฅ์  • ์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€๋ฅผ(์„œ๋ฒ„ ๋žœ๋”๋ง) ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ CDN์— ์บ์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. • ๋งค๋ฒˆ ํŽ˜์ด์ง€ ์š”์ฒญ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์ค„์–ด๋“ ๋‹ค. • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋“ฑ์„ ์บ์‹ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ์ œ์•ฝ ์กฐ๊ฑด์ด ์ค„์–ด๋“ ๋‹ค. • ..

1. React is Javascript UI Library ์›น ์•ฑ์€ app์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด ๋†“์€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งํ•œ๋‹ค. ๋ชจ๋ฐ”์ผ์•ฑ์œผ๋กœ ๋ฐœํ–‰์ด ์šฉ์ดํ•˜๋ฉฐ, ๋›ฐ์–ด๋‚œ UX๋ฅผ ์ž๋ž‘ํ•œ๋‹ค. (๋ฒ„๋ฒ…๊ฑฐ๋ฆผ์ด ์—†๊ณ  ๋ฐ˜์‘์†๋„ ๋น ๋ฆ„) ์ด๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์  ๊ฐ•์ , ๊ตฌ๋งค์ „ํ™˜์œจ์ด ๋†’์•„์ง€๋Š” ํšจ๊ณผ๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚จ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•ด์ง„๋‹ค. 2. ๊ธฐ์ˆ ์ ์ธ ์„ธ ๊ฐ€์ง€ ์ด์œ โ€‹โ€‹ 1. ๐Ÿ‘: JS์–ธ์–ด์ธ๋ฐ ํ•จ์ˆ˜ ์•ˆ์— HTML์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.(JSX) 2. ๐Ÿ‘: ๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉ์ด ์ˆ˜์›”ํ•˜๋‹ค. 3. ๐Ÿ‘: bolierplate(code)๊ณผ์ •์ด ์ƒ๋žต๋œ๋‹ค. => ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค ์จ์ค˜์•ผ ํ•˜๋Š” ์žฅํ™ฉํ•œ ์ฝ”๋“œ์™€ ์…‹ํŒ…์ด ์ค„์–ด, ํ”„๋กœ์ ํŠธ ์‹œ์ž‘์ด ๋น ๋ฅด๋‹ค. 4. ๐Ÿ‘: ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด ..