์‚ฌ์šฉ์ž ๋„๊ตฌ

์‚ฌ์ดํŠธ ๋„๊ตฌ


wiki:it:dream_of_enc:metaverse:express

์ฐจ์ด

๋ฌธ์„œ์˜ ์„ ํƒํ•œ ๋‘ ํŒ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ฐจ์ด ๋ณด๊ธฐ๋กœ ๋งํฌ

์–‘์ชฝ ์ด์ „ ํŒ์ด์ „ ํŒ
wiki:it:dream_of_enc:metaverse:express [2025/07/29 06:47] โ€“ syjang0803wiki:it:dream_of_enc:metaverse:express [2025/07/30 06:43] (ํ˜„์žฌ) โ€“ ๋ฐ”๊นฅ ํŽธ์ง‘ 127.0.0.1
์ค„ 4: ์ค„ 4:
  
 ---- ----
-==== 1. Express.js๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ====+===== 1. Express.js๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? =====
  
 ''Express.js''๋Š” ''Node.js''๋ฅผ ์œ„ํ•œ ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ''Express.js''๋Š” ''Node.js''๋ฅผ ์œ„ํ•œ ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  
 **์ฃผ์š” ํŠน์ง•:** **์ฃผ์š” ํŠน์ง•:**
-  * ์›น ์„œ๋ฒ„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹คย +  * ์›น ์„œ๋ฒ„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ย 
-  * ''RESTful API''๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹คย +  * ''RESTful API''๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ย 
-  * ์ •์  ํŒŒ์ผ(''HTML'', ''CSS'', ์ด๋ฏธ์ง€ ๋“ฑ)์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹คย +  * ์ •์  ํŒŒ์ผ(''HTML'', ''CSS'', ์ด๋ฏธ์ง€ ๋“ฑ)์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ย 
-  * ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค+  * ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  
 ---- ----
-==== 2. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ ====+===== 2. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ =====
  
 **Express.js ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ:** **Express.js ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ:**
์ค„ 25: ์ค„ 25:
  
 ---- ----
-==== 3. ๊ธฐ๋ณธ ์„œ๋ฒ„ ์„ค์ • ====+===== 3. ๊ธฐ๋ณธ ์„œ๋ฒ„ ์„ค์ • =====
  
-=== 1) ํ•„์š”ํ•œ ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ===+==== 1) ํ•„์š”ํ•œ ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ====
  
 ๋จผ์ € ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค: ๋จผ์ € ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค:
  
-<code javascript>+<file javascript>
 const express = require('express'); const express = require('express');
 const path = require('path'); const path = require('path');
์ค„ 38: ์ค„ 38:
 const compression = require('compression'); const compression = require('compression');
 const rateLimit = require('express-rate-limit'); const rateLimit = require('express-rate-limit');
-</code>+</file>
  
 **๊ฐ ๋ชจ๋“ˆ์˜ ์—ญํ• :** **๊ฐ ๋ชจ๋“ˆ์˜ ์—ญํ• :**
์ค„ 48: ์ค„ 48:
   * ''rateLimit'' - ์š”์ฒญ ์ œํ•œ   * ''rateLimit'' - ์š”์ฒญ ์ œํ•œ
  
-=== 2) Express ์•ฑ ์ƒ์„ฑ ===+==== 2) Express ์•ฑ ์ƒ์„ฑ ====
  
-<code javascript>+<file javascript>
 const app = express(); const app = express();
 const PORT = process.env.PORT || 3000; const PORT = process.env.PORT || 3000;
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
์ค„ 59: ์ค„ 59:
   * ''PORT'' - ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋  ํฌํŠธ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 3000)   * ''PORT'' - ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋  ํฌํŠธ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 3000)
  
-=== 3) ๋ณด์•ˆ ๋ฏธ๋“ค์›จ์–ด ์„ค์ • ===+==== 3) ๋ณด์•ˆ ๋ฏธ๋“ค์›จ์–ด ์„ค์ • ====
  
