elimgweb

๐Ÿ› ๏ธ ์—˜๋ฆผG์„ ๊ตํšŒ ์›น์‚ฌ์ดํŠธ ์ˆ˜์ • ๊ฐ€์ด๋“œ

๐Ÿ“‹ ๋ชฉ์ฐจ

  1. ๋น ๋ฅธ ์ˆ˜์ • ๋ฐฉ๋ฒ•
  2. ํŒŒ์ผ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ
  3. ์ฃผ์š” ์ˆ˜์ • ํ•ญ๋ชฉ
  4. ๊ณ ๊ธ‰ ์ˆ˜์ •
  5. ์ˆ˜์ • ํ›„ ๋ฐฐํฌ

๐Ÿš€ ๋น ๋ฅธ ์ˆ˜์ • ๋ฐฉ๋ฒ•

๋ฐฉ๋ฒ• 1: GitHub์—์„œ ์ง์ ‘ ์ˆ˜์ • (๊ฐ€์žฅ ์‰ฌ์›€!)

  1. GitHub ์ €์žฅ์†Œ ์ ‘์†
    • https://github.com/JinJun-han/elimgweb
  2. ํŒŒ์ผ ์ฐพ๊ธฐ
    • ์ˆ˜์ •ํ•  ํŒŒ์ผ์„ ํด๋ฆญ (์˜ˆ: public/index.html)
  3. ํŽธ์ง‘ ๋ฒ„ํŠผ ํด๋ฆญ
    • ํŒŒ์ผ ์šฐ์ธก ์ƒ๋‹จ์˜ ์—ฐํ•„ ์•„์ด์ฝ˜ (โœ๏ธ) ํด๋ฆญ
  4. ๋‚ด์šฉ ์ˆ˜์ •
    • ์›ํ•˜๋Š” ๋‚ด์šฉ ์ˆ˜์ •
  5. ์ €์žฅ (์ปค๋ฐ‹)
    • ํŽ˜์ด์ง€ ํ•˜๋‹จ โ€œCommit changesโ€ ๋ฒ„ํŠผ ํด๋ฆญ
    • ์ˆ˜์ • ๋‚ด์šฉ ๊ฐ„๋‹จํžˆ ์ž…๋ ฅ (์˜ˆ: โ€œ๋กœ๊ณ  ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝโ€)
  6. ์ž๋™ ๋ฐฐํฌ
    • Railway/Vercel ๋“ฑ์— ์—ฐ๊ฒฐํ–ˆ๋‹ค๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋จ
    • 1-2๋ถ„ ํ›„ ์›น์‚ฌ์ดํŠธ์— ๋ฐ˜์˜

๋ฐฉ๋ฒ• 2: ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์ˆ˜์ •

1๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ๋‹ค์šด๋กœ๋“œ

# Git ์„ค์น˜ ํ›„ ์‹คํ–‰
git clone https://github.com/JinJun-han/elimgweb.git
cd elimgweb

2๋‹จ๊ณ„: ์—๋””ํ„ฐ๋กœ ์—ด๊ธฐ

์ถ”์ฒœ ์—๋””ํ„ฐ:

3๋‹จ๊ณ„: ํŒŒ์ผ ์ˆ˜์ •

4๋‹จ๊ณ„: ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ

# ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰
npm install        # ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ
npm run init       # ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ
npm run dev        # ์„œ๋ฒ„ ์‹œ์ž‘

# ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด๊ธฐ
http://localhost:3000

5๋‹จ๊ณ„: GitHub์— ์—…๋กœ๋“œ

git add .
git commit -m "์ˆ˜์ • ๋‚ด์šฉ ์„ค๋ช…"
git push origin main

๐Ÿ“ ํŒŒ์ผ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ

