[React] ๐Ÿ˜‡ React.js๋ž€?

Cottonmycottonยท2021๋…„ 11์›” 21์ผ
11

React

๋ชฉ๋ก ๋ณด๊ธฐ
1/14

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” React๊ฐ€ ๋ฌด์—‡์ธ์ง€, ํƒ„์ƒ ๋ฐฐ๊ฒฝ๊ณผ ํŠน์ง• ๊ทธ๋ฆฌ๊ณ  ์ •์˜๋ฅผ ๊ตฌ๋ถ„์ง€์–ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

โœ”๏ธ 1. React๋ž€?

๋ฆฌ์•กํŠธ(react.js)๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•˜๋‚˜๋กœ์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
ํŽ˜์ด์Šค๋ถ๊ณผ ๊ฐœ๋ณ„ ๊ฐœ๋ฐœ์ž ๋ฐ ๊ธฐ์—…๋“ค ๊ณต๋™์ฒด์— ์˜ํ•ด ์œ ์ง€๋ณด์ˆ˜๋œ๋‹ค. ๋Œ€๊ทœ๋ชจ ๋˜๋Š” ๋ณต์žกํ•œ ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—๋Š” ๋ณดํ†ต ๋ผ์šฐํŒ…, APIํ†ต์‹  ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ์š”๊ตฌ๋˜๋Š”๋ฐ ๋ฆฌ์•กํŠธ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

1) 3์„ธ๋Œ€ ์›น, ํ”„๋ ˆ์ž„์›Œํฌ? ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ?

์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์œผ๋กœ ์ธํ•ด ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์›น์—์„œ ๋ฌธ์ œ์˜ ๋ณต์žก์„ฑ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š” ๊ฑธ๊นŒ? ์‚ฌ์šฉ์ž๋“ค์ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์ ์  ๋งŽ์•„์ง€๊ณ  ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์œ ์ €์˜ interaction ๋˜ํ•œ ์ ์  ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ํ”„๋ก ํŠธ ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ธฐ์กด์˜ ๊ธฐ์ˆ ์— ํ•œ๊ณ„๋ฅผ ๋Š๋ผ๊ฒŒ ๋˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ ๊ธฐ์ˆ ๋“ค์ด Front-end Framework๋ผ๊ณ  ํ†ต์นญ๋˜๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ๋“ค์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์›น์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ๋“ค์€ ์–ด๋–ค ๋ณ€ํ™˜๋“ค์„ ๊ฑฐ์ณ ํ˜„์žฌ์˜ ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ๋‚˜์˜จ ๊ฒƒ์ผ๊นŒ?

๐Ÿ“Œ 1์„ธ๋Œ€ ๊ธฐ์ˆ 

  • HTML / CSS
  • JavaScript
  • DOM
  • Event

๐Ÿ“Œ 2์„ธ๋Œ€ ๊ธฐ์ˆ 

  • jQuery

๐Ÿ“Œ 3์„ธ๋Œ€ ๊ธฐ์ˆ 

  • Angular(Framework)
  • Vue(Framework)
  • React(Library)

โœ”๏ธ 2. React / Vue / Angular

1) Framework์™€ Library์˜ ์ฐจ์ด?

๐Ÿ“Œ ๊ณตํ†ต์ 

  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“ค์–ด๋‘” ์ฝ”๋“œ์ด๋‹ค

๐Ÿ“Œ ์ฐจ์ด์ 

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

2) React / Vue / Angular

๐Ÿ“Œ Angular

  • 2010๋…„ ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
  • TypeScript ๊ธฐ๋ฐ˜์œผ๋กœ ๋งค์šฐ ์•ˆ์ •์ ์ด๊ณ  ์ž˜ ์„ค๊ณ„๋œ ๊ตฌ์กฐ ์•ˆ์—์„œ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅ
  • ํ”„๋ ˆ์ž„์›Œํฌ ๋‹ต๊ฒŒ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ธฐ ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค
  • ๋ฌด๊ฒ๊ณ  ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค

๐Ÿ“Œ Vue

  • 2014๋…„ Even You๋ผ๋Š” ๊ฐœ์ธ์ด ๊ฐœ๋ฐœํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
  • Angular์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Vue๋งŒ์˜ ๋ฌธ๋ฒ•๊ณผ ๊ทœ์น™์ด ์žˆ๋‹ค
  • ํ”„๋ ˆ์ž„์›Œํฌ ๋‹ต๊ฒŒ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค
  • ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค

๐Ÿ“Œ React

  • 2013๋…„ ํŽ˜์ด์Šค๋ถ์—์„œ ๊ฐœ๋ฐœํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • '์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š”' ๋ชฉํ‘œ๋กœ ๊ฐœ๋ฐœ
  • Angular, Vue ๋“ฑ์˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€๋Š” ๋‹ฌ๋ฆฌ ๋ฆฌ์•กํŠธ๋Š” ์˜ค์ง View๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ๊ทธ๋งŒํผ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ด third-party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ex. React-Router, Redux)๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค

3) ์™œ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

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

โœ”๏ธ 3. React์˜ ํŠน์ง•

  • ์„ ์–ธ์ 
  • Virtual-dom
  • Node & NPM
  • CRA
  • Component
  • JSX

1) ์„ ์–ธ์ ์ธ ๊ฐœ๋ฐœ์ด๋ž€?

๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„๋ฉด ์„ ์–ธ์  ๋ฐฉ์‹, ์ ˆ์ฐจ์  ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์ฒญ์†Œ๋ฅผ ์˜ˆ์‹œ๋กœ ๊ฐ๊ฐ์˜ ํŠน์ง•์„ ์‚ดํŽด๋ณด์ž

๐Ÿ“Œ ์ ˆ์ฐจ์ (HOW?)

  • ์ฒญ์†Œ๊ธฐ๋ฅผ ๋Œ๋ฆฐ๋‹ค
  • ๋นจ๋ž˜๋ฅผ ํ•œ๋‹ค
  • ๊ฑธ๋ ˆ์งˆ์„ ํ•œ๋‹ค
  • ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋ฒ„๋ฆฐ๋‹ค
    => ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ? ๋ผ๋Š” ์ธก๋ฉด์— ์ค‘์ ์„ ๋‘๊ณ  ํ•˜๋‚˜ํ•˜๋‚˜ ์ ˆ์ฐจ๋ฅผ ๋ฐŸ์œผ๋ฉด์„œ ์ง„ํ–‰ํ•œ๋‹ค

๐Ÿ“Œ ์„ ์–ธ์ (WHAT?)

  • ๊นจ๋—ํ•ด์ง„ ๋ฐฉ์˜ ๋ชจ์Šต์„ ์ƒ์ƒํ•ด์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฐ๋‹ค
  • ๋กœ๋ด‡์—๊ฒŒ ๊ทธ๋ฆผ์„ ์ „๋‹ฌํ•œ๋‹ค. ๋งŒ๋“ค์–ด์ค˜~ (์—ฌ๊ธฐ์„œ ๋กœ๋ด‡์€ ๋ฆฌ์•กํŠธ)
    => ๋ฌด์—‡์ด ๋˜๋ฉด ๋˜๋Š”์ง€? ์›ํ•˜๋Š” ์ตœ์ข…์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค

๐Ÿ“Œ ๋””๋ฒ„๊น… ํ•˜๋Š” ๊ณผ์ •

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

2) Virtual-dom

virtual-DOM์€ ๊ฐ€์ƒ์˜ DOM(Document Object Model)์„ ๋งํ•œ๋‹ค. DOM์€ HTML ๋ฌธ์„œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” API ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค. react์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ DOM ๋˜ํ•œ ์‹ค์ œ DOM์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„๋‹ค.

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

virtual-DOM์€ ๋ฆฌ์•กํŠธ๊ฐ€ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ •์„ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ด๋‹ค.

3) Node & NPM

๐Ÿ“Œ Node๋ž€?

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

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

์šฐ๋ฆฌ๋Š” ์™œ ๋…ธ๋“œ๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ณ  ํ•„์š”๋กœ ํ• ๊นŒ?

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

๐Ÿ“Œ NPM์ด๋ž€?