-<code javascript>+<file javascript>
 app.use(helmet({ app.use(helmet({
     contentSecurityPolicy: {     contentSecurityPolicy: {
์ค„ 73: ์ค„ 73:
     }     }
 })); }));
-</code>+</file>
  
 **์ด ์„ค์ •์˜ ๋ชฉ์ :** **์ด ์„ค์ •์˜ ๋ชฉ์ :**
-  * ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹คย +  * ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹คย +  * ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ํ—ˆ์šฉ๋œ ๋ฆฌ์†Œ์Šค๋งŒ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค+  * ํ—ˆ์šฉ๋œ ๋ฆฌ์†Œ์Šค๋งŒ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  
-=== 4) CORS ์„ค์ • ===+==== 4) CORS ์„ค์ • ====
  
-<code javascript>+<file javascript>
 app.use(cors({ app.use(cors({
     origin: process.env.NODE_ENV === 'production'      origin: process.env.NODE_ENV === 'production' 
์ค„ 89: ์ค„ 89:
     credentials: true     credentials: true
 })); }));
-</code>+</file>
  
 **CORS๋ž€?** **CORS๋ž€?**
-  * ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ๋ณด์•ˆ ์ •์ฑ…ย +  * ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ๋ณด์•ˆ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.ย 
-  * ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ''localhost:3000'', ''localhost:8080'' ํ—ˆ์šฉย +  * ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ''localhost:3000'', ''localhost:8080''์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠน์ • ๋„๋ฉ”์ธ(''https://yourdomain.com'')๋งŒ ํ—ˆ์šฉ+  * ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠน์ • ๋„๋ฉ”์ธ(''https://yourdomain.com'')๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  
-=== 5) ์••์ถ• ๋ฐ ์š”์ฒญ ์ œํ•œ ์„ค์ • ===+==== 5) ์••์ถ• ๋ฐ ์š”์ฒญ ์ œํ•œ ์„ค์ • ====
  
-<code javascript>+<file javascript>
 // ์••์ถ• ๋ฏธ๋“ค์›จ์–ด // ์••์ถ• ๋ฏธ๋“ค์›จ์–ด
 app.use(compression()); app.use(compression());
์ค„ 109: ์ค„ 109:
 }); });
 app.use('/api/', limiter); app.use('/api/', limiter);
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''compression'' - ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์„œ ์ „์†ก ์†๋„ ํ–ฅ์ƒย +  * ''compression'' - ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์„œ ์ „์†ก ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.ย 
-  * ''rateLimit'' - ํ•œ ๋ฒˆ์— ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€+  * ''rateLimit'' - ํ•œ ๋ฒˆ์— ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  
-=== 6) ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ์„ค์ • ===+==== 6) ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ์„ค์ • ====
  
