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

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


wiki:it:dream_of_enc:metaverse:express

์ฐจ์ด

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

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

๋‹ค์Œ ํŒ
์ด์ „ ํŒ
wiki:it:dream_of_enc:metaverse:express [2025/07/29 06:44] โ€“ ๋งŒ๋“ฆ - ๋ฐ”๊นฅ ํŽธ์ง‘ 127.0.0.1wiki:it:dream_of_enc:metaverse:express [2025/07/30 06:43] (ํ˜„์žฌ) โ€“ ๋ฐ”๊นฅ ํŽธ์ง‘ 127.0.0.1
์ค„ 1: ์ค„ 1:
 ====== ๐Ÿš€ Express.js ์›น ํ”„๋ ˆ์ž„์›Œํฌ ====== ====== ๐Ÿš€ Express.js ์›น ํ”„๋ ˆ์ž„์›Œํฌ ======
  
-Phaser Baduk Metaverse ํ”„๋กœ์ ํŠธ์˜ Express.js ์›น ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.+Phaser Baduk Metaverse ํ”„๋กœ์ ํŠธ์˜ ''Express.js'' ์›น ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  
 ---- ----
-==== 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 ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ:**
-  * `server.js- ๋ฉ”์ธ ์„œ๋ฒ„ ํŒŒ์ผย +  * ''server.js'' - ๋ฉ”์ธ ์„œ๋ฒ„ ํŒŒ์ผย 
-  * `routes/- ๋ผ์šฐํŠธ(URL ๊ฒฝ๋กœ) ๊ด€๋ฆฌ ํด๋”ย +  * ''routes/'' - ๋ผ์šฐํŠธ(URL ๊ฒฝ๋กœ) ๊ด€๋ฆฌ ํด๋”ย 
-  * `controllers/- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ด€๋ฆฌ ํด๋”ย +  * ''controllers/'' - ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ด€๋ฆฌ ํด๋”ย 
-  * `middleware/- ๋ฏธ๋“ค์›จ์–ด(์ค‘๊ฐ„ ์ฒ˜๋ฆฌ) ํด๋”ย +  * ''middleware/'' - ๋ฏธ๋“ค์›จ์–ด(์ค‘๊ฐ„ ์ฒ˜๋ฆฌ) ํด๋”ย 
-  * `public/- ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•  ํŒŒ์ผ๋“ค+  * ''public/'' - ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•  ํŒŒ์ผ๋“ค
  
 ---- ----
-==== 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>
  
 **๊ฐ ๋ชจ๋“ˆ์˜ ์—ญํ• :** **๊ฐ ๋ชจ๋“ˆ์˜ ์—ญํ• :**
-  * `express- ์›น ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌย +  * ''express'' - ์›น ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌย 
-  * `path- ํŒŒ์ผ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌย +  * ''path'' - ํŒŒ์ผ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌย 
-  * `cors- ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ์˜ ์ ‘๊ทผ ํ—ˆ์šฉย +  * ''cors'' - ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ์˜ ์ ‘๊ทผ ํ—ˆ์šฉย 
-  * `helmet- ๋ณด์•ˆ ๊ฐ•ํ™”ย +  * ''helmet'' - ๋ณด์•ˆ ๊ฐ•ํ™”ย 
-  * `compression- ํŒŒ์ผ ์••์ถ•ย +  * ''compression'' - ํŒŒ์ผ ์••์ถ•ย 
-  * `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>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * `app- Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šคย +  * ''app'' - Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šคย 
-  * `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''์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.ย 
-  * ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠน์ • ๋„๋ฉ”์ธ๋งŒ ํ—ˆ์šฉ+  * ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠน์ • ๋„๋ฉ”์ธ(''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>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * `/api/games- ๊ฒŒ์ž„ ๊ด€๋ จ APIย +  * ''/api/games'' - ๊ฒŒ์ž„ ๊ด€๋ จ ''API''ย 
-  * `/api/users- ์‚ฌ์šฉ์ž ๊ด€๋ จ APIย +  * ''/api/users'' - ์‚ฌ์šฉ์ž ๊ด€๋ จ ''API''ย 
-  * `/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>
  
 **์„ค๋ช…:** **์„ค๋ช…:**
