๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ํ”„๋ก ํŠธ์—”๋“œ/JavaScript

[Node.js] Node.js ๋ง›๋ณด๊ธฐ

by OR15A 2023. 11. 20.

javaScript ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ error๋ถ€๋ถ„์—์„œ ๋‚˜์˜จ node.js ์ •๋ฆฌ

 

ํ•จ์ˆ˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๊ณ , ๊ทธ ์˜ค๋ฅ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์žฅ์†Œ๋กœ ์ „๋‹ฌ๋จ

express๋Š” ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•จ. ๊ทธ๋ฆฌ๊ณ  ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ ์ค‘ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด,
(์˜ค๋ฅ˜๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ•œ ๋‹ค์Œ)๊ธฐ๋ณธ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‹คํ–‰ํ•จ
  1. "ํ•จ์ˆ˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๊ณ , ๊ทธ ์˜ค๋ฅ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์žฅ์†Œ๋กœ ์ „๋‹ฌ๋จ":
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์˜ค๋ฅ˜(์˜ˆ์™ธ)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ๋กœ ์˜ค๋ฅ˜๊ฐ€ ์ „ํŒŒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” try...catch ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•  ์ˆ˜ ์žˆ์Œ
  2. "express๋Š” ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•จ. ๊ทธ๋ฆฌ๊ณ  ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ ์ค‘ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด, (์˜ค๋ฅ˜๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ•œ ๋‹ค์Œ)๊ธฐ๋ณธ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‹คํ–‰ํ•จ":
    • Express ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ํŠน์ • ๊ฒฝ๋กœ(URI)์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜
    • ๋งŒ์•ฝ ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ ์ค‘ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, Express๋Š” ์ด ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ด๊ณ  '์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด(error-handling middleware)'๋กœ ์ „๋‹ฌํ•จ
    • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด๋Š” ์ด ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ์ ˆํ•œ ์‘๋‹ต(์˜ˆ: ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€)์„ ๋ฐ˜ํ™˜. Express์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์žˆ์Œ

 

๋ฏธ๋“ค์›จ์–ด๋ž€?

  • ๋ฏธ๋“ค์›จ์–ด๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต ์‚ฌ์ด์—์„œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜
  • Express์—์„œ ๋ฏธ๋“ค์›จ์–ด๋Š” ์š”์ฒญ ๊ฐ์ฒด(req), ์‘๋‹ต ๊ฐ์ฒด(res), ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋กœ ์ œ์–ด๋ฅผ ๋„˜๊ธฐ๋Š” next ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ
  • ๋ฏธ๋“ค์›จ์–ด๋Š” ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์š”์ฒญ ๋กœ๊น…, ์ •์  ํŒŒ์ผ ์ œ๊ณต, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋“ฑ์— ํ™œ์šฉ๋จ

 

Node.js์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

  • ์ œ์‹œ๋œ ๊ฐœ๋…์€ Node.js ํ™˜๊ฒฝ์˜ Express ํ”„๋ ˆ์ž„์›Œํฌ์— ํŠนํ™”๋œ ๊ฒƒ
  • ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ํ•จ์ˆ˜๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๊ณ , ์˜ˆ์™ธ๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, Express์˜ ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด ๊ฐ™์€ ๊ฐœ๋…์€ Express ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜

 

Express ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?

  • Express ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Node.js๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜
  • Express๋Š” Node.js์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์œ„์— ๋นŒ๋“œ๋˜์–ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ API ๊ฐœ๋ฐœ์„ ๋ณด๋‹ค ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ
  • Express๋Š” ๊ทธ ์ž์ฒด๋กœ ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ
์ฃผ์š” ํŠน์ง•
  • ๊ฐ„๊ฒฐํ•จ๊ณผ ์œ ์—ฐ์„ฑ: Express๋Š” ๊ฐ„๊ฒฐํ•œ API๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ RESTful API๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‹ค์–‘ํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฏธ๋“ค์›จ์–ด ์•„ํ‚คํ…์ฒ˜: Express๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต ์‚ฌ์ด์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋“ค์›จ์–ด๋Š” ๋กœ๊น…, ์ •์  ํŒŒ์ผ ์„œ๋น™, ์„ธ์…˜ ๊ด€๋ฆฌ, ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ: URL ๊ฒฝ๋กœ์™€ HTTP ๋ฉ”์†Œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)์— ๋”ฐ๋ฅธ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ…œํ”Œ๋ฆฟ ์—”์ง„ ์ง€์›: Express๋Š” Pug, EJS, Handlebars ๋“ฑ ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ ์—”์ง„๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์–ด, ๋™์ ์ธ HTML ์ปจํ…์ธ ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ: ๊ฐ•๋ ฅํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›๊ณผ ์ˆ˜๋งŽ์€ NPM ๋ชจ๋“ˆ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์‚ฌ๋ก€
  • ์›น์‚ฌ์ดํŠธ ๋ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜: Express๋Š” ์›น์‚ฌ์ดํŠธ์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • RESTful API ๊ฐœ๋ฐœ: JSON ๊ธฐ๋ฐ˜์˜ RESTful API๋ฅผ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA): React, Angular, Vue.js์™€ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

module.exports = { readFile: readFile };
  • module.exports๋Š” Node.js์—์„œ ๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๊ณ  ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
  • module.exports ๊ฐ์ฒด์— ์–ด๋–ค ์†์„ฑ์ด๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, ๊ทธ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ํ•ด๋‹น ์†์„ฑ์ด๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ชจ๋“ˆ ์ •์˜
// someModule.js
function readFile() {
    // ํŒŒ์ผ ์ฝ๊ธฐ ๋กœ์ง
}

module.exports = { readFile: readFile };
  • ๋ชจ๋“ˆ ์‚ฌ์šฉ
// anotherFile.js
const { readFile } = require('./someModule');

readFile(); // someModule.js์—์„œ ์ •์˜ํ•œ readFile ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ES6 ๋ฌธ๋ฒ• ์‚ฌ์šฉ ์‹œ
// ES6 ๋ชจ๋“ˆ ๋ฌธ๋ฒ•
// someModule.js
export function readFile() {
    // ํŒŒ์ผ ์ฝ๊ธฐ ๋กœ์ง
}

// anotherFile.js
import { readFile } from './someModule';

 

 

const fs = require('fs'); 
  • const fs = require('fs'); ์ฝ”๋“œ๋Š” Node.js์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ(File System) ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ๋ฒ•
  • Node.js์˜ ๋‚ด์žฅ ๋ชจ๋“ˆ์ธ fs๋Š” ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๋“ฑ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

 

  • fs ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๊ธฐ๋ณธ์ ์ธ ์ž‘์—…
const fs = require('fs');

// ํŒŒ์ผ ์ฝ๊ธฐ (๋น„๋™๊ธฐ์ )
fs.readFile('example.txt', 'utf8', (err, data) => {
    if (err) {
        console.error("ํŒŒ์ผ ์ฝ๊ธฐ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:", err);
        return;
    }
    console.log(data);
});

// ํŒŒ์ผ ์“ฐ๊ธฐ (๋น„๋™๊ธฐ์ )
fs.writeFile('example.txt', 'Hello, world!', (err) => {
    if (err) {
        console.error("ํŒŒ์ผ ์“ฐ๊ธฐ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:", err);
        return;
    }
    console.log("ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
});