Node.js์™€ Express

Yeonnยท2024๋…„ 10์›” 27์ผ
0

Backend ๐Ÿ‘€

๋ชฉ๋ก ๋ณด๊ธฐ
1/10
post-thumbnail

โ“Library

๐ŸŒฑ
ํŠน์ • ๊ธฐ๋Šฅ์ด๋‚˜ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋ฆฌ ์ž‘์„ฑ๋œ( ์‚ฌ๋žŒ๋“ค์ด ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด๋‘” ) ์ฝ”๋“œ์˜ ๋ชจ์Œ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ
    • download: ์ฝ”๋“œ ์šฉ๋Ÿ‰์ด ํฌ๊ณ  ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ์•„์„œ ๋‹ค์šด ๋ฐ›๊ธฐ๋Š” ์–ด๋ ค์›€
    • CDN( Contents Delivery Network )
      : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก head ํƒœ๊ทธ๊ฐ€ ๊ธธ์–ด์ง€๊ณ  ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ CDN์„ ์ง€์›ํ•˜์ง€๋Š” ์•Š์Œ
    • ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์‚ฌ์šฉ: npm install <๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ช…>

      NPM( Node.js Package Manager

      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €
      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ธ Node.js์—์„œ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ๋™์ž‘

โœ”๏ธย Node.js

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ
  • ์„œ๋ฒ„( ๋ฐฑ์—”๋“œ ), CLI ๋„๊ตฌ, ๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋“ฑ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ex ) Electron( ๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ), Express( ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ )
  • LTS( ย Long Term Support )๋กœ ์„ค์น˜ !

    ๐Ÿ“ node command

    • node-v, npm-v ๋กœ version check
    • node index.js( ํŒŒ์ผ๋ช… ): ๋ธŒ๋ผ์šฐ์ € ์—†์ด ์ฝ”๋“œ ์‹คํ–‰์‹œํ‚ค๊ธฐ
    • npm init: npm ์ ์šฉํ•˜๊ธฐ
    • npm install: packagee.json ๊ธฐ์ค€ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋‘ ์„ค์น˜
      • npm install <๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ช…>: ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
  • package.json โ†’ dependencies / devdependencies
    • npm --save -dev install , npm -D install
    • dependencies: ๋นŒ๋“œ ํ›„ ๊ฒฐ๊ณผ๋ฌผ์— ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ
    • dependencies: ๋นŒ๋“œ ์‹œ์—๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ( ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ )

โœ”๏ธย Module ( ๋ชจ๋“ˆ )

  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ( == ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ )
  • scope + definition( module.exports/export ) + usage( import/require )
    • ESM( ES Module ): ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ตœ์‹  ๋ชจ๋“ˆ ์‹œ์Šคํ…œ, import, export
  • Module ์ž‘์„ฑ
    const moduleName = () => {
    	// doing something 
    };
    
    export default moduleName; // <- import ํ•˜์—ฌ ์‚ฌ์šฉ

โœ”๏ธย Express

  • Node.js ํ™˜๊ฒฝ์—์„œ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • src ํด๋”: ํ”„๋กœ์ ํŠธ ํด๋”
    • index.js: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ

โœ”๏ธย Babel

  • Node.js์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • 3๊ฐ€์ง€ ์˜์กด์„ฑ ์„ค์น˜: @babel/core, @babel/node, @babel/preset-env
      • --save-dev / -D : โ€˜๊ฐœ๋ฐœ ํ™˜๊ฒฝโ€™ ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜, ๋นŒ๋“œ ์‹œ ํฌํ•จ X
      • package.json > devDependencies ์— ์ถ”๊ฐ€
      • @babel/preset-env ํ”„๋ฆฌ์…‹ ์„ค์ •
        • babel.config.json > {"presets": ["@babel/preset-env"]} ์ž‘์„ฑ
      • package.json์— type: module ์ž‘์„ฑ

โœ”๏ธย Nodemon

  • ์ฝ”๋“œ ์ €์žฅ ์‹œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • --save-dev / -D : โ€˜๊ฐœ๋ฐœ ํ™˜๊ฒฝโ€™ ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜, ๋นŒ๋“œ ์‹œ ํฌํ•จ X
  • nodemon.json
    {
      "watch": ["src/*"],
      "ext": "js ts json",
      "exec": "node ./src/index.js",
      "verbose": true,
      "ignore": ["*.test.js", "node_modules"],
      "delay": 1500,
      "env": {
        "NODE_ENV": "development",
        "PORT": 8080
      }
    }

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