๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

react

React / Node.js, npm, npx ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• (Mac)

 

React

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ๊ฐ€์ƒ DOM์„ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅ
  • ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI๋ฅผ ๊ฐ€์ง
  • ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ
  • JSX ๋ฌธ๋ฒ•์œผ๋กœ ์ง๊ด€์ ์ธ UI ์ž‘์„ฑ
  • SPA(Single Page Application) ๊ฐœ๋ฐœ ์ง€์›

 

 

React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

1. ์ฝ”๋“œ ์ผ๊ด€์„ฑ์ด ๋†’์Œ

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

 

2. SPA ํ”„๋ ˆ์ž„์›Œํฌ

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

 

3. ๊ฐ€์ƒ DOM ์‚ฌ์šฉ

vanila Javascript๋Š” ์‹ค์ œ DOM์„ ์กฐ์ž‘ํ•ด ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ธธ ์‹œ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ฌด๊ฑฐ์›Œ์ง„๋‹ค. ๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๊ฐ€์ƒ์˜ DOM(์‹ค์ œ DOM์˜ ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ณต์ œ๋ณธ)์— ๋จผ์ € ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ณ , ์‹ค์ œ DOM์—๋Š” ํ•„์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


 

Node.js

๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๊บผ๋‚ด์„œ ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” Javascript Runtime Environmenet์ด๋‹ค. 

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

 

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

 

 

nvm์œผ๋กœ ๋‹ค์šด๋กœ๋“œ

 

 

์ฐธ๊ณ ๋กœ ์ € ์ด๋ฏธ์ง€๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋ฉด ์•ˆ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค (์ผ๋‹จ ๋‚ด๊ฐ€ ๊ทธ๋žฌ๋‹ค...)

์™œ๋ƒ๋ฉด nvm์ด ์„ค์น˜๊ฐ€ ์•ˆ๋˜์žˆ์„ ํ™•๋ฅ ๋„ ๋†’๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ € ์ฒซ๋ฒˆ์งธ ๋ช…๋ น์–ด๋กœ๋Š” ์•ˆ๋˜๋”๋ผ

 

๊ทธ์ „์— ์•ž์„œ ์ผ๋‹จ ๋จผ์ € homebrew๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค. homebrew ์„ค์น˜๋Š” ์—ฌ๊ธฐ์„œ ๋‹ค๋ค˜์—ˆ๋‹ค

 

 

homebrew ๋ฒ„์ „ ํ™•์ธ (ํ˜น์‹œ๋ชจ๋ฅด๋‹ˆ๊นŒ..)

brew -v
#Homebrew 4.4.27

 

 

homebrew๋กœ nvm ์„ค์น˜

- nvm ์„ค์น˜

#homebrew๋กœ nvm ์„ค์น˜
brew install nvm

 

- nvm ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

#nvm ํด๋” ์ƒ์„ฑ
mkdir ~/.nvm

#zsh ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ ์—ด๊ธฐ (์‚ฌ์šฉํ•˜๋Š” ์‰˜์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค๊ณ ํ•จ. .bashrc, .bash_profile, .zshenv ๋“ฑ...)
vi ~/.zshrc

# .zshrc ๋‚ด์šฉ
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

 

.zshrc ๋‚ด์šฉ์˜ ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ ์—ด๊ธฐ๋ฅผ ํ–ˆ์„ ๊ฒฝ์šฐ vi ํ˜•์‹์˜ ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ฆฌ๋Š”๋ฐ, ์•„๋ž˜ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๊ณ   :wq  ๋ฅผ ์ž…๋ ฅ ํ›„ ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ €์žฅ์ด ๋œ ์ƒํƒœ๋กœ vi ์—๋””ํ„ฐ์—์„œ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

- ์ €์žฅํ•œ ์ฝ”๋“œ๋ฅผ ์ ์šฉ

source ~/.zshrc

 

- nvm์ด ์ง„์งœ ์„ค์น˜๋๋Š”์ง€ ํ™•์ธ

nvm -v
#0.40.2

 

 

node ์„ค์น˜ํ•˜๊ธฐ