elimgweb/
โ”œโ”€โ”€ public/
โ”‚   โ””โ”€โ”€ index.html          โญ ๋ฉ”์ธ ์›นํŽ˜์ด์ง€ (์—ฌ๊ธฐ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์ˆ˜์ •)
โ”œโ”€โ”€ server/
โ”‚   โ”œโ”€โ”€ index.js            โญ ์„œ๋ฒ„ ๋ฉ”์ธ ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ routes/
โ”‚   โ”‚   โ”œโ”€โ”€ api.js          โญ API ์—”๋“œํฌ์ธํŠธ
โ”‚   โ”‚   โ””โ”€โ”€ admin.js        โญ ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ””โ”€โ”€ database.js     ๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ
โ”‚   โ””โ”€โ”€ init-db.js          ๐Ÿ”ง ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ •
โ”œโ”€โ”€ i18n/
โ”‚   โ”œโ”€โ”€ ko.json             ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ
โ”‚   โ”œโ”€โ”€ en.json             ๐Ÿ‡บ๐Ÿ‡ธ ์˜์–ด ๋ฒˆ์—ญ
โ”‚   โ””โ”€โ”€ vi.json             ๐Ÿ‡ป๐Ÿ‡ณ ๋ฒ ํŠธ๋‚จ์–ด ๋ฒˆ์—ญ
โ”œโ”€โ”€ .env                    โš™๏ธ ํ™˜๊ฒฝ ์„ค์ • (๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ)
โ”œโ”€โ”€ package.json            ๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ์ •๋ณด
โ””โ”€โ”€ README.md               ๐Ÿ“– ํ”„๋กœ์ ํŠธ ์„ค๋ช…

๐ŸŽฏ ์ž์ฃผ ์ˆ˜์ •ํ•˜๋Š” ํŒŒ์ผ

ํŒŒ์ผ ์ˆ˜์ • ๋‚ด์šฉ ๋‚œ์ด๋„
public/index.html ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ๋””์ž์ธ โญ ์‰ฌ์›€
i18n/ko.json ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ โญ ์‰ฌ์›€
server/init-db.js ์ดˆ๊ธฐ ๋‰ด์Šค/๋ฐ์ดํ„ฐ โญโญ ๋ณดํ†ต
.env ๋น„๋ฐ€๋ฒˆํ˜ธ, ์„ค์ • โญโญ ๋ณดํ†ต
server/routes/api.js API ๊ธฐ๋Šฅ ์ถ”๊ฐ€ โญโญโญ ์–ด๋ ค์›€

โœ๏ธ ์ฃผ์š” ์ˆ˜์ • ํ•ญ๋ชฉ

1. ํ…์ŠคํŠธ ์ˆ˜์ • (๊ฐ€์žฅ ์‰ฌ์›€!)

ํŒŒ์ผ: public/index.html

์˜ˆ์‹œ 1: ๋ฉ”์ธ ์ œ๋ชฉ ๋ณ€๊ฒฝ

์ฐพ๊ธฐ:

<h1 class="hero-title">์„ธ์ƒ์„ ํ–ฅํ•œ ํ•˜๋‚˜๋‹˜์˜ ์‚ฌ๋ž‘</h1>

์ˆ˜์ •:

<h1 class="hero-title">์‚ฌ๋ž‘์œผ๋กœ ์„ฌ๊ธฐ๋Š” ๊ธ€๋กœ์ปฌ ์„ ๊ต</h1>

์˜ˆ์‹œ 2: ์†Œ๊ฐœ ๋ฌธ๊ตฌ ๋ณ€๊ฒฝ

์ฐพ๊ธฐ:

<p class="hero-subtitle">๊ธ€๋กœ์ปฌ ์„ ๊ต์™€ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ ๋ณต์Œ์„ ์ „ํ•ฉ๋‹ˆ๋‹ค</p>

์ˆ˜์ •:

<p class="hero-subtitle">์ด์ฃผ๋ฏผ๊ณผ ํ•จ๊ป˜ ํ•˜๋‚˜๋‹˜ ๋‚˜๋ผ๋ฅผ ์„ธ์›๋‹ˆ๋‹ค</p>

2. ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ

ํŒŒ์ผ: public/index.html

์˜ˆ์‹œ 1: ๋กœ๊ณ  ๋ณ€๊ฒฝ

์ฐพ๊ธฐ:

<img src="https://via.placeholder.com/150x50/4A90E2/ffffff?text=ELIM+G" alt="์—˜๋ฆผG์„ ๊ตํšŒ">

์ˆ˜์ •: (๋ณธ์ธ ์ด๋ฏธ์ง€ URL๋กœ ๊ต์ฒด)

<img src="https://elimg.com/logo.png" alt="์—˜๋ฆผG์„ ๊ตํšŒ">

์˜ˆ์‹œ 2: ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ

์ฐพ๊ธฐ:

.hero {
  background: url('https://images.unsplash.com/photo-1517486808906-6ca8b3f04846');
}

์ˆ˜์ •:

.hero {
  background: url('https://elimg.com/hero-background.jpg');
}

3. ์ƒ‰์ƒ ๋ณ€๊ฒฝ

ํŒŒ์ผ: public/index.html์˜ <style> ์„น์…˜

๋ฉ”์ธ ์ƒ‰์ƒ ๋ณ€๊ฒฝ