-<code javascript>+<file javascript>
 // JSON ํŒŒ์‹ฑ ๋ฏธ๋“ค์›จ์–ด // JSON ํŒŒ์‹ฑ ๋ฏธ๋“ค์›จ์–ด
 app.use(express.json({ limit: '10mb' })); app.use(express.json({ limit: '10mb' }));
 app.use(express.urlencoded({ extended: true, limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' }));
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''express.json()'' - ''JSON'' ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑย +  * ''express.json()'' - ''JSON'' ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''express.urlencoded()'' - ํผ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑย +  * ''express.urlencoded()'' - ํผ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''limit: '10mb''' - ์ตœ๋Œ€ ''10mb''๊นŒ์ง€ ํ—ˆ์šฉ+  * ''limit: '10mb''' - ์ตœ๋Œ€ ''10mb''๊นŒ์ง€ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  
-=== 7) ์ •์  ํŒŒ์ผ ์„œ๋น™ ์„ค์ • ===+==== 7) ์ •์  ํŒŒ์ผ ์„œ๋น™ ์„ค์ • ====
  
-<code javascript>+<file javascript>
 // ์ •์  ํŒŒ์ผ ์„œ๋น™ // ์ •์  ํŒŒ์ผ ์„œ๋น™
 app.use(express.static(path.join(__dirname, 'public'), { app.use(express.static(path.join(__dirname, 'public'), {
์ค„ 136: ์ค„ 136:
     etag: true     etag: true
 })); }));
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''public'' ํด๋”์˜ ํŒŒ์ผ๋“ค์„ ์›น์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จย +  * ''public'' ํด๋”์˜ ํŒŒ์ผ๋“ค์„ ์›น์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''maxAge: '1d''' - ํŒŒ์ผ์„ 1์ผ๊ฐ„ ์บ์‹œย +  * ''maxAge: '1d''' - ํŒŒ์ผ์„ 1์ผ๊ฐ„ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''etag: true'' - ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ์œ„ํ•œ ํƒœ๊ทธ ์‚ฌ์šฉ+  * ''etag: true'' - ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ์œ„ํ•œ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  
-=== 8) ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด ===+==== 8) ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด ====
  
-<code javascript>+<file javascript>
 // ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด // ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด
 app.use((req, res, next) => { app.use((req, res, next) => {
์ค„ 151: ์ค„ 151:
     next();     next();
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋กœ๊ทธ๋ฅผ ๋‚จ๊น€ย +  * ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋กœ๊ทธ๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค.ย 
-  * ์š”์ฒญ ์‹œ๊ฐ„, ๋ฐฉ๋ฒ•(''GET'', ''POST'' ๋“ฑ), ''URL''์„ ๊ธฐ๋กย +  * ์š”์ฒญ ์‹œ๊ฐ„, ๋ฐฉ๋ฒ•(''GET'', ''POST'' ๋“ฑ), ''URL''์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ๋””๋ฒ„๊น…์— ๋งค์šฐ ์œ ์šฉ+  * ๋””๋ฒ„๊น…์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  
 ---- ----
-==== 4. ๋ผ์šฐํŠธ ์„ค์ • ====+===== 4. ๋ผ์šฐํŠธ ์„ค์ • =====
  
-=== 1) ๋ผ์šฐํŠธ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ===+==== 1) ๋ผ์šฐํŠธ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ====
  
-<code javascript>+<file javascript>
 // ๋ผ์šฐํŠธ ์„ค์ • // ๋ผ์šฐํŠธ ์„ค์ •
 app.use('/api/games', require('./routes/games')); app.use('/api/games', require('./routes/games'));
 app.use('/api/users', require('./routes/users')); app.use('/api/users', require('./routes/users'));
 app.use('/api/statistics', require('./routes/statistics')); app.use('/api/statistics', require('./routes/statistics'));
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
์ค„ 175: ์ค„ 175:
   * ''/api/statistics'' - ํ†ต๊ณ„ ๊ด€๋ จ ''API''   * ''/api/statistics'' - ํ†ต๊ณ„ ๊ด€๋ จ ''API''
  
-=== 2) ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ผ์šฐํŠธ ===+==== 2) ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ผ์šฐํŠธ ====
  
