서버 비용 0원? GitHub Actions로 나만의 24시간 '무료 웹사이트 감시 시스템' 만들기

2026-04-02
#GitHub Actions#서버 자동화#웹사이트 모니터링#Python#비용 절감

월 $10씩 나가는 모니터링 비용, 이제는 0원으로 줄이세요

내 웹사이트나 서비스가 잘 돌아가고 있는지 확인하는 것은 서비스 운영의 기본입니다. 많은 분이 UptimeRobot이나 AWS CloudWatch 같은 유료 서비스를 사용하곤 하죠. 하지만 개인 프로젝트나 이제 막 시작한 서비스에서 매달 나가는 고정 비용은 꽤나 부담스럽습니다.

오늘은 GitHub Actions라는 강력한 무료 도구를 사용하여, 24시간 내내 내 웹사이트를 감시하고 장애 발생 시 즉시 알림을 주는 '나만의 모니터링 시스템'을 만드는 법을 알려드리겠습니다. 서버가 필요 없으니 관리 포인트도 '제로'입니다.


1. 왜 GitHub Actions인가? (서버 없는 자동화의 핵심)

GitHub Actions는 단순히 빌드와 배포(CI/CD)만을 위한 도구가 아닙니다. 가장 강력한 기능 중 하나인 **schedule (cron)**을 활용하면 정해진 시간마다 특정 코드를 실행할 수 있기 때문입니다.

  • 비용: $0 (Public 저장소 기준 무제한 무료)
  • 서버: 필요 없음 (GitHub의 가상 머신에서 실행)
  • 유지보수: 코드로 관리되므로 복구와 확장이 매우 쉬움
graph LR
    A[GitHub Actions Cron] -->|Every 5 minutes| B[Python Script Run]
    B -->|Check Status| C{Website UP?}
    C -->|YES| D[Log Success]
    C -->|NO| E[Send Discord/Slack Alert]
    E --> F[Developer Take Action]

2. 실전 구축: 10분 만에 끝내는 모니터링 스크립트

먼저 GitHub 저장소를 하나 만드시고, 아래 두 파일을 추가해 보세요.

Step 1. 웹사이트 상태 체크 Python 스크립트 (check_uptime.py)

복잡한 라이브러리 없이 표준 urllib만 사용해도 충분합니다.

import urllib.request
import os
import sys

TARGET_URL = "https://your-website.com"  # 1. 감시할 URL 입력

def check_site():
    try:
        response = urllib.request.urlopen(TARGET_URL, timeout=10)
        if response.getcode() == 200:
            print(f"✅ {TARGET_URL} is UP!")
        else:
            raise Exception(f"Status Code: {response.getcode()}")
    except Exception as e:
        print(f"❌ {TARGET_URL} is DOWN! Error: {e}")
        # 여기에 Discord나 Slack Webhook 메시지 발송 코드를 넣을 수 있습니다.
        sys.exit(1) # 에러 발생 시 Action을 '실패'로 처리

if __name__ == "__main__":
    check_site()

Step 2. GitHub Actions 워크플로우 설정 (.github/workflows/uptime.yml)

5분마다 위 스크립트를 실행하도록 설정합니다.

name: Website Uptime Monitor

on:
  schedule:
    - cron: '*/5 * * * *'  # 5분마다 실행
  workflow_dispatch:        # 수동 실행 허용

jobs:
  monitor:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Run Uptime Checker
        run: python check_uptime.py

3. 장애 발생 시 알림 받기 (Discord/Slack 연동)

단순히 스크립트가 실행되는 것만으로는 부족합니다. 진짜 장애가 났을 때 내 스마트폰으로 알림이 와야 하죠.

가장 쉬운 방법은 GitHub Actions의 실패 알림을 이용하는 것입니다. 위 파이썬 스크립트에서 sys.exit(1)을 실행하도록 해두면, 사이트가 다운되었을 때 GitHub이 여러분의 이메일로 "Workflow failed" 메시지를 보냅니다.

조금 더 전문적으로 하고 싶다면, Discord Webhook을 Python 코드에 한 줄 추가하기만 하면 됩니다.


4. 모니터링 시스템 구축 시 주의사항 (ROI 관점)

  1. Public vs Private: Public 저장소는 GitHub Actions가 무료지만, 코드가 공개됩니다. 민감한 URL이라면 Private 저장소를 쓰되, 무료 제공 시간(월 2,000분) 이내로 Cron 주기를 조절하세요. (예: 15분~30분 주기 추천)
  2. 로그 관리: 매번 실행되는 로그가 쌓이면 저장 공간을 차지할 수 있습니다. 수치화된 데이터는 외부 DB(예: Supabase 무료 플랜)에 저장하는 것이 좋습니다.

결론: 기술을 알면 비용이 0원이 됩니다

똑같은 모니터링 서비스를 누군가는 월 $10를 내고 쓰고, 누군가는 GitHub Actions로 직접 만들어 0원에 해결합니다. 이런 작지만 강력한 **'자동화의 습관'**이 모여 프로젝트의 ROI를 극대화하는 법이죠.

여러분의 소중한 사이트, 이제는 GitHub에게 24시간 감시를 맡기고 발 뻗고 주무세요.


🙋‍♂️ 자주 묻는 질문 (FAQ)

Q1. 여러 개의 사이트를 동시에 감시할 수 있나요? 네, Python 스크립트에서 리스트 형식으로 URL을 관리하고 반복문을 돌리면 수십 개의 사이트도 한 번의 Action으로 감시 가능합니다.

Q2. GitHub 정지(Ban) 사유가 되진 않나요? 단순한 상태 체크(Uptime Monitoring)는 GitHub의 정상적인 활용 범위에 속합니다. 다만, 1분 미남의 너무 잦은 실행이나 대량의 트래픽을 유발하는 행위는 제한될 수 있습니다.

Q3. 서버 상태 외에 특정 요소(텍스트 변경 등)도 감시 가능한가요? 물론입니다. BeautifulSoup 같은 라이브러리를 추가하면 "재고 입고 알림"이나 "환율 변동 알림" 시스템으로도 쉽게 변신시킬 수 있습니다.

Q4. 비용이 정말 0원인가요? Public 저장소라면 완벽히 0원입니다. Private 저장소 역시 5분 주기로 돌리더라도 월 제공 시간을 다 쓰기 어렵기 때문에 사실상 무료로 운용 가능합니다.