서버 비용 0원? GitHub Actions로 나만의 24시간 '무료 웹사이트 감시 시스템' 만들기
월 $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 관점)
- Public vs Private: Public 저장소는 GitHub Actions가 무료지만, 코드가 공개됩니다. 민감한 URL이라면 Private 저장소를 쓰되, 무료 제공 시간(월 2,000분) 이내로 Cron 주기를 조절하세요. (예: 15분~30분 주기 추천)
- 로그 관리: 매번 실행되는 로그가 쌓이면 저장 공간을 차지할 수 있습니다. 수치화된 데이터는 외부 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분 주기로 돌리더라도 월 제공 시간을 다 쓰기 어렵기 때문에 사실상 무료로 운용 가능합니다.