-<code javascript>+<file javascript>
 // ๋ฉ”์ธ ํŽ˜์ด์ง€ // ๋ฉ”์ธ ํŽ˜์ด์ง€
 app.get('/', (req, res) => { app.get('/', (req, res) => {
     res.sendFile(path.join(__dirname, 'public', 'index.html'));     res.sendFile(path.join(__dirname, 'public', 'index.html'));
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ๋ฃจํŠธ ๊ฒฝ๋กœ(''/ '')๋กœ ์ ‘๊ทผํ•˜๋ฉด ''index.html'' ํŒŒ์ผ์„ ์ œ๊ณตย +  * ๋ฃจํŠธ ๊ฒฝ๋กœ(''/ '')๋กœ ์ ‘๊ทผํ•˜๋ฉด ''index.html'' ํŒŒ์ผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ์›น์‚ฌ์ดํŠธ์˜ ์ฒซ ํŽ˜์ด์ง€+  * ์›น์‚ฌ์ดํŠธ์˜ ์ฒซ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.
  
 ---- ----
-==== 5. ์—๋Ÿฌ ์ฒ˜๋ฆฌ ====+===== 5. ์—๋Ÿฌ ์ฒ˜๋ฆฌ =====
  
-=== 1) 404 ์—๋Ÿฌ ์ฒ˜๋ฆฌ ===+==== 1) 404 ์—๋Ÿฌ ์ฒ˜๋ฆฌ ====
  
-<code javascript>+<file javascript>
 // 404 ์—๋Ÿฌ ์ฒ˜๋ฆฌ // 404 ์—๋Ÿฌ ์ฒ˜๋ฆฌ
 app.use((req, res) => { app.use((req, res) => {
     res.status(404).json({ error: 'ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.' });     res.status(404).json({ error: 'ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.' });
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ๋•Œ ์‹คํ–‰ย +  * ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ๋•Œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.ย 
-  * ''404'' ์ƒํƒœ ์ฝ”๋“œ์™€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜+  * ''404'' ์ƒํƒœ ์ฝ”๋“œ์™€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  
-=== 2) ์„œ๋ฒ„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ===+==== 2) ์„œ๋ฒ„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ====
  
-<code javascript>+<file javascript>
 // ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฏธ๋“ค์›จ์–ด // ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฏธ๋“ค์›จ์–ด
 app.use((err, req, res, next) => { app.use((err, req, res, next) => {
์ค„ 212: ์ค„ 212:
     res.status(500).json({ error: '์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.' });     res.status(500).json({ error: '์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.' });
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌย +  * ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅย +  * ์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋Š” ์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ „์†ก+  * ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋Š” ์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  
 ---- ----
-==== 6. ๊ฒŒ์ž„ ๋ผ์šฐํŠธ ์˜ˆ์ œ ====+===== 6. ๊ฒŒ์ž„ ๋ผ์šฐํŠธ ์˜ˆ์ œ =====
  
-=== 1) ๊ฒŒ์ž„ ๋ผ์šฐํŠธ ๊ธฐ๋ณธ ๊ตฌ์กฐ ===+==== 1) ๊ฒŒ์ž„ ๋ผ์šฐํŠธ ๊ธฐ๋ณธ ๊ตฌ์กฐ ====
  
-<code javascript>+<file javascript>
 const express = require('express'); const express = require('express');
 const router = express.Router(); const router = express.Router();
 const BadukGameController = require('../controllers/BadukGameController'); const BadukGameController = require('../controllers/BadukGameController');
 const auth = require('../middleware/auth'); const auth = require('../middleware/auth');
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
์ค„ 236: ์ค„ 236:
   * ''auth'' - ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด   * ''auth'' - ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด
  
-=== 2) ๊ฒŒ์ž„ ๋ชฉ๋ก ์กฐํšŒ ===+==== 2) ๊ฒŒ์ž„ ๋ชฉ๋ก ์กฐํšŒ ====
  
-<code javascript>+<file javascript>
 // ๊ฒŒ์ž„ ๋ชฉ๋ก ์กฐํšŒ // ๊ฒŒ์ž„ ๋ชฉ๋ก ์กฐํšŒ
 router.get('/', async (req, res) => { router.get('/', async (req, res) => {
์ค„ 255: ์ค„ 255:
     }     }
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''GET /api/games'' - ๋ชจ๋“  ๊ฒŒ์ž„ ๋ชฉ๋ก์„ ์กฐํšŒย +  * ''GET /api/games'' - ๋ชจ๋“  ๊ฒŒ์ž„ ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''try-catch'' - ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ตฌ๋ฌธย +  * ''try-catch'' - ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.ย 
-  * ์„ฑ๊ณต ์‹œ ๊ฒŒ์ž„ ๋ชฉ๋ก๊ณผ ์ด ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜ย +  * ์„ฑ๊ณต ์‹œ ๊ฒŒ์ž„ ๋ชฉ๋ก๊ณผ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ์‹คํŒจ ์‹œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜+  * ์‹คํŒจ ์‹œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  
-=== 3) ์ƒˆ ๊ฒŒ์ž„ ์ƒ์„ฑ ===+==== 3) ์ƒˆ ๊ฒŒ์ž„ ์ƒ์„ฑ ====
  
-<code javascript>+<file javascript>
 // ์ƒˆ ๊ฒŒ์ž„ ์ƒ์„ฑ // ์ƒˆ ๊ฒŒ์ž„ ์ƒ์„ฑ
 router.post('/', auth, async (req, res) => { router.post('/', auth, async (req, res) => {
์ค„ 283: ์ค„ 283:
     }     }
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''POST /api/games'' - ์ƒˆ๋กœ์šด ๊ฒŒ์ž„์„ ์ƒ์„ฑย +  * ''POST /api/games'' - ์ƒˆ๋กœ์šด ๊ฒŒ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''auth'' - ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅย +  * ''auth'' - ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''req.body'' - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐย +  * ''req.body'' - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.ย 
-  * ''201'' - ์ƒ์„ฑ ์„ฑ๊ณต ์ƒํƒœ ์ฝ”๋“œ+  * ''201'' - ์ƒ์„ฑ ์„ฑ๊ณต ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
  
-=== 4) ํŠน์ • ๊ฒŒ์ž„ ์กฐํšŒ ===+==== 4) ํŠน์ • ๊ฒŒ์ž„ ์กฐํšŒ ====
  
-<code javascript>+<file javascript>
 // ํŠน์ • ๊ฒŒ์ž„ ์กฐํšŒ // ํŠน์ • ๊ฒŒ์ž„ ์กฐํšŒ
 router.get('/:gameId', async (req, res) => { router.get('/:gameId', async (req, res) => {
์ค„ 317: ์ค„ 317:
     }     }
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''GET /api/games/:gameId'' - ํŠน์ • ๊ฒŒ์ž„ ์ •๋ณด ์กฐํšŒย +  * ''GET /api/games/:gameId'' - ํŠน์ • ๊ฒŒ์ž„ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''req.params.gameId'' - ''URL''์—์„œ ๊ฒŒ์ž„ ''ID'' ์ถ”์ถœย +  * ''req.params.gameId'' - ''URL''์—์„œ ๊ฒŒ์ž„ ''ID''๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ๊ฒŒ์ž„์ด ์—†์œผ๋ฉด ''404'' ์—๋Ÿฌ ๋ฐ˜ํ™˜+  * ๊ฒŒ์ž„์ด ์—†์œผ๋ฉด ''404'' ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  
-=== 5) ๊ฒŒ์ž„ ์ฐธ๊ฐ€ ===+==== 5) ๊ฒŒ์ž„ ์ฐธ๊ฐ€ ====
  
-<code javascript>+<file javascript>
 // ๊ฒŒ์ž„ ์ฐธ๊ฐ€ // ๊ฒŒ์ž„ ์ฐธ๊ฐ€
 router.post('/:gameId/join', auth, async (req, res) => { router.post('/:gameId/join', auth, async (req, res) => {
์ค„ 346: ์ค„ 346:
     }     }
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''POST /api/games/:gameId/join'' - ํŠน์ • ๊ฒŒ์ž„์— ์ฐธ๊ฐ€ย +  * ''POST /api/games/:gameId/join'' - ํŠน์ • ๊ฒŒ์ž„์— ์ฐธ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ''req.params.gameId'' - ''URL''์—์„œ ๊ฒŒ์ž„ ''ID''ย +  * ''req.params.gameId'' - ''URL''์—์„œ ๊ฒŒ์ž„ ''ID''๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.ย 
-  * ''req.body.playerName'' - ์š”์ฒญ ๋ณธ๋ฌธ์—์„œ ํ”Œ๋ ˆ์ด์–ด ์ด๋ฆ„+  * ''req.body.playerName'' - ์š”์ฒญ ๋ณธ๋ฌธ์—์„œ ํ”Œ๋ ˆ์ด์–ด ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  
-=== 6) ๊ฒŒ์ž„ ์ด๋™ ๊ธฐ๋ก ===+==== 6) ๊ฒŒ์ž„ ์ด๋™ ๊ธฐ๋ก ====
  
-<code javascript>+<file javascript>
 // ๊ฒŒ์ž„ ์ด๋™ ๊ธฐ๋ก // ๊ฒŒ์ž„ ์ด๋™ ๊ธฐ๋ก
 router.post('/:gameId/move', auth, async (req, res) => { router.post('/:gameId/move', auth, async (req, res) => {
์ค„ 375: ์ค„ 375:
     }     }
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ''POST /api/games/:gameId/move'' - ๊ฒŒ์ž„์—์„œ ๋Œ์„ ๋†“์Œย +  * ''POST /api/games/:gameId/move'' - ๊ฒŒ์ž„์—์„œ ๋Œ์„ ๋†“์Šต๋‹ˆ๋‹ค.ย 
-  * ''x, y'' - ๋ฐ”๋‘‘ํŒ์˜ ์ขŒํ‘œย +  * ''x, y'' - ๋ฐ”๋‘‘ํŒ์˜ ์ขŒํ‘œ์ž…๋‹ˆ๋‹ค.ย 
-  * ''player'' - ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด+  * ''player'' - ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  
 ---- ----
-==== 7. ์„œ๋ฒ„ ์‹คํ–‰ ====+===== 7. ์„œ๋ฒ„ ์‹คํ–‰ =====
  
-=== 1) ์„œ๋ฒ„ ์‹œ์ž‘ ===+==== 1) ์„œ๋ฒ„ ์‹œ์ž‘ ====
  
-<code javascript>+<file javascript>
 // ์„œ๋ฒ„ ์‹œ์ž‘ // ์„œ๋ฒ„ ์‹œ์ž‘
 app.listen(PORT, () => { app.listen(PORT, () => {
์ค„ 393: ์ค„ 393:
     console.log(`http://localhost:${PORT}์—์„œ ์ ‘์†ํ•˜์„ธ์š”.`);     console.log(`http://localhost:${PORT}์—์„œ ์ ‘์†ํ•˜์„ธ์š”.`);
 }); });
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ์ง€์ •๋œ ํฌํŠธ์—์„œ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ย +  * ์ง€์ •๋œ ํฌํŠธ์—์„œ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ+  * ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  
-=== 2) ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ธฐ ===+==== 2) ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ธฐ ====
  
-<code javascript>+<file javascript>
 module.exports = app; module.exports = app;
-</code>+</file>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์ด ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ณด๋‚ด๊ธฐย +  * ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์ด ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.ย 
-  * ํ…Œ์ŠคํŠธ๋‚˜ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”+  * ํ…Œ์ŠคํŠธ๋‚˜ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  
 ---- ----
-==== 8. ์‹ค์Šต ์˜ˆ์ œ ====+===== 8. ์‹ค์Šต ์˜ˆ์ œ =====
  
-=== 1) ๊ฐ„๋‹จํ•œ Express ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ===+==== 1) ๊ฐ„๋‹จํ•œ Express ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ====
  
 **1๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”** **1๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”**
