โœ๐Ÿป [Code Camp_TIL] 1์ผ์ฐจ: React ์ž…๋ฌธ, Node.js, JSX

code_Jยท2023๋…„ 3์›” 17์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
1/41
post-thumbnail

React

React๋Š” Javascript ๊ธฐ๋ฐ˜์˜ ๋„๊ตฌ๋กœ, JS๋ฅผ ๋” ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

node.js

Java, Python๊ณผ ๊ฐ™์€ ์–ธ์–ด๋“ค์€ JS์™€ ๋‹ค๋ฅด๊ฒŒ ๊ฐ๊ฐ ๋ธŒ๋ผ์šฐ์ € ์—†์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๋‹ค. JS๋„ ๊ทธ๋Ÿฌํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด Node.js์ด๋‹ค. JS๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Node.js๊ฐ€ ์žˆ์–ด์•ผ ๋ธŒ๋ผ์šฐ์ € ์™ธ์— ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์™€ ํŒŒ์ด์ฌ์—๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ํŠน์ • ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๊ณต์œ ํ•˜๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ž๋ฐ”๋Š” Maven, Gradle ๋“ฑ์ด ์žˆ๊ณ , ํŒŒ์ด์ฌ์€ PYPI๋ผ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค. ์ด์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋„ NPM์ด๋ผ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ๋‹ค(npmjs.com). ๊ทธ๋ฆฌ๊ณ  npm๋ณด๋‹ค ๋” ๋น ๋ฅธ ์†๋„๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํŽ˜์ด์Šค๋ถ์—์„œ yarn์„ ๋งŒ๋“ค์—ˆ๋‹ค.

์„ค์น˜๋ฅผ ์œ„ํ•œ CLI ๋ช…๋ น์–ด

์šฐ๋ฆฌ๊ฐ€ ํด๋”๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜๋ฉด, ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งˆ์šฐ์Šค๋ฅผ ์ด์šฉํ•ด์„œ โ€˜์ƒˆ ํด๋” ๋งŒ๋“ค๊ธฐโ€™๋ฅผ ํด๋ฆญํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ GUI(graphic user interface) ๋ผ๊ณ  ํ•œ๋‹ค.

๋ฐ˜๋ฉด ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ ํด๋”๋ฅผ ๋งŒ๋“ค ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Ÿด ๋•Œ ์“ฐ์ด๋Š” ๊ฒƒ์ด CLI ๋ช…๋ น์–ด(command line interface)์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜์˜ CLI ๋ช…๋ น์–ด๋Š” ์•ž์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ์ž์ฃผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๋‹ˆ๊นŒ ์•Œ์•„๋†“์œผ๋ฉด ์†์‰ฝ๊ฒŒ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

React ํด๋”๊ตฌ์กฐ!

์„ค์น˜๋ฅผ ๋งˆ์น˜๊ณ  ๋ณด์ด๋Š” VS Code ์ƒ์˜ ํด๋”๋“ค์„ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ํด๋”๋“ค์ด ์–ด๋–ค ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋Š”์ง€ ์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

React์—์„œ JS์™€ HTML, CSS ์—ฐ๊ฒฐ

์šฐ๋ฆฌ๊ฐ€ HTML, CSS, JS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•˜๋‚˜์˜ ์†Œ์Šค์ฝ”๋“œ์— ์„ธ ๊ฐ€์ง€์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋„ฃ์œผ๋ฉด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค๋ฌด์—์„œ๋Š” 3๊ฐ€์ง€ ๊ฐ๊ฐ์˜ ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋งŒ๋“ค๊ณ , ํ•„์š”ํ•  ๋•Œ ์„œ๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค. React๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๋‹ค!
๋จผ์ € ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด export๋ฅผ ์จ์„œ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  return ๋’ค์— html ๋ ˆ์ด์•„์›ƒ์„ ์ž‘์„ฑํ•œ๋‹ค.!

๊ทธ๋ฆฌ๊ณ  import ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CSS ํŒŒ์ผ์„ JS๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ์„ ํƒ์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋งŒ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ํšจ์œจ์ ์ด๋‹ค!

๊ทธ๋ ‡๋‹ค๋ฉด HTML ํŒŒ์ผ๋„ ์•„๋‹Œ๋ฐ ์–ด๋–ป๊ฒŒ JS ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์— ๋„์šธ ์ˆ˜ ์žˆ์„๊นŒ? ์ด๋•Œ yarn์„ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค. yarn ๋ช…๋ น์–ด ์ค‘ yarn dev๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JSํŒŒ์ผ์„ html๋กœ ๋ฐ”๊ฟ”์ค„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์—ฌ ๋”ฐ๋กœ HTMl ํŒŒ์ผ ์—†์ด JS ํŒŒ์ผ๋งŒ์œผ๋กœ๋„ ๋ธŒ๋ผ์šฐ์ €์— ํŽ˜์ด์ง€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.

JSX

React์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์กด์— ์‚ฌ์šฉํ–ˆ๋˜ HTML ๋Œ€์‹  react ์ „์šฉ html์ธ JSX๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


์›๋ž˜ ์‚ฌ์šฉํ–ˆ๋˜ HTML

<div>
  <div class="title">์ œ๋ชฉ</div>
  <button onclick="alert()">๋ฒ„ํŠผ</button>
</div>;


JSX

<div>
  <div className="title">์ œ๋ชฉ</div>
  <button onClick="alert()">๋ฒ„ํŠผ</button>
</div>;

์ตœ์ข…์ ์œผ๋กœ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ์—๋Š” JSX๊ฐ€ HTML๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋œ๋‹ค.

CSS-IN-JS

CSS๋ฅผ JS ๋ณ€์ˆ˜์— ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋”ฐ๋กœ CSSํŒŒ์ผ์„ ๋”ฐ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ„๊ฒฐํ•œ ๋ฐฉ์‹์ด๋‹ค. ๋ณ€์ˆ˜๋ช… ์ž์ฒด๊ฐ€ HTML ํƒœ๊ทธ์ฒ˜๋Ÿผ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ํƒœ๊ทธ์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ณ , className์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์ธ ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ์งง์•„์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค!


CSS ํŒŒ์ผ์— ์Šคํƒ€์ผ ์†์„ฑ์„ ๋”ฐ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹

title {
  width: 996px;
  height: 52px;
}



CSS-In-JS

const Title = styled.div`
  width: 996px;
  height: 52px;
`;


CSS-IN-JS๋Š” HTML ํƒœ๊ทธ์ฒ˜๋Ÿผ ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค.

<Title>Hello World</Title>





profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

0๊ฐœ์˜ ๋Œ“๊ธ€