๋‚˜๋Š” ๊ฐ•์˜์—์„œ ๋‚˜์˜จ๋Œ€๋กœ v.20.19.0์œผ๋กœ ์„ค์น˜ํ–ˆ๋‹ค.

# Node.js ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜:
nvm install 20

 

node๋„ ์ง„์งœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

node -v 
#v20.19.0
nvm current 
#v20.19.0
npm -v 
#10.8.2

 

node์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „ ํ™•์ธํ•ด๋ณด๊ธฐ

#๋ชจ๋“  ๋ฒ„์ „ ํ™•์ธ
nvm ls-remote

 

๋‚ด ๋ฒ„์ „์€ ์šฐ์ธก์˜ v20.19.0

 

LTS๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ € ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ธฐ๋ฅผ ์ถ”์ฒœํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ด ๋•Œ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค! ํ•˜๋ฉด ์œ„์—์„œ ์„ค์น˜ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ  nvm install ๋ฒ„์ „๋ช…  ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

#๋‹ค๋ฅธ ๋ฒ„์ „ ์„ค์น˜ํ•ด๋ณด๊ธฐ
nvm install v22.14.0

#๋‚ด๊ฐ€ ์„ค์น˜ํ•œ ๋ฒ„์ „๋“ค ํ™•์ธํ•ด๋ณด๊ธฐ
nvm ls

#๋ฒ„์ „ ๋ฐ”๊พธ๊ธฐ (์ด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ์„ ์–ธ)
nvm use 20.19.0

 

 

 

๋…ธ๋“œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

 

ํ„ฐ๋ฏธ๋„์— node๋ฅผ ์ž…๋ ฅํ•œ ํ›„, ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด๋ณด๋ฉด ๋ธŒ๋ผ์šฐ์ €์˜ ์ฝ˜์†”์ฐฝ์ฒ˜๋Ÿผ ์ž˜ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค!

 

 

๋˜ ์ด์ œ visual studio code์—์„œ๋„ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 


 

npm

Node Package Manager์˜ ์•ฝ์–ด๋กœ, Javascript๋กœ ๋งŒ๋“ค์–ด์ง„ ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜, ๋ฐฐํฌ, ๊ด€๋ฆฌํ•ด์ฃผ๋ฉฐ, node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋™์‹œ์— ์„ค์น˜๋œ๋‹ค.

npm์€ package.json ํŒŒ์ผ์„ ํ†ตํ•ด ํŒจํ‚ค์ง€ ์˜์กด์„ฑ๊ณผ ํ”„๋กœ์ ํŠธ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. 

 

 

package.json ํŒŒ์ผ ์ƒ์„ฑ

 

ํ”„๋กœ์ ํŠธ์˜ root ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด์ค‘ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด package.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚˜๋Š” ๊ธฐ๋ณธ์„ค์ •๊ฐ’์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด npm init -y๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค.

npm init

#๊ธฐ๋ณธ ์„ค์ •๊ฐ’
npm init -y
#or
npm init --yes

 

 

 

๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๊ฐ™์€ package.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์–ด์žˆ๋Š”๋ฐ, ํŒŒ์ผ ๋‚ด์˜ ๊ฐ๊ฐ์˜ ํ‚ค๊ฐ€ ๋ญ˜ ์˜๋ฏธํ•˜๋ƒ๋ฉด

 

  • name
    ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„
    ๋ฐฐํฌํ•  ๋•Œ ๊ฒน์น˜๋Š” ์ด๋ฆ„์ด๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์ง€์–ด์ฃผ๋Š”๊ฒŒ ์ข‹์œผ๋ฉฐ,
    url๋กœ๋„ ์‚ฌ์šฉ๋˜๊ณ  ์„ค์น˜ ์‹œ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— url๊ณผ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ชจ๋‘ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์ด์–ด์•ผ ํ•œ๋‹ค.
    node๋‚˜ js๊ฐ€ ์ด๋ฆ„์— ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋˜๋ฉฐ, ๋Œ€๋ฌธ์ž๋ฅผ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ๋˜๊ณ , _์ด๋‚˜ .๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค.
  • version
    ํ”„๋กœ์ ํŠธ์˜ ํ˜„์žฌ ๋ฒ„์ „
    ๋ฒ„์ „์€ ํ•ญ์ƒ ์„ธ ์ž๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, SemVer ๋ฐฉ์‹์˜ ๋ฒ„์ „ ๋„˜๋ฒ„๋ง์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    ๊ธฐ๋ณธ๊ฐ’์€ 1.0.0์ด์ง€๋งŒ ํŒจ์น˜ / ๋งˆ์ด๋„ˆ / ๋ฉ”์ด์ € ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๋ฒ„์ „์„ ๋ฐ”๊ฟ”์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • main
    ํ”„๋กœ์ ํŠธ์˜ ๋ฉ”์ธ์ด ๋˜๋Š” ๋ชจ๋“ˆ ID
    ์œ„ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ npm.js ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

  • scripts
    ๋ช…๋ น์–ด๋ฅผ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด๋‘๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์ถ• ๋ช…๋ น์–ด์˜ ์ง‘ํ•ฉ
    npm run "์Šคํฌ๋ฆฝํŠธ"๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
    ex) npm run test

  • keywords
    ํ”„๋กœ์ ํŠธ ๊ฒ€์ƒ‰ ์‹œ ์ฐธ์กฐ๋˜๋Š” ํ‚ค์›Œ๋“œ (npm search๋กœ ๊ฒ€์ƒ‰์‹œ ๋ฆฌ์ŠคํŠธ์— ํ‘œ์‹œ๋จ)

  • author
    ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ์ž ์ •๋ณด๋กœ ํ•œ ์‚ฌ๋žŒ๋งŒ ์ง€์ •ํ•œ๋‹ค.
"author": {
    "name": "Your Name",
    "email": "you@example.com",
    "url": "http://your-website.com"
  },
  // ๋˜๋Š”
  "author": "Your Name <you@example.com> (http://your-website.com)"

 

  • license
    ๋ฐฐํฌํ•œ ํŒจํ‚ค์ง€์˜ ์ €์ž‘๊ถŒ์— ๋Œ€ํ•œ ์ •์˜
    ๊ฐ’์œผ๋กœ๋Š” ISC / MIT ๊ฐ€ ๋งŽ์ด ์“ฐ์ธ๋‹ค.
    ISC : ๋ฌด๋ฃŒ ์‚ฌ์šฉ / ๋ฌด๋ฃŒ ๋ณต์‚ฌ / ์ถœ์ฒ˜ ์—†์–ด๋„ ๊ฐ€๋Šฅ
    MIT : ๋ฌด๋ฃŒ ์‚ฌ์šฉ / ๋ฌด๋ฃŒ ๋ณต์‚ฌ / ์ถœ์ฒ˜ ๋‚จ๊ฒจ์•ผ๋จ

  • description
    ํ”„๋กœ์ ํŠธ ์„ค๋ช…
    keywords์ฒ˜๋Ÿผ npm search๋กœ ๊ฒ€์ƒ‰ ์‹œ ๋ฆฌ์ŠคํŠธ์— ํ‘œ์‹œ๋จ

 


 

 

npm ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ

 

npm์—๋Š” ์ˆ˜๋งŽ์€ ํŒจํ‚ค์ง€๋“ค์ด ์žˆ๊ณ  ์‹ค์ œ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณคํ•œ๋‹ค.

์ตœ๊ทผ ์ธ๊ธฐ์žˆ๋Š” npm์ค‘ ๋ญ๊ฐ€ ๋” ์‚ฌ์šฉ๋˜๋Š”์ง€ ๊ทธ ์ถ”์„ธ๋ฅผ ์•Œ์•„๋ณด๊ณ ์‹ถ๋‹ค๋ฉด npm trends๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ธ๊ธฐ์žˆ๋Š” npm๋“ค์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

https://npmtrends.com/angular-vs-react-vs-vue

 

 

