GiantStepDEV
article thumbnail

๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์šธ ๋•Œ๋Š”, ๊ทธ๊ฒƒ์ด ์–ด๋””์„œ ์™”๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

- GiangStepDEV


 

Why React?

์•ˆ์ •ํ™” ๋œ์ง€ ์–ผ๋งˆ ์•ˆ ๋œ ๋ฆฌ์•กํŠธ, ์™œ ์ด๋ ‡๊ฒŒ ํ•ซํ• ๊นŒ์š”?

๋ชจ๋“  ๊ธฐ์ˆ  ํŠธ๋ Œ๋“œ๋Š” ๊ทธ๊ฒƒ์ด ๋‚˜์˜ค๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

๋ณต์žกํ•˜๊ณ  ๊ฑฐ๋Œ€ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ์—๋Š” ๋ณต์žก๋„๊ฐ€ ๋งค์šฐ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋“ฑ์žฅํ•˜์˜€์œผ๋ฉฐ, ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์€ ์ฃผ๋กœ MVC์™€ MVVM ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

https://learn.microsoft.com/ko-kr/aspnet/core/mvc/overview?view=aspnetcore-7.0

JSON ๊ฐ์ฒด ๊ฐ’์„ ์‚ฌ์šฉํ•ด ๋ทฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒฝ์šฐ, ์š”์†Œ๋ฅผ ์ฐพ์•„ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š”๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ์ƒ๋‹นํžˆ ๋ณต์žกํ•ด์ง€๊ณ  ์„ฑ๋Šฅ๋„ ๋–จ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด ๋•Œ ํŽ˜์ด์Šค๋ถ ๊ฐœ๋ฐœํŒ€์€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ์•„์ด๋””์–ด๋ฅผ ๊ณ ์•ˆํ•ด ๋ƒˆ๋Š”๋ฐ์š”!

 

"์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ์ค„์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

๊ธฐ์กด ๋ทฐ๋ฅผ ๋‚ ๋ฆฌ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กญ๊ฒŒ ๋ Œ๋”๋ง์„ ํ•˜๋ฉด ์–ด๋–จ๊นŒ?"

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•ด์ง€๊ณ , ์ฝ”๋“œ ์–‘๋„ ํ™•์—ฐํžˆ ์ค„์–ด๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋” ์ด์ƒ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”๋ฅผ ์ค„์ง€ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๊ณ , ๊ทธ์ € ๋ทฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€ ์„ ์–ธํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์— ๋ณ€ํ™”๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ์กด์— ์žˆ๋˜ ๊ฒƒ์€ ๋ฒ„๋ฆฌ๊ณ  ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋‹ค๋ผ ์ƒˆ๋กœ ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค.

์žฅ/๋‹จ์ 

  • ๋ฆฌ์•กํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    ๋”ฐ๋ผ์„œ, ์˜ค์ง View๋งŒ ์‹ ๊ฒฝ ์“ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ํŠน์ • ๋ถ€๋ถ„์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€ ์ •ํ•˜๋Š” ์„ ์–ธ์ฒด๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ API๋กœ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ๋‚ด์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์—์„œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๊น€์ƒˆ์™€ ์ž‘๋™ ๋ฐฉ์‹์„ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ 

  1. ๊ฐ€์ƒ DOM(Virtual DOM) ๊ธฐ๋ฐ˜์œผ๋กœ UI๋ฅผ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  3. ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ•์กฐํ•˜์—ฌ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  4. JSX(JavaScript XML) ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ HTML์„ ์‰ฝ๊ฒŒ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์‰ฝ๊ฒŒ ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

  1. ์ดˆ๊ธฐ ํ•™์Šต์ด ์–ด๋ ค์›€
  2. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ๊ฐœ๋ฐœ์‹œ, ๊ตฌ์กฐ ์„ค๊ณ„์— ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š” ๋จ
  3. ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ, ์ƒํƒœ ๊ด€๋ฆฌ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ
  4. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ(๋ผ์šฐํŒ…, ์ƒํƒœ ๊ด€๋ฆฌ ๋“ฑ)์„ ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ

์ดˆ๊ธฐ ๋ Œ๋”๋ง

์–ด๋–ค UI ๊ด€๋ จ ํ”„๋ ˆ์ž„์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋“ ์ง€ ๋งจ ์ฒ˜์Œ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ ์ •ํ•˜๋Š” ์ดˆ๊ธฐ ๋ Œ๋”๋ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ด๋ฅผ ์œ„ํ•ด render() ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

Virtual DOM

๋ฆฌ์•กํŠธ์˜ ์ฃผ์š” ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” Virtual DOM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

Virtual DOM์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ DOM์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ์ด๋ฅผ ์ถ”์ƒํ™”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์‹ค์ œ DOM์„ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ๋Š” ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ ˆ์ฐจ๋ฅผ ๋ฐŸ์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ „์ฒด UI๋ฅผ Virtual DOM์— ๋ฆฌ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด์ „ Virtual DOM์— ์žˆ๋˜ ๋‚ด์šฉ๊ณผ ํ˜„์žฌ ๋‚ด์šฉ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ํ™˜๊ฒฝ ์„ค์ •

Node.js

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” Node.js๋ฅผ ๋ฐ˜๋“œ์‹œ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ brew install node

$ node -v

yarn

yarn์€ npm์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ npm ๋ณด๋‹ค ๋” ๋น ๋ฅด๋ฉฐ ํšจ์œจ์ ์ธ ์บ์‹œ ์‹œ์Šคํ…œ๊ณผ ๊ธฐํƒ€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

$ sudo npm install -global yarn

$ yarn -version

VSCode ํ”Œ๋Ÿฌ๊ทธ์ธ

  • ESLint
  • Reactjs Code Snippets
  • Prettier-Code formatter

create-react-app์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

$ yarn create react-app ํ”„๋กœ์ ํŠธ๋ช…

ํ”„๋กœ์ ํŠธ ์‹คํ–‰

$ cd ํ”„๋กœ์ ํŠธ๋ช…

$ yarn start

 

profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!