-<code bash>+<file bash>
 npm init -y npm init -y
 npm install express npm install express
-</code>+</file>
  
 **2๋‹จ๊ณ„: ๊ธฐ๋ณธ ์„œ๋ฒ„ ํŒŒ์ผ ์ƒ์„ฑ (''app.js'')** **2๋‹จ๊ณ„: ๊ธฐ๋ณธ ์„œ๋ฒ„ ํŒŒ์ผ ์ƒ์„ฑ (''app.js'')**
-<code javascript>+<file javascript>
 const express = require('express'); const express = require('express');
 const app = express(); const app = express();
์ค„ 445: ์ค„ 445:
     console.log(`์„œ๋ฒ„๊ฐ€ ํฌํŠธ ${PORT}์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.`);     console.log(`์„œ๋ฒ„๊ฐ€ ํฌํŠธ ${PORT}์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.`);
 }); });
-</code>+</file>
  
 **3๋‹จ๊ณ„: ์„œ๋ฒ„ ์‹คํ–‰** **3๋‹จ๊ณ„: ์„œ๋ฒ„ ์‹คํ–‰**
-<code bash>+<file bash>
 node app.js node app.js
-</code>+</file>
  
 **4๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ** **4๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ**
์ค„ 457: ์ค„ 457:
  
 ---- ----