์ผ๋‹จ npm์— ์žˆ๋Š” ํŒจํ‚ค์ง€๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ์— ์•ž์„œ javascript ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ CommonJS (node.js์˜ ํ‘œ์ค€)ํฌ๋งท๊ณผ ES6์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ๋น„๊ตํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

  CommonJs (node.js) ES6 (๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ)
๋‚ด๋ณด๋‚ด๊ธฐ module.exports export default
๊ฐ€์ ธ์˜ค๊ธฐ require import

 

 

1. CommonJS 

 

๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณฑํ•˜๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ชจ๋“ˆ multiply.js์™€ ๊ตฌ๊ตฌ๋‹จ 2๋‹จ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•  two.js๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

 

multiply.js

const multiply  = (x,y) => console.log(`${x} x ${y} = ${x*y}`);

module.exports = multiply;

 

two.js

const multiply = require('./multiply.js');

multiply(2,3);
multiply(2,4);
multiply(2,5);
multiply(2,6);

/*
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
*/

 

 

2. ES6

 

multiple.js

const multiply  = (x,y) => console.log(`${x} x ${y} = ${x*y}`);

export default multiply;

 

two.js

์ด ๋•Œ ๋งจ์œ„ import๋ฌธ์„ ์ž‘์„ฑํ• ๋•Œ from ๋ถ€๋ถ„์€ from "./multiply" ์œผ๋กœ ์ž๋™์™„์„ฑ์ด ๋  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ๊ทธ๋ƒฅ ๋‘๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋‹ˆ .js๋ฅผ ๋’ค์— ๋ถ™์—ฌ ํ™•์‹คํžˆ ๊ฒฝ๋กœ๋ฅผ ์ •ํ•ด์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค..

import multiply from "./multiply.js";

multiply(2,3);
multiply(2,4);
multiply(2,5);
multiply(2,6);

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ค๋ฅ˜๋Š” ์—†๋‹ค๋งŒ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋Š”๋ฐ,

ES6์œผ๋กœ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ๋Š” package.json์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด  "type" : "module"  ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š”๊ฒŒ ์ข‹๋‹ค. 

 

package.json

{
  "name": "250402",
  "version": "1.0.0",
  "main": "npm.js",
  "type": "module",
  // ์ƒ๋žต...
  }

 

 


 

์ง„์งœ npm ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ

 

๋‚ ์งœ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” Day.js๋ฅผ ๋จผ์ € ์„ค์น˜ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. 

 

npm i dayjs
#i๋Š” install์˜ ์•ฝ์–ด

 

์„ค์น˜ํ•˜๋ฉด ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ๋ชจ๋“ˆ์ด ํ”„๋กœ์ ํŠธ ํด๋”์— ์ถ”๊ฐ€๋˜๊ณ  ๋‚ด package.json์—๋„ ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค.

 

 

์ด์ œ commonJs์™€ ES6์—์„œ day.js๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

1. CommonJs 

 

day.js

const dayjs = require('dayjs');

const now = dayjs();

console.log(now.toString());
console.log(now.format());
console.log(now.format('YYYY-MM-DD')); // ์‚ฌ์šฉ์ž ์ •์˜ ํ˜•์‹
console.log(now.format('YYYY๋…„ MM์›” DD์ผ')); // ํ•œ๊ธ€ ํ˜•์‹

const date1 = dayjs('2024-04-02');
const date2 = dayjs('2025-04-02');

console.log(date2.diff(date1, 'day'));// ์ผ ๋‹จ์œ„ ์ฐจ์ด
console.log(date2.diff(date1, 'month'));

 

๊ฒฐ๊ณผ

์‚ฌ์‹ค ์—ฌ๊ธฐ์„œ ์ด์ƒํ•œ๊ฒŒ ์žˆ๋‹ค๋ฉด... ์ด๊ฑธ ์บก์ณํ–ˆ์„ ์‹œ์ ์—์„œ๋Š” ๋‚ด๊ฐ€ ํ˜•์‹์„ yyyy-mm-dd ์ด๋Ÿฐ์‹์œผ๋กœ ์†Œ๋ฌธ์ž๋กœ ์จ์„œ mm, dd๋ถ€๋ถ„์ด ๋ถ„(minute)๊ณผ dd(์š”์ผ)๋กœ ์ถœ๋ ฅ๋˜์–ด์žˆ๋‹ค...

 

 