-  * `express.Router()- ๋ผ์šฐํ„ฐ ๊ฐ์ฒด ์ƒ์„ฑย +  * ''express.Router()'' - ๋ผ์šฐํ„ฐ ๊ฐ์ฒด ์ƒ์„ฑย 
-  * `BadukGameController- ๊ฒŒ์ž„ ๊ด€๋ จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์งย +  * ''BadukGameController'' - ๊ฒŒ์ž„ ๊ด€๋ จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์งย 
-  * `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๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ**
-  * ๋ธŒ๋ผ์šฐ์ €์—์„œ `http://localhost:3000์ ‘์†ย +  * ๋ธŒ๋ผ์šฐ์ €์—์„œ ''http://localhost:3000'' ์ ‘์†ย 
-  * `http://localhost:3000/api/users์ ‘์†+  * ''http://localhost:3000/api/users'' ์ ‘์†
  
 ---- ----
-==== 9. ์ฃผ์˜์‚ฌํ•ญ๊ณผ ํŒ ====+===== 9. ์ฃผ์˜์‚ฌํ•ญ๊ณผ ํŒ =====
  
-=== 1) ๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ ===ย +==== 1) ๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ ====ย 
-  * ํ•ญ์ƒ `helmet๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”ย +  * ํ•ญ์ƒ ''helmet'' ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”ย +  * ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.ย 
-  * ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”ย +  * ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”.ย 
-  * HTTPS๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”+  * ''HTTPS''๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  
-=== 2) ์„ฑ๋Šฅ ์ตœ์ ํ™” ===ย +==== 2) ์„ฑ๋Šฅ ์ตœ์ ํ™” ====ย 
-  * `compression๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉย +  * ''compression'' ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ์ •์  ํŒŒ์ผ ์บ์‹ฑ ์„ค์ •ย +  * ์ •์  ํŒŒ์ผ ์บ์‹ฑ์„ ์„ค์ •ํ•˜์„ธ์š”.ย 
-  * ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€ ์‚ฌ์šฉย +  * ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€์„ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ๋ถˆํ•„์š”ํ•œ ๋ฏธ๋“ค์›จ์–ด ์ œ๊ฑฐ+  * ๋ถˆํ•„์š”ํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ œ๊ฑฐํ•˜์„ธ์š”.
  
-=== 3) ๋””๋ฒ„๊น… ํŒ ===ย +==== 3) ๋””๋ฒ„๊น… ํŒ ====ย 
-  * ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉย +  * ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.ย 
-  * ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€ย +  * ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.ย 
-  * ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œย +  * ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์„ธ์š”.ย 
-  * ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ+  * ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์„ธ์š”.
  
 ---- ----
-==== 10. ๋‹ค์Œ ๋‹จ๊ณ„ ====+===== 10. ๋‹ค์Œ ๋‹จ๊ณ„ =====
  
-Express.js ๊ธฐ๋ณธ์„ ๋ฐฐ์› ๋‹ค๋ฉด ๋‹ค์Œ์„ ํ•™์Šตํ•ด๋ณด์„ธ์š”:+''Express.js'' ๊ธฐ๋ณธ์„ ๋ฐฐ์› ๋‹ค๋ฉด ๋‹ค์Œ์„ ํ•™์Šตํ•ด๋ณด์„ธ์š”:
  
-  * **Socket.IO** - ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ตฌํ˜„ย +  * **''Socket.IO''** - ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ตฌํ˜„ย 
-  * **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™** - MongoDB, MySQL ๋“ฑย +  * **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™** - ''MongoDB''''MySQL'' ๋“ฑย 
-  * **์ธ์ฆ ์‹œ์Šคํ…œ** - JWT, Passport.js ๋“ฑย +  * **์ธ์ฆ ์‹œ์Šคํ…œ** - ''JWT''''Passport.js'' ๋“ฑย 
-  * **ํŒŒ์ผ ์—…๋กœ๋“œ** - Multer ๋ฏธ๋“ค์›จ์–ดย +  * **ํŒŒ์ผ ์—…๋กœ๋“œ** - ''Multer'' ๋ฏธ๋“ค์›จ์–ดย 
-  * **API ๋ฌธ์„œํ™”** - Swagger ๋“ฑ+  * **''API'' ๋ฌธ์„œํ™”** - ''Swagger'' ๋“ฑ
  
 **์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ:** **์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ:**
-  1. [[wiki:it:dream_of_enc:metaverse:nodejs|๐ŸŸข Node.js ๋ฐฑ์—”๋“œ ์„ค์ •]]ย +  [[wiki:it:dream_of_enc:metaverse:nodejs|๐ŸŸข Node.js ๋ฐฑ์—”๋“œ ์„ค์ •]]ย 
-  2. [[wiki:it:dream_of_enc:metaverse:socketio|๐Ÿ”Œ Socket.IO ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ]]ย +  [[wiki:it:dream_of_enc:metaverse:socketio|๐Ÿ”Œ Socket.IO ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ]]ย 
-  3. [[wiki:it:dream_of_enc:metaverse:game_logic|๐Ÿง  ๋ฐ”๋‘‘ ๊ฒŒ์ž„ ๋กœ์ง]]+  [[wiki:it:dream_of_enc:metaverse:game_logic|๐Ÿง  ๋ฐ”๋‘‘ ๊ฒŒ์ž„ ๋กœ์ง]]
  
 --- ---
-//์ด ํŽ˜์ด์ง€๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.// +//์ด ํŽ˜์ด์ง€๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.//ย 
 +---ย 
wiki/it/dream_of_enc/metaverse/express.1753771452.txt.gz ยท ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋จ: ์ €์ž 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki