์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋…ธ๋“œ 2] 6์žฅ. ์ต์Šคํ”„๋ ˆ์Šค ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

23-24/Node.js 2

by _๋„๋‹ด 2023. 11. 10. 10:00

๋ณธ๋ฌธ

728x90

 

 

 

๐ŸŒŸ6์žฅ ํ‚ค์›Œ๋“œ๐ŸŒŸ

์›น ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ

์ต์Šคํ”„๋ ˆ์Šค

๋ฏธ๋“ค์›จ์–ด

๋ผ์šฐํ„ฐ์™€ ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ

start์†์„ฑ

 

 

 

 

 

 

 

 

์ต์Šคํ”„๋ ˆ์Šค

: npm์— ์žˆ๋Š” ์›น ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์„œ๋ฒ„ ์ œ์ž‘๊ณผ์ •์—์„œ ๊ฒช๋Š” ๋ถˆํŽธํ•จ (4์žฅ ์ฐธ๊ณ , ๋ถˆํŽธํ•œ ์ฝ”๋“œ ๋ณด๊ธฐ์™€ ํ™•์žฅ์„ฑ) ํ•ด์†Œ์™€ ํŽธ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

 

ํŠน์ง•

: http ๋ชจ๋“ˆ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต ๊ฐ์ฒด์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋“ค์„ ๋ถ€์—ฌ.

: ๊ธฐ์กด ๋ฉ”์„œ๋“œ + ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

: ์ฝ”๋“œ ๋ถ„๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌ ์šฉ์ด

: if๋ฌธ์„ ์ด์šฉํ•œ ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ์ฃผ์†Œ๊ตฌ๋ณ„ X

: ๋งŽ์€ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ๋ฒ„๊ทธ๊ฐ€ ์ ๊ณ , ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํ™œ๋ฐœํ•จ

 

์ต์Šคํ”„๋ ˆ์Šค ์™ธ์˜ ์›น ํ”„๋ ˆ์ž„ ์›Œํฌ

: koa, hapi (์‚ฌ์šฉ๋Ÿ‰์ด ์ต์Šคํ”„๋ ˆ์Šค์— ๋น„ํ•ด ์ ์Œ)

 

 

 

6.1. ์ต์Šคํ”„๋ ˆ์Šค ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

 

์ต์Šคํ”„๋ ˆ์Šค ํ”„๋กœ์ ํŠธ ์‹ค์Šต ๊ณผ์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ๋‹ค.

 

์‹ค์Šต์„ ์ง„ํ–‰ํ•  (learn-express) ํด๋” ์ƒˆ๋กœ ์„ค์ • -> package.json์„ ์ œ์ผ ๋จผ์ € ์ƒ์„ฑ

  way1) package.json์„ ์ƒ์„ฑํ•ด ์ฃผ๋Š” npm init ๋ช…๋ น์–ด๋ฅผ ์ฝ˜์†”์—์„œ ํ˜ธ์ถœํ•ด ๋‹จ๊ณ„์ ์œผ๋กœ ๋‚ด์šฉ๋ฌผ์„ ์ž…๋ ฅ

  way2) npm init -y๋ฅผ ์ž…๋ ฅํ•ด ํŒŒ์ผ์„ ๋งŒ๋“  ๋’ค ๋‚ด์šฉ์„ ์ˆ˜์ •

+) version์ด๋‚˜ description, author, license๋Š” ์›ํ•˜๋Š” ๋Œ€๋กœ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •

+) nodemon์€ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅ. ๋ฐฐํฌ ํ›„์—๋Š” ์ž˜ ์‚ฌ์šฉ ์•ˆ ํ•จ

 

// package.json

{
  "name": "learn-express",
  "version": "0.0.1",
  "description": "์ต์Šคํ”„๋ ˆ์Šค๋ฅผ ๋ฐฐ์šฐ์ž",
  "main": "app.js",
  "scripts": {
    "start": "nodemon app"      // start ์†์„ฑ์€ ์žŠ์ง€ ๋ง๊ธฐ!
  //  nodemon app์„ ํ•˜๋ฉด app.js๋ฅผ nodemon์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค =  nodemon ๋ชจ๋“ˆ๋กœ ์„œ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘

  },
  "author": "ZeroCho",
  "license": "MIT"
}

 

 

 

 

์•„๋ž˜๋Š” ์„œ๋ฒ„ ์—ญํ• ์„ ํ•  ํŒŒ์ผ

+) ์ต์Šคํ”„๋ ˆ์Šค ๋‚ด๋ถ€์— http ๋ชจ๋“ˆ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์„œ๋ฒ„์˜ ์—ญํ•  ๊ฐ€๋Šฅ

+) GET ์š”์ฒญ ์™ธ์—๋„ POST, PUT, PATCH, DELETE, OPTIONS์— ๋Œ€ํ•œ ๋ผ์šฐํ„ฐ๋ฅผ ์œ„ํ•œ app.post, app.put, app.patch. app.delete, app.options ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌ

 

// app.js

const express = require('express');

const app = express();
// Express ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•ด app ๋ณ€์ˆ˜์— ํ• ๋‹น

app.set('port', process.env.PORT || 3000);
// ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋  ํฌํŠธ๋ฅผ ์„ค์ •. ๊ฐ์ฒด์— PORT ์†์„ฑO -> ๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ / X -> ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 3000๋ฒˆ ํฌํŠธ

app.get('/', (req, res) => {
//์ฃผ์†Œ์— ๋Œ€ํ•œ GET ์š”์ฒญ์ด ์˜ฌ ๋•Œ, 

  res.send('Hello, Express');
// ์‘๋‹ต์œผ๋กœ Hello, Express๋ฅผ ์ „์†ก

});

app.listen(app.get('port'), () => {
  console.log(app.get('port'), '๋ฒˆ ํฌํŠธ์—์„œ ๋Œ€๊ธฐ ์ค‘');
});

 

 

$ npm start 

 

์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰, ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์ ‘์† ์‹œ Hello, Express ๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ฌธ์ž์—ด ์•„๋‹Œ HTML์œผ๋กœ ์‘๋‹ต์„ ์›ํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น htmlํŒŒ์ผ ์ƒ์„ฑ๊ณผ res.sendFile ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

์ด๋ฅผ ์œ„ํ•ด์„œ app.js ํŒŒ์ผ ์ˆ˜์ •

//  app.js

const express = require('express');
const path = require('path');

const app = express();
app.set('port', process.env.PORT || 3000);
app.get('/', (req, res) => {
  // res.send('Hello, Express');
  res.sendFile(path.join(__dirname, '/index.html'));
});

app.listen(app.get('port'), () => {
  console.log(app.get('port'), '๋ฒˆ ํฌํŠธ์—์„œ ๋Œ€๊ธฐ ์ค‘');
});

 

 

 

 

6.2. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด

 

 

๋ฏธ๋“ค์›จ์–ด

: ์ต์Šคํ”„๋ ˆ์Šค์˜ ํ•ต์‹ฌ

: ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ค‘๊ฐ„(middle)์— ์œ„์น˜

: ๋ผ์šฐํ„ฐ์™€ ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ์ด ์žˆ๋‹ค.

: ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์กฐ์ž‘ํ•ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€, ๋‚˜์œ ์š”์ฒญ ์ œ๊ฑฐ

: app.use(๋ฏธ๋“ค์›จ์–ด) ํ˜•์‹์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ

: ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰

: app.use๋‚˜ app.get ๊ฐ™์€ ๋ผ์šฐํ„ฐ์— ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์žฅ์ฐฉ ๊ฐ€๋Šฅ

 

 

์•„๋ž˜๋Š” ์ต์Šคํ”„๋ ˆ์Šค์— ๋ฏธ๋“ค ์›จ์–ด ์—ฐ๊ฒฐ ์‚ฌ๋ก€

* ์ฃผ์†Œ๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ X -> ๋ฏธ๋“ค์›จ์–ด๋Š” ๋ชจ๋“  ์š”์ฒญ์—์„œ ์‹คํ–‰๋˜๊ณ ,

* ์ฃผ์†Œ O -> ํ•ด๋‹นํ•˜๋Š” ์š”์ฒญ์—์„œ๋งŒ ์‹คํ–‰

// app.js

...
app.set('port', process.env.PORT || 3000);

app.use((req, res, next) => {
  console.log('๋ชจ๋“  ์š”์ฒญ์— ๋‹ค ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.');
  next();
});
app.get('/', (req, res, next) => {
// app.use์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ req, res, next์ธ ํ•จ์ˆ˜ ๋„ฃ๊ธฐ
// next -> ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋กœ ๋„˜์–ด๊ฐ€๋Š” ํ•จ์ˆ˜

  console.log('GET / ์š”์ฒญ์—์„œ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.');
  next();
}, (req, res) => {
  throw new Error('์—๋Ÿฌ๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด๋กœ ๊ฐ‘๋‹ˆ๋‹ค.')
// ์•„๋ž˜ ๋ฏธ๋“ค์›จ์–ด ์—๋Ÿฌ๋กœ ๋ฐœ์ƒ
});

app.use((err, req, res, next) => {
  console.error(err);
  res.status(500).send(err.message);
});

app.listen(app.get('port'), () => {
...

 

 

์•„๋ž˜์˜ ํ‘œ๋ฅผ ํ†ตํ•œ ๊ตฌ์ฒด์   ๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ํ™•์ธ

 

 

 

 

 

 

 

 

 


Node.js #2 

Editor : ๋ผ๋งˆ

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