NPM์€ Node Package Manager์˜ ์•ฝ์–ด์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ํŒจํ‚ค์ง€๋ž€ ๋ฌด์Šจ ์˜๋ฏธ์ผ๊นŒ?

ํŒจํ‚ค์ง€๋Š” ๋…ธ๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šฐ๋Š” ๋ฆฌ์•กํŠธ, ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ Babel, WebPack ํŒจํ‚ค์ง€์ด๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋“ค์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ , ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋งค๋‹ˆ์ €์˜ ์—ญํ• ์„ ํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ NPM์ด๋‹ค.

4) CRA

Create React App์˜ ์•ฝ์–ด์ด๋‹ค. CRA๋Š” ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ธํŒ… ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.(toolchain) ๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์™œ CRA๋ฅผ ํ•„์š”๋กœ ํ• ๊นŒ?

  • ๋ฆฌ์•กํŠธ๋Š” UI ๊ธฐ๋Šฅ๋งŒ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ์˜จ์ „ํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” UI ๊ตฌ์„ฑ ์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ์•กํŠธ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•„์š”ํ•œ ๋„๊ตฌ๋“ค์„ toolchain์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค
  • CRA๋Š” ๋ฆฌ์•กํŠธ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
  • CRA๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋กœ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
nax create-react-app

5) Component

Component๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ UI ๊ตฌ์„ฑ ๋‹จ์œ„์ด๋‹ค. Component๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋• ์—ฌ๋Ÿฌ ์žฅ์ ์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์•„๋ž˜๋ฅผ ์‚ดํŽด๋ณด์ž

  • ์ฝ”๋“œ ์žฌํ™œ์šฉ์„ฑ ์ฆ๊ฐ€ -> ์šฐ๋ฆฌ๊ฐ€ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด ๊ณ„์†ํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค
  • ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค. ๋งŒ์•ฝ ๋ฐฑ๊ฐœ์˜ ํ˜•ํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—, ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์›๋ณธ์ด ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ๊ตฌ์„ฑ๋งŒ ๋ฐ”๊พธ๋ฉด ๋ชจ๋‘๊ฐ€ ๋ฐ”๋€๋‹ค.
  • ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ผ ๊ฐœ๋…์ด ์•„๋””๋‚˜. ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•œ๋‹ค(๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ - ์ž์‹ ์ปดํฌ๋„ŒํŠธ)

6) JSX

JavaScript Syntax Extension์˜ ์•ฝ์–ด์ด๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ ๋ฌธ๋ฒ•์ด๋‹ค. ํ˜•ํƒœ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ html์„ ํ•ฉ์ณ๋†“์€ ๋“ฏํ•œ ๋ฌธ๋ฒ•์ด๋‹ค. ๋˜ํ•œ ๋งˆํฌ์—…์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ•์ด๋ฉฐ JSX๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์‹ค์ œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ๋ฒ•์ด๊ธฐ์— Babel์ด๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ€ํ™˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์•„๋ž˜ ํŠน์ง•๊ณผ ์žฅ์ ์„ ํ•จ๊ป˜ ์‚ดํŽด๋ณด์ž.

ํŠน์ง•

  • ๋ชจ๋“  ํƒœ๊ทธ๋“ค์€ ํ•˜๋‚˜์˜ ๋ถ€๋ชจํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋“  ํƒœ๊ทธ๊ฐ€ ์…€ํ”„ ํด๋กœ์ง•์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ชจ๋“  property๋“ค์€ camelCase๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์žฅ์ 

  • HTML ํƒœ๊ทธ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ๊ฐ์ด ์ต์ˆ™ํ•˜๋‹ค.
  • HTML ๋งˆํฌ์—…๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์„ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด์„œ HTML์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ„๋„์˜ HTML ํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
profile
ํˆฌ๋ช…์ธ๊ฐ„

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

comment-user-thumbnail
2023๋…„ 5์›” 25์ผ

ํ•œ๋ฒˆ์— ์ดํ•ด๊ฐ€๋„ค์š”

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2023๋…„ 12์›” 13์ผ

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

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