์ฐพ๊ธฐ:

:root {
  --primary-color: #4A90E2;
  --secondary-color: #50C878;
}

์ˆ˜์ •: (์›ํ•˜๋Š” ์ƒ‰์ƒ ์ฝ”๋“œ๋กœ)

:root {
  --primary-color: #FF6B6B;  /* ๋นจ๊ฐ„์ƒ‰ ๊ณ„์—ด */
  --secondary-color: #4ECDC4; /* ์ฒญ๋ก์ƒ‰ ๊ณ„์—ด */
}

๐Ÿ’ก ์ƒ‰์ƒ ์ฝ”๋“œ ์ฐพ๊ธฐ: https://htmlcolorcodes.com/


4. ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด ๋ณ€๊ฒฝ

ํŒŒ์ผ: public/index.html

์˜ˆ์‹œ: ์ „ํ™”๋ฒˆํ˜ธ ๋ณ€๊ฒฝ

์ฐพ๊ธฐ:

<p>๐Ÿ“ž 010-2083-3106</p>

์ˆ˜์ •:

<p>๐Ÿ“ž 010-1234-5678</p>

์˜ˆ์‹œ: ์ด๋ฉ”์ผ ๋ณ€๊ฒฝ

์ฐพ๊ธฐ:

<p>โœ‰๏ธ kodhjj@gmail.com</p>

์ˆ˜์ •:

<p>โœ‰๏ธ contact@elimg.com</p>

5. ํ›„์› ๊ณ„์ขŒ ๋ณ€๊ฒฝ

ํŒŒ์ผ: public/index.html

์ฐพ๊ธฐ:

<div class="account-number" id="accountNumber">
  301-0296-7179-91
</div>

์ˆ˜์ •:

<div class="account-number" id="accountNumber">
  123-456-7890-12
</div>

6. ๋‰ด์Šค/๊ณต์ง€์‚ฌํ•ญ ์ถ”๊ฐ€

ํŒŒ์ผ: server/init-db.js

์ฐพ๊ธฐ:

const sampleNews = [
  {
    title_ko: '๊ฑฐ์ œ ์ฐธ๋น›ํž๋ง์„ผํ„ฐ ๊ฐœ์†Œ์‹',
    // ...
  }
];

์ถ”๊ฐ€:

const sampleNews = [
  {
    title_ko: '๊ฑฐ์ œ ์ฐธ๋น›ํž๋ง์„ผํ„ฐ ๊ฐœ์†Œ์‹',
    // ... ๊ธฐ์กด ๋‚ด์šฉ
  },
  {
    title_ko: '์ƒˆ๋กœ์šด ์†Œ์‹ ์ œ๋ชฉ',
    title_en: 'New News Title',
    title_vi: 'Tiรชu ฤ‘แป tin mแป›i',
    content_ko: '์ƒˆ๋กœ์šด ์†Œ์‹ ๋‚ด์šฉ...',
    content_en: 'New news content...',
    content_vi: 'Nแป™i dung tin mแป›i...',
    category: '๊ณต์ง€',
    author: '๊ด€๋ฆฌ์ž',
    image_url: 'https://images.unsplash.com/photo-xxx'
  }
];

์ ์šฉ:

npm run init  # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฌ์ดˆ๊ธฐํ™”

7. ๋‹ค๊ตญ์–ด ๋ฒˆ์—ญ ์ˆ˜์ •

ํŒŒ์ผ: i18n/ko.json, i18n/en.json, i18n/vi.json

ํ•œ๊ตญ์–ด ์ˆ˜์ • (i18n/ko.json)

์ฐพ๊ธฐ:

{
  "nav": {
    "home": "ํ™ˆ",
    "about": "์†Œ๊ฐœ"
  }
}

์ˆ˜์ •:

{
  "nav": {
    "home": "๋ฉ”์ธ",
    "about": "์šฐ๋ฆฌ๋Š”"
  }
}

8. FAQ ์ˆ˜์ •

ํŒŒ์ผ: public/index.html

์ฐพ๊ธฐ:

<div class="faq-item">
  <div class="faq-question">
    <h3>Q. ํ›„์›๊ธˆ์€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋‚˜์š”?</h3>
    <span class="faq-icon">+</span>
  </div>
  <div class="faq-answer">
    <p>ํ›„์›๊ธˆ์€ 100% ์ด์ฃผ๋ฏผ ์ง€์› ์‚ฌ์—ญ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค...</p>
  </div>
</div>

์ˆ˜์ •/์ถ”๊ฐ€:

<div class="faq-item">
  <div class="faq-question">
    <h3>Q. ์ƒˆ๋กœ์šด ์งˆ๋ฌธ ์ œ๋ชฉ?</h3>
    <span class="faq-icon">+</span>
  </div>
  <div class="faq-answer">
    <p>์ƒˆ๋กœ์šด ๋‹ต๋ณ€ ๋‚ด์šฉ์„ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค...</p>
  </div>
</div>

๐ŸŽจ ๊ณ ๊ธ‰ ์ˆ˜์ •

1. ์ƒˆ๋กœ์šด ์„น์…˜ ์ถ”๊ฐ€

ํŒŒ์ผ: public/index.html

์ถ”๊ฐ€ํ•  ์œ„์น˜ ์ฐพ๊ธฐ (์˜ˆ: FAQ ์„น์…˜ ๋‹ค์Œ)

</section> <!-- FAQ ๋ -->

<!-- ์—ฌ๊ธฐ์— ์ƒˆ ์„น์…˜ ์ถ”๊ฐ€ -->
<section class="my-new-section">
  <div class="container">
    <h2>์ƒˆ๋กœ์šด ์„น์…˜ ์ œ๋ชฉ</h2>
    <p>๋‚ด์šฉ...</p>
  </div>
</section>

<footer> <!-- ํ‘ธํ„ฐ ์‹œ์ž‘ -->

CSS ์Šคํƒ€์ผ ์ถ”๊ฐ€ (index.html์˜ <style> ํƒœ๊ทธ ์•ˆ)

.my-new-section {
  padding: 80px 0;
  background: #f5f5f5;
}

.my-new-section h2 {
  text-align: center;
  margin-bottom: 40px;
  color: var(--primary-color);
}

2. API ์—”๋“œํฌ์ธํŠธ ์ถ”๊ฐ€

ํŒŒ์ผ: server/routes/api.js

์˜ˆ์‹œ: ์ƒˆ๋กœ์šด ํ†ต๊ณ„ API

// ๊ธฐ์กด ์ฝ”๋“œ ์•„๋ž˜์— ์ถ”๊ฐ€
router.get('/statistics', (req, res) => {
  try {
    const stats = db.prepare(`
      SELECT 
        COUNT(*) as total_news,
        (SELECT COUNT(*) FROM partners) as total_partners,
        (SELECT SUM(amount) FROM donations) as total_donations
      FROM news
    `).get();
    
    res.json({
      success: true,
      stats
    });
  } catch (error) {
    res.status(500).json({ 
      success: false, 
      message: 'ํ†ต๊ณ„ ์กฐํšŒ ์‹คํŒจ' 
    });
  }
});

์‚ฌ์šฉ:

GET https://elimg.com/api/statistics

3. ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ ์ถ”๊ฐ€

ํŒŒ์ผ: server/routes/admin.js

์˜ˆ์‹œ: ๋ฐฉ๋ฌธ์ž ํ†ต๊ณ„ ๋ฆฌ์…‹ ๊ธฐ๋Šฅ

// ๊ด€๋ฆฌ์ž ์ „์šฉ ์—”๋“œํฌ์ธํŠธ
router.post('/reset-visitors', authenticateAdmin, (req, res) => {
  try {
    db.prepare('UPDATE settings SET value = 0 WHERE key = "visitor_count"').run();
    
    res.json({
      success: true,
      message: '๋ฐฉ๋ฌธ์ž ์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค'
    });
  } catch (error) {
    res.status(500).json({ 
      success: false, 
      message: '์ดˆ๊ธฐํ™” ์‹คํŒจ' 
    });
  }
});

4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์ถ”๊ฐ€

ํŒŒ์ผ: server/models/database.js

์˜ˆ์‹œ: ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ” ์ถ”๊ฐ€

// ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ•จ์ˆ˜์— ์ถ”๊ฐ€
db.exec(`
  CREATE TABLE IF NOT EXISTS events (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title_ko TEXT NOT NULL,
    title_en TEXT,
    title_vi TEXT,
    date DATE NOT NULL,
    location TEXT,
    description TEXT,
    image_url TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  )
`);

๐Ÿš€ ์ˆ˜์ • ํ›„ ๋ฐฐํฌ

๋ฐฉ๋ฒ• 1: GitHub์„ ํ†ตํ•œ ์ž๋™ ๋ฐฐํฌ

# 1. ๋ณ€๊ฒฝ์‚ฌํ•ญ ํ™•์ธ
git status

# 2. ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์Šคํ…Œ์ด์ง•
git add .

# 3. ์ปค๋ฐ‹ (์ˆ˜์ • ๋‚ด์šฉ ์„ค๋ช…)
git commit -m "์—ฐ๋ฝ์ฒ˜ ์ •๋ณด ์—…๋ฐ์ดํŠธ"

# 4. GitHub์— ํ‘ธ์‹œ
git push origin main

Railway/Vercel ์—ฐ๊ฒฐ ์‹œ: ์ž๋™์œผ๋กœ 1-2๋ถ„ ๋‚ด ๋ฐฐํฌ ์™„๋ฃŒ!


๋ฐฉ๋ฒ• 2: Railway ์ˆ˜๋™ ๋ฐฐํฌ

  1. Railway ๋Œ€์‹œ๋ณด๋“œ ์ ‘์†
  2. ํ”„๋กœ์ ํŠธ ์„ ํƒ
  3. โ€œDeploymentsโ€ ํƒญ
  4. โ€œRedeployโ€ ๋ฒ„ํŠผ ํด๋ฆญ

๋ฐฉ๋ฒ• 3: Vultr VPS ์ˆ˜๋™ ๋ฐฐํฌ

# 1. ์„œ๋ฒ„ ์ ‘์†
ssh root@your-server-ip

# 2. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™
cd /var/www/elimgweb

# 3. ์ตœ์‹  ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ
git pull origin main

# 4. ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ (ํ•„์š”์‹œ)
npm install

# 5. ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
pm2 restart elimg

โœ… ์ˆ˜์ • ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋ฐฐํฌ ์ „ ํ™•์ธ์‚ฌํ•ญ:

๊ธฐ๋ณธ ์ฒดํฌ

๊ธฐ๋Šฅ ํ…Œํฌ

๋ณด์•ˆ ์ฒดํฌ


๐Ÿ†˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฌธ์ œ 1: ์ˆ˜์ •์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ

ํ•ด๊ฒฐ:

# ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ์‚ญ์ œ
Ctrl + Shift + R (Windows)
Cmd + Shift + R (Mac)

# ๋˜๋Š” ์‹œํฌ๋ฆฟ ๋ชจ๋“œ๋กœ ์ ‘์†

๋ฌธ์ œ 2: ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Œ

ํ•ด๊ฒฐ:

# ๋กœ๊ทธ ํ™•์ธ
npm run dev

# ๋˜๋Š” PM2 ๋กœ๊ทธ
pm2 logs elimg

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฌ์ดˆ๊ธฐํ™”
npm run init

๋ฌธ์ œ 3: Git ํ‘ธ์‹œ ์˜ค๋ฅ˜

ํ•ด๊ฒฐ:

# ์ตœ์‹  ์ฝ”๋“œ ๋จผ์ € ๊ฐ€์ ธ์˜ค๊ธฐ
git pull origin main

# ์ถฉ๋Œ ํ•ด๊ฒฐ ํ›„ ๋‹ค์‹œ ํ‘ธ์‹œ
git add .
git commit -m "์ถฉ๋Œ ํ•ด๊ฒฐ"
git push origin main

๐ŸŽ“ ์ถ”๊ฐ€ ํ•™์Šต ์ž๋ฃŒ

HTML/CSS ๊ธฐ์ดˆ

JavaScript ๊ธฐ์ดˆ

Node.js/Express

Git/GitHub


๐Ÿ“ž ๋„์›€์ด ํ•„์š”ํ•˜์‹ ๊ฐ€์š”?

์—˜๋ฆผG์„ ๊ตํšŒ ์—ฐ๋ฝ์ฒ˜

๊ธฐ์ˆ  ์ง€์›


๐Ÿ’ก ํŒ & ํŠธ๋ฆญ

1. ๋น ๋ฅธ ์ˆ˜์ • ํŒ

2. ๋ฐฑ์—… ํŒ

# ์ˆ˜์ • ์ „ ํ•ญ์ƒ ๋ฐฑ์—…!
git branch backup-$(date +%Y%m%d)

3. ํ…Œ์ŠคํŠธ ํŒ

# ๋กœ์ปฌ์—์„œ ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ ํ…Œ์ŠคํŠธ
NODE_ENV=production npm start

์ด ๊ฐ€์ด๋“œ๋ฅผ ๋ถ๋งˆํฌํ•˜์„ธ์š”! ๐Ÿ“Œ

์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”! ๐Ÿš€