[React] ๐Ÿš€ ๋ฆฌ์•กํŠธ ์•ฑ ์‹œ์ž‘ํ•˜๊ธฐ โ€“ ์ฒซ ๋ฒˆ์งธ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ

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


1. ๐Ÿงฐ ๋ฆฌ์•กํŠธ ์•ฑ ๋งŒ๋“œ๋Š” ๋ฒ•

๋ฆฌ์•กํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค์น˜ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ Vite ๋˜๋Š” Create React App์„ ์“ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์š”์ฆ˜์€ Vite๊ฐ€ ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์›Œ์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์–ด์š”.

# ์„ค์น˜ (Node.js๊ฐ€ ํ•„์š”ํ•ด์š”)
npm create vite@latest my-react-app --template react
cd my-react-app
npm install
npm run dev

๐Ÿ‘‰ http://localhost:5173 ์— ์ ‘์†ํ•˜๋ฉด ๋ฆฌ์•กํŠธ ์•ฑ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค!


2. ๐Ÿ“ ํด๋” ๊ตฌ์กฐ ๊ฐ„๋‹จํžˆ ๋ณด๊ธฐ

my-react-app/
โ”œโ”€ src/
โ”‚  โ”œโ”€ App.jsx      โ† ์šฐ๋ฆฌ๊ฐ€ ํŽธ์ง‘ํ•  ๋ฉ”์ธ ์ปดํฌ๋„ŒํŠธ
โ”‚  โ””โ”€ main.jsx     โ† ์•ฑ ์‹œ์ž‘ ์ง€์  (entry point)
โ”œโ”€ index.html
โ””โ”€ package.json

์šฐ๋ฆฌ๋Š” App.jsx ํŒŒ์ผ์—์„œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚  ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ๊ฑฐ์˜ˆ์š”.


3. ๐Ÿงฉ ์ฒซ ๋ฒˆ์งธ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ

์ปดํฌ๋„ŒํŠธ๋Š” ๊ทธ๋ƒฅ ํ•จ์ˆ˜ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

function Hello() {
  return <h1>์•ˆ๋…•ํ•˜์„ธ์š”, React!</h1>;
}

์ด์ œ ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ App.jsx ์•ˆ์—์„œ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

function App() {
  return (
    <div>
      <Hello />;
    </div>;
  );
}

<Hello />๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ HTML ํƒœ๊ทธ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๐Ÿ–ผ๏ธ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:

App ์ปดํฌ๋„ŒํŠธ๊ฐ€ Hello ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์—๋Š” “์•ˆ๋…•ํ•˜์„ธ์š”, React!”๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.


4. ๐Ÿ—ฃ๏ธ ๊ผญ ์•Œ์•„๋‘˜ ๋ฌธ๋ฒ• 2๊ฐ€์ง€

  • ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘!
    hello() โŒ โ†’ Hello() โœ…
  • return ์•ˆ์—๋Š” JSX ์‚ฌ์šฉ
    JSX๋Š” JavaScript ์•ˆ์— HTML์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐Ÿ” ์‹ค์Šต ํŒ: ๋‚˜๋งŒ์˜ ์ธ์‚ฌ๋ง ๋งŒ๋“ค๊ธฐ

function Greeting(props) {
  return <h2>์•ˆ๋…•ํ•˜์„ธ์š”, {props.name}๋‹˜</h>;
}

๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ์จ๋ณด์„ธ์š”:

<Greeting name="์ง€๋ฏผ" />;
<Greeting name="๋ฏผ์ˆ˜" />;

๐Ÿ’ก ๋ฆฌ์•กํŠธ๋Š” props(์†์„ฑ)์„ ํ†ตํ•ด ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์š”.


โœ… ์ •๋ฆฌ

  • ๋ฆฌ์•กํŠธ ์•ฑ์€ Vite๋กœ ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค
  • ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜๋‹ค! โ†’ <์ปดํฌ๋„ŒํŠธ์ด๋ฆ„ /> ์œผ๋กœ ์‚ฌ์šฉ
  • JSX ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ HTML์ฒ˜๋Ÿผ UI๋ฅผ ์ž‘์„ฑํ•œ๋‹ค
  • props๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์— ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค