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์ ๋ฐํ ์ด๋ชจ์ง)
Next๋ก ๊ฐ๋ฐ์ ํ ๋๋ CNA๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ค.
๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๊ธฐ์๋ ๊ด์ฐฎ์ง๋ง, ๊ท๋ชจ๊ฐ ์๋ ์๋น์ค๋ฅผ ์ ์ํ๊ฒ ๋๋ค๋ฉด ๊ฐ๋ฐํ๊ฒฝ์ ์ง์ ๊ตฌ์ถํ๋ ๊ฒ์ด ๊ฐ์ ์ ๊ฐ์ง๋ค๊ณ ์๊ฐํ๋ค. ์ปค์คํ ํ๋ ๋ถ๋ถ์์ ๊ท์ฐฎ๊ณ ์ด๋ ค์์ด ๋ง์ด ์๊ธฐ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์์กดํ๋ ๊ฒ์ด ์๋, ๋ด๊ฐ ์ฝ๋๋ฅผ ์์ฑ ํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ง์ ๊ตฌ์ถํด๋ณด๋ ๊ฒ์ ๋ฌด์กฐ๊ฑด ํ์ํ ์ผ์ด๋ค. ๋จ์ด ๋ง๋ค์ด์ค ํ๊ฒฝ์์๋ง ๊ฐ๋ฐ์ ํ ์ ์๋ ์ฌ๋์ ๊ฐ๋ฐ์๋ผ๊ณ ํ ์ ์์๊น?
ํด๋์ํ Webpack ์ ๋ฆฌํ๊ธฐ
Last updated