-==== 9. ์ฃผ์˜์‚ฌํ•ญ๊ณผ ํŒ ====+===== 9. ์ฃผ์˜์‚ฌํ•ญ๊ณผ ํŒ =====
  
-=== 1) ๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ ===ย +==== 1) ๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ ====ย 
-  * ํ•ญ์ƒ ''helmet'' ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”ย +  * ํ•ญ์ƒ ''helmet'' ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”ย +  * ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.ย 
-  * ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”ย +  * ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”.ย 
-  * ''HTTPS''๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”+  * ''HTTPS''๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  
-=== 2) ์„ฑ๋Šฅ ์ตœ์ ํ™” ===ย +==== 2) ์„ฑ๋Šฅ ์ตœ์ ํ™” ====ย 
-  * ''compression'' ๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉย +  * ''compression'' ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ์ •์  ํŒŒ์ผ ์บ์‹ฑ ์„ค์ •ย +  * ์ •์  ํŒŒ์ผ ์บ์‹ฑ์„ ์„ค์ •ํ•˜์„ธ์š”.ย 
-  * ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€ ์‚ฌ์šฉย +  * ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€์„ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ๋ถˆํ•„์š”ํ•œ ๋ฏธ๋“ค์›จ์–ด ์ œ๊ฑฐ+  * ๋ถˆํ•„์š”ํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ œ๊ฑฐํ•˜์„ธ์š”.
  