2. ES6

 

์œ„์— ์„œ์ˆ ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ package.json์— "type" : "module",์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

day.js

import dayjs from "dayjs";

const now = dayjs();

console.log(now.toString());
console.log(now.format());
console.log(now.format('YYYY-MM-DD')); // ์‚ฌ์šฉ์ž ์ •์˜ ํ˜•์‹
console.log(now.format('YYYY๋…„ MM์›” DD์ผ')); // ํ•œ๊ธ€ ํ˜•์‹

const date1 = dayjs('2024-04-02');
const date2 = dayjs('2025-04-02');

console.log(date2.diff(date1, 'day'));// ์ผ ๋‹จ์œ„ ์ฐจ์ด
console.log(date2.diff(date1, 'month'));

 

์ด๋Ÿฐ์‹์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด ๋˜ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์ƒ๊ธด๋‹ค.

 

package-lock.json

 

์•„๊นŒ day.js๋ฅผ ์„ค์น˜ํ•œ ์ดํ›„๋กœ package-lock.json์ด๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ๋๋Š”๋ฐ, 

package.json์ด ์ง€๊ธˆ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์ด๋ผ๋ฉด, package-lock.json์€ ์ •ํ™•ํ•œ ๋ฒ„์ „์˜ ์˜์กด์„ฑ ๋ฐ ํ•˜์œ„ ์˜์กด์„ฑ์„ ๊ธฐ๋กํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ next๋ฅผ ์„ค์น˜ํ–ˆ์„ ๋•Œ, package.json์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€๋œ๋‹ค.

 

package.json์˜ dependencies ๊ฐ’

 

๋ฐ˜๋ฉด package-lock.json์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค....

 

 

next์—์„œ ๋˜ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ module๋“ค์ด ์ถ”๊ฐ€๋กœ ์„ค์น˜๋˜์–ด์žˆ๋‹ค. ์ด๋Š” next๊ฐ€ next ์ž์ฒด๋ฟ๋งŒ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—๋„ ์˜์กดํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ํŒจํ‚ค์ง€์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

package-lock.json์—๋Š” next๊ฐ€ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฐ๊ฐ์˜ ํŒจํ‚ค์ง€๋“ค์ด ์กฐ๊ธˆ์ด๋ผ๋„ ์–ด๊ธ‹๋‚˜๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ์˜์กด์„ฑ๋„ ๊ธฐ๋กํ•˜๊ณ  ์žˆ๊ณ , ์ด๋กœ ์ธํ•ด ๋ˆ„๊ตฌ๋‚˜ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

next๋ฅผ ์‚ญ์ œํ•˜๋ฉด 800์ค„์ด ๋„˜์–ด๊ฐ€๋˜ ํŒจํ‚ค์ง€ ๋‚ด์—ญ๋“ค์ด ์‚ฌ๋ผ์ง€๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

package.json / package-lock.json

 

 

 


 

npx

Node Package eXecute์˜ ์•ฝ์–ด๋กœ, npm ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ๋‹ค. npm 5.2.0 ์ดํ›„๋กœ ๋ฒ„์ „์— ํฌํ•จ๋๋‹ค.

 

npx๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

1. ํŒจํ‚ค์ง€๋ฅผ ์ผํšŒ์„ฑ์œผ๋กœ ์‚ฌ์šฉ ์‹œ

  • npm : ํŒจํ‚ค์ง€ ๋‹ค์šด => ์‚ฌ์šฉ => ์‚ฌ์šฉ ํ›„ ์‚ญ์ œ
  • npx : ํŒจํ‚ค์ง€ ์‹คํ–‰

 

cowsay๋Š” ์žฌ๋ฏธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ์ฃผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ•์กฐํ•˜๊ฑฐ๋‚˜ ์žฌ๋ฏธ์žˆ๋Š” ํšจ๊ณผ๋ฅผ ์œ„ํ•ด ํ™œ์šฉ๋œ๋‹ค. ์„ค์น˜์—†์ด๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด npx cowsay hello๋ฅผ ๋ช…๋ นํ•ด๋ดค๋‹ค.

 

 

