EC2 + PM2 환경에서 Sitemap 자동 생성 및 업데이트 설정

EC2 + PM2 환경에서 Sitemap 자동 생성 및 업데이트 설정

Node.js 기반의 Express 애플리케이션을 EC2 서버에서 PM2로 실행할 때, Sitemap을 자동으로 생성하고 최신 상태로 유지하는 방법을 정리합니다. 특히 동적인 URL (예: 개별 캠프그라운드 페이지)까지 포함하는 Sitemap을 효율적으로 업데이트하는 방법을 다룹니다.

✅ 현재 동작 방식 (PM2 재시작 시 Sitemap 생성)

현재 server.js에서 generateSitemap()을 실행하도록 설정하면 PM2가 재시작될 때마다 Sitemap이 새로 생성됩니다.

📄 server.js

const express = require("express");
const path = require("path");
const generateSitemap = require("./scripts/sitemap");

const app = express();

// 서버 실행 시 Sitemap 생성
generateSitemap()
  .then(() => {
    console.log("✅ Sitemap updated on server start");
  })
  .catch((err) => {
    console.error("❌ Sitemap generation failed:", err);
  });

// 정적 파일 제공
app.use(
  "/sitemap.xml",
  express.static(path.join(__dirname, "public", "sitemap.xml"))
);

app.listen(3000, () => {
  console.log("🚀 Server running at http://localhost:3000");
});

동작 방식:

  • pm2 restart app 실행 시 server.js가 다시 실행되면서 Sitemap이 업데이트됨.

문제점:

  • 새로운 캠프그라운드가 추가되어도 서버가 재시작되지 않으면 Sitemap이 갱신되지 않음.

✅ Sitemap을 자동 업데이트하는 3가지 방법

방법 1: PM2 재시작 시 생성 (현재 방식)

위에서 설명한 대로 PM2를 재시작할 때만 Sitemap이 갱신됨. 하지만 실시간 업데이트가 어려움.

방법 2: cron을 이용해 주기적으로 Sitemap 생성 (추천)

PM2 재시작 없이 매일 또는 일정 간격으로 자동 생성하려면 cron을 사용하면 됨.

📌 EC2에서 crontab -e 실행 후 추가

0 * * * * cd /home/ubuntu/YelpCamp && npm run generate-sitemap

(위 설정은 매 정각마다 (0 * * * *) npm run generate-sitemap 실행)

장점: 항상 최신 상태 유지됨, 서버 재시작 필요 없음.

방법 3: 캠프그라운드가 추가될 때 자동으로 Sitemap 생성

새로운 캠프그라운드가 추가될 때 즉시 Sitemap을 갱신하도록 routes/campgrounds.js에서 generateSitemap()을 실행함.

📄 routes/campgrounds.js

const express = require("express");
const router = express.Router();
const Campground = require("../models/campground");
const generateSitemap = require("../scripts/sitemap");

// 새로운 캠프그라운드 추가
router.post("/", async (req, res) => {
  try {
    const newCampground = new Campground(req.body);
    await newCampground.save();

    // 캠프그라운드 추가 후 Sitemap 갱신
    await generateSitemap();
    console.log("✅ Sitemap updated after new campground addition");

    res.redirect(`/campgrounds/${newCampground._id}`);
  } catch (error) {
    console.error("❌ Error adding campground:", error);
    res.status(500).send("Internal Server Error");
  }
});

module.exports = router;

장점:

  • 새 캠프그라운드가 추가될 때마다 즉시 Sitemap 업데이트됨.

단점:

  • 트래픽이 많을 경우 DB 부하가 발생할 가능성이 있음.

🚀 최종 추천 설정

방법 PM2 재시작 필요 자동 반영 속도 서버 부하
방법 1: PM2 재시작 시 생성 O 느림 낮음
방법 2: cron을 이용한 자동 생성 (추천) X 빠름 (최대 1시간) 낮음
방법 3: 새 캠프그라운드 추가 시 생성 X 즉시 반영 다소 부담

🚀 추천 조합

cron을 이용해 매일 혹은 매시간 Sitemap을 자동 생성 (방법 2) ✔ 추가로 PM2 재시작 시 (pm2 restart) Sitemap을 갱신 (방법 1) ✔ 캠프그라운드가 자주 추가된다면 방법 3을 적용하여 즉시 반영

이제 EC2 환경에서도 최신 Sitemap을 자동으로 유지할 수 있음! 🚀🔥

Leave a comment