λ¬Έμμ μ΄μ νμ λλ€!
λͺ©μ°¨
π’ Node.js
Node.jsλ JavaScript λ°νμ νκ²½μΌλ‘, μλ² μ¬μ΄λ μ ν리μΌμ΄μ κ°λ°μ κ°λ₯νκ² ν©λλ€.
π μ μ
Node.jsλ Chrome V8 JavaScript μμ§μ κΈ°λ°μΌλ‘ ν μλ² μ¬μ΄λ JavaScript λ°νμ νκ²½μ λλ€. μ΄λ²€νΈ κΈ°λ°, λ ΌλΈλ‘νΉ I/O λͺ¨λΈμ μ¬μ©νμ¬ κ°λ²Όμ°λ©΄μλ ν¨μ¨μ μΈ μ ν리μΌμ΄μ μ κ°λ°ν μ μμ΅λλ€.
π― μ£Όμ νΉμ§
1. μ΄λ²€νΈ κΈ°λ° (Event-driven) - λΉλκΈ° νλ‘κ·Έλλ°μ μ§μνμ¬ λμμ λ§μ μμ²μ μ²λ¦¬ν μ μμ΅λλ€. - μ½λ°± ν¨μλ₯Ό ν΅ν΄ μ΄λ²€νΈ μ²λ¦¬κ° κ°λ₯ν©λλ€.
2. λ ΌλΈλ‘νΉ I/O - νμΌ μμ€ν μ κ·Όμ΄λ λ€νΈμν¬ μμ² μ λ€λ₯Έ μμ μ μ°¨λ¨νμ§ μμ΅λλ€. - λμ μ±λ₯κ³Ό νμ₯μ±μ μ 곡ν©λλ€.
3. ν¬λ‘μ€ νλ«νΌ - Windows, macOS, Linux λ± λ€μν μ΄μ체μ μμ μ€νλ©λλ€. - λμΌν μ½λλ‘ μ¬λ¬ νλ«νΌμ μ§μν μ μμ΅λλ€.
ποΈ κΈ°λ³Έ ꡬ쑰
κ°λ¨ν HTTP μλ² μμ :
const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }); server.listen(3000, () => { console.log('μλ²κ° ν¬νΈ 3000μμ μ€ν μ€μ λλ€.'); });
λͺ¨λ μμ€ν :
// λͺ¨λ λ΄λ³΄λ΄κΈ° module.exports = { add: (a, b) => a + b, subtract: (a, b) => a - b }; // λͺ¨λ κ°μ Έμ€κΈ° const math = require('./math'); console.log(math.add(5, 3)); // 8
π¦ ν¨ν€μ§ κ΄λ¦¬
npm (Node Package Manager) - Node.jsμ κΈ°λ³Έ ν¨ν€μ§ κ΄λ¦¬μμ λλ€. - μμ‘΄μ± κ΄λ¦¬μ μ€ν¬λ¦½νΈ μ€νμ λ΄λΉν©λλ€.
package.json μμ :
{ "name": "my-project", "version": "1.0.0", "description": "νλ‘μ νΈ μ€λͺ ", "main": "index.js", "scripts": { "start": "node index.js", "dev": "nodemon index.js", "test": "jest" }, "dependencies": { "express": "^4.18.2", "socket.io": "^4.7.2" }, "devDependencies": { "nodemon": "^3.0.1" } }
π§ κ°λ° νκ²½
nodemon - νμΌ λ³κ²½μ κ°μ§νμ¬ μλμΌλ‘ μλ²λ₯Ό μ¬μμν©λλ€. - κ°λ° μ νΈμμ±μ μ 곡ν©λλ€.
# nodemon μ€μΉ npm install -g nodemon # κ°λ° μλ² μ€ν nodemon app.js
νκ²½ λ³μ κ΄λ¦¬:
require('dotenv').config(); const port = process.env.PORT || 3000; const dbUrl = process.env.DATABASE_URL;
π νλ‘λμ λ°°ν¬
PM2 μ¬μ©:
# PM2 μ€μΉ npm install -g pm2 # μ ν리μΌμ΄μ μμ pm2 start app.js --name "my-app" # ν΄λ¬μ€ν° λͺ¨λ pm2 start app.js -i max
π μ±λ₯ μ΅μ ν
λ©λͺ¨λ¦¬ κ΄λ¦¬:
// κ°λΉμ§ 컬λ μ κ°μ μ€ν if (global.gc) { global.gc(); } // λ©λͺ¨λ¦¬ μ¬μ©λ λͺ¨λν°λ§ const used = process.memoryUsage(); console.log(`λ©λͺ¨λ¦¬ μ¬μ©λ: ${Math.round(used.heapUsed / 1024 / 1024)} MB`);
ν΄λ¬μ€ν° λͺ¨λ:
const cluster = require('cluster'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { // λ§μ€ν° νλ‘μΈμ€ for (let i = 0; i < numCPUs; i++) { cluster.fork(); } } else { // μ컀 νλ‘μΈμ€ require('./app.js'); }
π λλ²κΉ
λ΄μ₯ λλ²κ±° μ¬μ©:
# λλ²κ·Έ λͺ¨λλ‘ μ€ν node --inspect app.js # λΈλ μ΄ν¬ν¬μΈνΈ μ€μ debugger;
λ‘κΉ :
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ] });
π κ΄λ ¨ μ©μ΄
- Express.js - Node.js μΉ νλ μμν¬
- PM2 - Node.js νλ‘μΈμ€ κ΄λ¦¬μ
- Socket.IO - μ€μκ° ν΅μ λΌμ΄λΈλ¬λ¦¬
- Git - λ²μ κ΄λ¦¬ μμ€ν
- JavaScript - νλ‘κ·Έλλ° μΈμ΄
π κ΄λ ¨ λ¬Έμ
β μ΄ νμ΄μ§λ μλμΌλ‘ μμ±λμμ΅λλ€.