1. Environment

  • Node.js

  • NPM(Node Package Manager)

    • package.json / package-lock.json

    • node_modules

    • npx

  • ES Modules vs CommonJS

๊ฐ•์˜ ์ •๋ฆฌ

๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…

Node.js๋Š” 2009๋…„ 5์›” 27์ผ์— ์ฒ˜์Œ ์†Œ๊ฐœ๋˜์—ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค JavaScript ์—”์ง„์ธ ํฌ๋กฌ V8์— ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ libuv๋ฅผ ๊ฒฐํ•ฉํ•œ ํ”Œ๋žซํผ์ด๋‹ค. JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค.

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

์–ด๋ ค์šด ์ด์œ ๋Š” ๋„๊ตฌ๊ฐ€ ๊ณ„์† ๋ณ€ํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ƒˆ๋กœ์šด ๋„๊ตฌ๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ทธ๊ณณ์œผ๋กœ ์ ๋ฆฌ๊ณ  ๊ณ„์† ๋ณ€ํ™”ํ•œ๋‹ค.(CRA -> Vite) ์—ฌ๊ธฐ์—์„œ๋Š” ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ๋‹ค๋ฃฌ๋‹ค. ์ƒˆ๋กœ์šด ๋„๊ตฌ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ด๋ ‡๊ฒŒ ์จ๋ด์•ผ์ง€, ์ด๋Ÿฐ๊ฑด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋‚˜์™”๊ตฌ๋‚˜ ๋“ฑ์˜ ์ ‘๊ทผ์„ ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ช…๋ชฉ์ ์œผ๋กœ ์ซ’์„ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ํ•ญ์ƒ ๋’ค์ณ์ง€์ง€ ์•Š๊ฒŒ ํŠธ๋ Œ๋“œ์—๋Š” ๋ฏผ๊ฐํ•˜์ž. ์‹ค์งˆ์ ์œผ๋กœ ์ข‹์€ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๋„์ž…ํ•˜์ž. trade-off๋ฅผ ๊ณ ๋ คํ•˜์ž.

์ง€๊ธˆ์˜ ์„ธํŒ…๋„ ๋‚˜์ค‘์—๋Š” ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์งˆ ๊ฒƒ์ด๋‹ค. ๋ฐ”๋€ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋ฌธ์„œ๋ฅผ ์ฐพ์•„์„œ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด ๋˜๊ณ  ์ƒˆ๋กœ์šด ๋„๊ตฌ๋ฅผ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

JavaScript ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (Node.js) ์„ธํŒ…

์‚ฌ์‹ค์ƒ Node.js ์„ธํŒ…์ด๋‹ค ๋Œ€๋ถ€๋ถ„ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์—†๊ณ  ์ด๋ฏธ ๋งŒ๋“ค์–ด๋†“์€ ํˆด๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. nvm์„ ์“ฐ๋‹ค๊ฐ€ ์ตœ๊ทผ์—๋Š” fnm์„ ์“ด๋‹ค. nvm๋ณด๋‹ค ๋น ๋ฅด๋‹ค (Rust๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค)

node.js ํŽ˜์ด์ง€์—์„œ ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณต์‹๋ฌธ์„œ๋Š” ์˜์–ด๊ฐ€ ์—…๋ฐ์ดํŠธ๋ผ๋˜๊ฐ€ ์กฐ๊ธˆ์€ ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. (๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์˜์–ด๋กœ ๋ณด๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค)

LTS (Long Term Support)

๋…ธ๋“œ ๋ฒ„์ „ ์•ž์ด ํ™€์ˆ˜์ธ ๊ฒƒ์€ ์ตœ์‹ ๋ฒ„์ „, ์ง์ˆ˜์ธ ๊ฒƒ์€ LTS ๋ฒ„์ „

TypeScript + React + Jest + ESLint + Parcel(๋ฒˆ๋“ค๋Ÿฌ, ๋นŒ๋“œ ๋„๊ตฌ, ๋งŒ๋Šฅ ๋„๊ตฌ) ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…