์ด ๋•Œ ์ฒ˜์Œ์—๋Š” need to install ~....ํ•˜๋ผ๋ฉด์„œ ์„ค์น˜ํ•˜๋ผ๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€?? ์‹ถ์—ˆ๋Š”๋ฐ

์ด๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๋กœ์ปฌ์ด๋‚˜ ๊ธ€๋กœ๋ฒŒ์— ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ์ž„์‹œ๋กœ ๋‹ค์šด๋กœ๋“œ ๋˜๋Š” ๊ฒƒ ๋ฟ์ด๋ฉฐ, ์˜๊ตฌ์ ์ด์ง€ ์•Š๋‹ค. ํ„ฐ๋ฏธ๋„์„ ๋‹ค์‹œ ์—ด ๊ฒฝ์šฐ ์žฌ๋‹ค์šด๋กœ๋“œ ํ•ด์•ผํ•œ๋‹ค. (package.json์ด๋‚˜ package-lock.json์— ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„ค์น˜๋˜๋Š” ๊ฒƒ์ด ์•„๋‹˜)

npx -y cowsay "hello"๋‚˜ -y๋ฅผ --yes๋กœ ๋ณ€๊ฒฝํ•ด ์ž‘์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์Šน์ธ๋ผ์„œ ์œ„์™€ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ๋Š” ๋œจ์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

cowsay๋ฅผ npm์œผ๋กœ ์„ค์น˜ํ•˜๊ธฐ โฌ‡๏ธ

๋”๋ณด๊ธฐ

1. npm i cowsay๋กœ ์„ค์น˜

 

2-1. package.json์˜ scripts์— ํŠน์ • ๊ตฌ๋ฌธ์„ cowsay๋ผ๋Š” ๋ช…๋ น์–ด๋กœ ์ถ”๊ฐ€ํ›„ ์‹คํ–‰



2-2. scripts์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ๋ง๊ณ  cowsay.js๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑ (commonjs ์‹์œผ๋กœ ์ง„ํ–‰)

//cowsay.js
const cowsay = require('cowsay');

console.log(
    cowsay.say({
        text: 'Hello...',
        e: 'oO',
        T: 'U'
    })
);

 

 2-2-1. ํ„ฐ๋ฏธ๋„์— node cowsay.js ๋ช…๋ น์–ด ์ž…๋ ฅ

 

 

 

2. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์‹œ

ํŒจํ‚ค์ง€๋ฅผ npm์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ์ง์ ‘ ๋ฐ”๊พธ์ง€ ์•Š๋Š” ํ•œ ๊ณ„์† ๊ฐ™์€ ๋ฒ„์ „์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ npx๋กœ ์‹คํ–‰์‹œํ‚ค๋ฉด, ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ๋งˆ๋‹ค ์ตœ์‹  ๋ฒ„์ „์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „์— ๋Œ€ํ•ด ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ์•กํŠธ๋ฅผ npx๋กœ ์‹คํ–‰ํ•ด๋ดค๋‹ค.

 

npx create -react-app react-app

 

 

17500์ค„์ด ๋„˜์–ด๊ฐ€๋Š” package-lock.json ํŒŒ์ผ....

 

 

๊ธฐ์กด ํด๋” npx-practice์— react-app ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

react-app์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ์—๋งŒ 17500์ค„์ด ๋„˜์–ด๊ฐ€๋Š”๋ฐ ์ด ํŒจํ‚ค์ง€๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๊ธฐ๋ž€ ์ƒ์‹์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋•Œ๋ฌธ์— npx๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์น˜ ์—†์ด ์ตœ์‹  ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ๋‹ค์šดํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


 

nvm ์„ค์น˜๋Š” 2์–ด์ง„๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ,

npm์˜ package.json ๊ด€๋ จ ๋‚ด์šฉ์€ ์ซ„๋ฆฌ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŽ์ด ์ฐธ๊ณ ํ–ˆ๋‹ค... ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค:)