console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`); next();}); ์๋ฌ ๋ก๊น ๋ฏธ๋ค์จ์ด app.use((err, req, res, next) โ {
console.error('์๋ฒ ์๋ฌ:', err); res.status(500).json({ error: '์๋ฒ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.' });}); </file> === 3) ๋๋ฒ๊น ๋๊ตฌ === Node.js ๋ด์ฅ ๋๋ฒ๊ฑฐ ์ฌ์ฉ:
node --inspect server.js
Chrome DevTools์์ ๋๋ฒ๊น
:- Chrome ๋ธ๋ผ์ฐ์ ์ด๊ธฐ
chrome:inspect
์ ์ * โOpen dedicated DevTools for Nodeโ ํด๋ฆญ โ- ==== 10. ์ฑ๋ฅ ์ต์ ํ ==== === 1) ์์ถ ์ค์ === <file javascript> const compression = require('compression'); ์๋ต ์์ถ ๋ฏธ๋ค์จ์ด app.use(compression()); </file> === 2) ์บ์ฑ ์ค์ === <file javascript> ์ ์ ํ์ผ ์บ์ฑ app.use(express.static(path.join(__dirname, 'public'), { maxAge: '1d', 1์ผ๊ฐ ์บ์ etag: true ETag ์ฌ์ฉ })); </file> === 3) ์์ฒญ ์ ํ === <file javascript> const rateLimit = require('express-rate-limit'); API ์์ฒญ ์ ํ const limiter = rateLimit({ windowMs: 15 * 60 * 1000, 15๋ถ max: 100, IP๋น ์ต๋ 100๊ฐ ์์ฒญ message: '๋๋ฌด ๋ง์ ์์ฒญ์ด ๋ฐ์ํ์ต๋๋ค.' }); app.use('/api/', limiter); </file> โ- ==== 11. ๋ณด์ ์ค์ ==== === 1) Helmet ๋ฏธ๋ค์จ์ด === <file javascript> const helmet = require('helmet'); ๋ณด์ ํค๋ ์ค์ app.use(helmet({ contentSecurityPolicy: { directives: { defaultSrc: [โ'self'โ], styleSrc: [โ'self'โ, โ'unsafe-inline'โ], scriptSrc: [โ'self'โ, โ'unsafe-inline'โ], imgSrc: [โ'self'โ, โdata:โ, โhttps:โ], connectSrc: [โ'self'โ, โws:โ, โwss:โ] } } })); </file> === 2) CORS ์ค์ === <file javascript> const cors = require('cors'); CORS ์ค์ app.use(cors({ origin: process.env.NODE_ENV === 'production' ? ['https://yourdomain.com'] : ['http://localhost:3000'], credentials: true })); </file> === 3) ์ ๋ ฅ ๋ฐ์ดํฐ ๊ฒ์ฆ === <file javascript> ์ ๋ ฅ ๋ฐ์ดํฐ ๊ฒ์ฆ ์์ app.post('/api/games', (req, res) โ { const { gameType, settings } = req.body; ํ์ ํ๋ ๊ฒ์ฆ if (!gameType) { return res.status(400).json({ error: '๊ฒ์ ํ์ ์ด ํ์ํฉ๋๋ค.' }); } ๋ฐ์ดํฐ ํ์ ๊ฒ์ฆ if (typeof gameType !== 'string') { return res.status(400).json({ error: '๊ฒ์ ํ์ ์ ๋ฌธ์์ด์ด์ด์ผ ํฉ๋๋ค.' }); } ์ถ๊ฐ ์ฒ๋ฆฌโฆ }); </file> โ- ==== 12. ๋ค์ ๋จ๊ณ ====
Node.js
๊ธฐ๋ณธ์ ๋ฐฐ์ ๋ค๋ฉด ๋ค์์ ํ์ตํด๋ณด์ธ์: *Express.js
- ์น ํ๋ ์์ํฌ ์ฌํ ํ์ต *Socket.IO
- ์ค์๊ฐ ํต์ ๊ตฌํ * ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ -MongoDB
,MySQL
๋ฑ * ์ธ์ฆ ์์คํ -JWT
,Passport.js
๋ฑ * ํ ์คํธ ์์ฑ -Jest
,Mocha
๋ฑ ์ถ์ฒ ํ์ต ์์: - ๐ Express.js ์น ํ๋ ์์ํฌ - ๐ Socket.IO ์ค์๊ฐ ํต์ - โก PM2 ํ๋ก์ธ์ค ๊ด๋ฆฌ โ ์ด ํ์ด์ง๋ ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. โ