์ž‘์—… ํด๋” ์ค€๋น„

  • mkdir my-all

  • cd my-app

ํŽธ์ง‘๊ธฐ(VSCode) ์—ด๊ธฐ

  • code .

  • webstorm . (์›น์Šคํ†ฐ)

npm ํŒจํ‚ค์ง€ ์ค€๋น„

  • npm init

  • npm init -y (ํ•œ๋ฒˆ์— package.json ์ƒ์„ฑ)

  • name์€ kebab-case, Lisp-case

  • version์€ semantic versioning

    • major.minor.patch

.gitignore ์„ธํŒ…

  • touch .gitignore

  • node_modules/

  • dist/

  • github/gitignore ํ˜น์€ vscode์—์„œ .gitignore์„ ์ƒ์„ฑํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •

  • npm i -D typescript

    • -D ์˜ต์…˜์€ package.json์˜ devDependencies์— ์„ค์น˜๋œ๋‹ค.

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํˆด

    • ๊ณผ๊ฑฐ์—๋Š” npm i --save-dev

  • npx tsc --init

    • node_modules/.bin/tsc --init ๋ช…๋ น์–ด์™€ ๊ฐ™๋‹ค.

    • npx๋Š” node_modules์— ํ•ด๋‹นํ•˜๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ์ฐพ์•„์„œ ์‹คํ–‰ํ•˜๊ณ , ๋งŒ์•ฝ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ npm ํŒจํ‚ค์ง€๋“ค์„ ์บ์‹œํ•˜๋Š” ๊ณณ์— ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ฐ›์•„์„œ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

      • macOS์˜ ๊ฒฝ์šฐ์— ~/.npm/_npx ์— ์กด์žฌํ•œ๋‹ค.

    • "jsx" : "react-jsx" ์„ค์ •์„ ๋งž์ถฐ์ค€๋‹ค.

      • .tsx ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

      • import React๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

ESLint ์„ค์ •

  • npm i -D eslint

  • npx eslint --init

  • env์— jest:true๋ฅผ ๋ฏธ๋ฆฌ ์žก์•„์ค„ ๊ฒƒ.

  • .eslintignore ์ž‘์„ฑ

๋ฆฌ์•กํŠธ ์„ค์น˜

  • npm i react react-dom

  • npm i -D @types/react @types/react-dom

ํ…Œ์ŠคํŒ… ๋„๊ตฌ ์„ค์น˜

  • npm i -D jest @types/jest @swc/core @swc/jest jest-environment-jsdom @testing-library/react @testing-library/jest-dom

jest.config.js ์„ค์ •

  • ์„ฑ๋Šฅ์„ ์œ„ํ•ด ํ…Œ์ŠคํŠธ์—์„œ SWC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธํŒ…

Parcel ์„ค์น˜

  • npm i -D parcel

  • package.json scripts ์ˆ˜์ •


๋งŒ๋“ค์–ด์ง„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (React)

  • CRA (Create-React-App)

    • npx create-react-app my-app --template typescript

  • Vite

    • yarn create vite

  • CNA (Create-Next-App)

    • npx create-next-app@latest

CRA๋Š” ์ด์ œ ์ž๋ฆฌ์—์„œ ๋ฌผ๋Ÿฌ๋‚˜๊ณ  Vite๊ฐ€ ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ์˜ HMR(Hot Module Reloading), build ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค. ๋ฒˆ๋“ค์ด ์—†๋Š” ๊ฐœ๋ฐœ ์„œ๋ฒ„๋‹ค.

(React Docs BETA์—์„œ๋Š” ์•„์ง CRA๋ฅผ ์ถ”์ฒœํ•˜๊ณ  ์žˆ๋Š”๋ฐ... Vite๋กœ ๋ณ€๊ฒฝํ•ด๋‹ฌ๋ผ๋Š” pr์— ๋ฐ•ํžŒ ์ด๋ชจ์ง€) github pr

Next๋กœ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ๋Š” CNA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

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

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


ํด๋ž˜์‹ํ•œ Webpack ์ •๋ฆฌํ•˜๊ธฐ

Last updated