-=== 3) ๋””๋ฒ„๊น… ํŒ ===ย +==== 3) ๋””๋ฒ„๊น… ํŒ ====ย 
-  * ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉย +  * ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€ย +  * ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.ย 
-  * ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œย +  * ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์„ธ์š”.ย 
-  * ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ+  * ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์„ธ์š”.
  
 ---- ----
-==== 10. ๋‹ค์Œ ๋‹จ๊ณ„ ====+===== 10. ๋‹ค์Œ ๋‹จ๊ณ„ =====
  
 ''Express.js'' ๊ธฐ๋ณธ์„ ๋ฐฐ์› ๋‹ค๋ฉด ๋‹ค์Œ์„ ํ•™์Šตํ•ด๋ณด์„ธ์š”: ''Express.js'' ๊ธฐ๋ณธ์„ ๋ฐฐ์› ๋‹ค๋ฉด ๋‹ค์Œ์„ ํ•™์Šตํ•ด๋ณด์„ธ์š”:
์ค„ 494: ์ค„ 494:
  
 --- ---
-//์ด ํŽ˜์ด์ง€๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.// +//์ด ํŽ˜์ด์ง€๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.//
 --- ---
 +
wiki/it/dream_of_enc/metaverse/express.1753771634.txt.gz ยท ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋จ: ์ €์ž syjang0803

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki