Node.js


๐Ÿ“ฆย NPM

Node Package Manager

  • NPM์€ ๋…ธ๋“œ์˜ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋งค๋‹ˆ์ €
  • npm init -y๋กœ ํŒจํ‚ค๊ธฐ ๊ด€๋ฆฌ ์‹œ์ž‘!
  • pakage.json์€ node.js ๊ด€๋ จ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ
  • npm install ํŒจํ‚ค์ง€์ด๋ฆ„
  • npm uninstall ํŒจํ‚ค์ง€์ด๋ฆ„
  • pakage.json ํŒŒ์ผ๋งŒ ์นดํ”ผํ•˜์—ฌ ๋‹ค๋ฅธ ํด๋”์— ๋‘๊ณ  npm install๋งŒ ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น pakage.json์ด ๊ฐ€์ง„ ํŒจํ‚ค์ง€๋ฅผ ์ž๋™์œผ๋กœ ๋ชจ๋‘ ์„ค์น˜ํ•จ
  • ๐ŸŒฐย File-system

    Node.js์˜ ๊ธฐ๋ณธ ๋ชจ๋“ˆ

    ํŒŒ์ผ ์ฝ๊ธฐ

  • fs.readFile(โ€˜ํŒŒ์ผ์œ„์น˜โ€™, โ€˜์œ ๋‹ˆ์ฝ”๋“œ ํฌ๋งทโ€™, callback(err, data) {})
  • const fs = require('fs');
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    console.log(err);
    } else {
    console.log(data);
    }
    });

    ํŒŒ์ผ ์“ฐ๊ธฐ

  • fs.writeFile(โ€™์ž‘์„ฑํ•  ํŒŒ์ผ๋ช…โ€™, โ€˜์ž‘์„ฑํ•  ๋‚ด์šฉโ€™, โ€˜์œ ๋‹ˆ์ฝ”๋“œ ํฌ๋งทโ€™, callback(err) {})
  • const fs = require('fs');
    const str = 'ํŒŒ์ผ ์“ฐ๊ธฐ ํ…Œ์ŠคํŠธ';
    fs.writeFile('test1.txt', str, 'utf-8', (err) => {
    if (err) {
    console.log(err);
    } else {
    console.log('ํŒŒ์ผ ์ž‘์„ฑ ์™„๋ฃŒ!');
    }
    });

    fs์™€ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • node.js๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ file์„ ์ฝ๊ณ  ์“ด๋‹ค.
  • ์˜ˆ์‹œ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„  ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ํ•ญ์ƒ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.
  • const fs = require('fs');
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('1๋ฒˆ', data.toString());
    });
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('2๋ฒˆ', data.toString());
    });
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('3๋ฒˆ', data.toString());
    });
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('4๋ฒˆ', data.toString());
    });
  • ์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ฒŒ๋˜๋ฉด ์˜๋„์™€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๋ ค๋ฉด callback์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
  • const fs = require('fs');
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('1๋ฒˆ', data.toString());
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('2๋ฒˆ', data.toString());
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('3๋ฒˆ', data.toString());
    fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) {
    throw err;
    }
    console.log('4๋ฒˆ', data.toString());
    });
    });
    });
    });
  • ์œ„ ์ฝ”๋“œ๋Š” 1, 2, 3, 4๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” โ€˜์ฝœ๋ฐฑ ์ง€์˜ฅโ€™์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
  • ๊ฐ€๋…์„ฑ์ด ๋งค์šฐ ๋–จ์–ด์ง€๊ณ  ์ฝ”๋“œ ์ˆ˜์ •์ด ์–ด๋ ต๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด promise ๋ฌธ๋ฒ•์ด๋‹ค.
  • const fs = require('fs').promises;
    fs.readFile('test.txt', 'utf-8')
    .then((data) => {
    console.log('1๋ฒˆ', data.toString());
    return fs.readFile('test.txt', 'utf-8');
    })
    .then((data) => {
    console.log('2๋ฒˆ', data.toString());
    return fs.readFile('test.txt', 'utf-8');
    })
    .then((data) => {
    console.log('3๋ฒˆ', data.toString());
    return fs.readFile('test.txt', 'utf-8');
    })
    .then((data) => {
    console.log('4๋ฒˆ', data.toString());
    return fs.readFile('test.txt', 'utf-8');
    })
    .catch((err) => {
    throw err;
    });
  • ๋ถ€๋“ฑํ˜ธ ๋ชจ์–‘์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š์•„ ๊ฐ€๋…์„ฑ์ด ๋” ์ข‹๊ณ  ์ฝ”๋“œ ์ˆ˜์ •์ด ํŽธํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • Async / Await ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
  • const fs = require('fs').promises;
    async function main() {
    let data = await fs.readFile('test.txt', 'utf-8');
    console.log('1๋ฒˆ', data);
    data = await fs.readFile('test.txt', 'utf-8');
    console.log('2๋ฒˆ', data);
    data = await fs.readFile('test.txt', 'utf-8');
    console.log('3๋ฒˆ', data);
    data = await fs.readFile('test.txt', 'utf-8');
    console.log('4๋ฒˆ', data);
    }
    main();
  • ES6์—์„œ ๋„์ž…๋œ ๋ฌธ๋ฒ•์ด๋‹ˆ ๋งŒํผ ๊ฐ€์žฅ ๊ฐ„๊ฒฐํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๐Ÿฅย ๋ชจ๋“ˆ ๋นผ๊ธฐ, ๊ฐ€์ ธ์˜ค๊ธฐ

    // ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค ํŒŒ์ผ
    // ...
    module.exports = router;
    // ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ํŒŒ์ผ
    const userRouter = require('./routes/users');
    app.use('/users', userRouter);

    ๐Ÿฅชย DOTENV

  • DOTENV๋Š” ์ค‘์š”ํ•œ ์ •๋ณด(์„œ๋ฒ„ ์ ‘์† ์ •๋ณด ๋“ฑ)๋ฅผ ์™ธ๋ถ€ ์ฝ”๋“œ์—์„œ ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
  • ๋ชจ๋“ˆ์„ ํ˜ธ์ถœํ•ด์ค€๋‹ค.
  • require('dotenv').config();
  • .env ํŒŒ์ผ์„ ์ตœ์ƒ๋‹น ํด๋”์— ๋งŒ๋“ค๊ณ  ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ .env ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค.
  • PORT = 4000
    MYSQL_USER = root
    MYSQL_PASSWORD = 12341234
    MYSQL_DB = mydb
  • ์ด๋ฅผ .gitignore์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๊นƒํ—ˆ๋ธŒ์—๋Š” ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๊ณ  ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.