1. 서론: 구축보다 중요한 것은 '유지보수'와 '감시'
지난 포스팅에서 우리는 Windows Server 2022에 IIS(웹 서버)를 성공적으로 설치하고 첫 페이지를 띄웠습니다. 하지만 서버 운영의 진짜 시작은 지금부터입니다. 서버는 24시간 깨어 있어야 하며, 관리자는 언제 어디서든 서버의 '생사 확인'을 할 수 있어야 합니다.
웹 서비스가 갑자기 멈추거나, 서버 자원(CPU, RAM)이 가득 차서 응답이 느려지는 상황을 방치하면 서비스 신뢰도는 바닥으로 떨어집니다. 오늘은 파이썬(Python)의 강력한 네트워크 라이브러리를 활용하여, 내 서버가 정상인지 1초 만에 판별하는 모니터링 스크립트를 직접 제작해 보겠습니다.
2. 왜 파이썬인가? (서버 관리자의 무기)
서버 모니터링 솔루션은 시중에 많이 나와 있습니다. 하지만 파이썬을 이용해 직접 도구를 만드는 이유는 명확합니다.
- 가벼움: 무거운 상용 프로그램 없이도 핵심 기능만 빠르게 실행 가능합니다.
- 확장성: 오늘 만든 기초 코드를 바탕으로 텔레그램 알림, 이메일 발송, 로그 자동 저장 등으로 무한히 확장할 수 있습니다.
- 자동화: 반복적인 체크 작업을 스케줄러에 등록하여 '무인 운영' 시스템을 구축할 수 있습니다.
3. 핵심 라이브러리: requests와 socket
이번 프로젝트에서는 두 가지 핵심 모듈을 사용합니다.
- requests: HTTP 통신을 담당합니다. 웹 서버가 200 OK 응답을 주는지 확인하는 데 최적입니다.
- time: 체크 간격을 조절하여 서버에 부하를 주지 않도록 도와줍니다.
4. 실전 모니터링 스크립트 코드
아래 코드는 내 서버의 특정 URL에 접속을 시도하고, 응답 시간과 상태 코드를 분석하여 리포트를 출력합니다.
import requests
import time
from datetime import datetime
def monitor_server(url):
print(f"🚀 [{datetime.now()}] 모니터링을 시작합니다: {url}")
print("-" * 50)
try:
# 1. 서버에 접속 시도 (타임아웃 5초 설정)
start_time = time.time()
response = requests.get(url, timeout=5)
end_time = time.time()
# 2. 응답 속도 계산
latency = round((end_time - start_time) * 1000, 2)
# 3. 상태 코드에 따른 결과 출력
if response.status_code == 200:
print(f"✅ 상태: 정상 (OK)")
print(f"⏱️ 응답 속도: {latency}ms")
print(f"📄 서버 타입: {response.headers.get('Server', '알 수 없음')}")
else:
print(f"⚠️ 경고: 서버 응답 이상 (상태 코드: {response.status_code})")
except requests.exceptions.Timeout:
print("🚨 오류: 서버 응답 시간 초과 (Timeout)")
except requests.exceptions.ConnectionError:
print("🚨 오류: 서버 연결 실패 (접속 불가)")
except Exception as e:
print(f"🚨 예상치 못한 오류 발생: {e}")
print("-" * 50)
if __name__ == "__main__":
# 본인이 구축한 IIS 서버 주소를 입력하세요.
# 외부 IP를 할당받았다면 외부 IP를, 로컬 테스트라면 localhost를 입력합니다.
target_server = "http://localhost"
# 주기적으로 체크하고 싶다면 반복문을 사용합니다.
for i in range(3): # 3회 테스트
monitor_server(target_server)
time.sleep(2) # 2초 간격 대기
5. 코드 상세 해설 (전문성 강화)
- requests.get(timeout=5): 서버가 무응답 상태일 때 무한정 기다리는 것을 방지합니다. 5초 안에 응답이 없으면 서버에 장애가 있는 것으로 간주합니다.
- response.status_code: HTTP 표준 규약을 따릅니다. 200은 성공, 404는 페이지 없음, 500대 숫자는 서버 내부 오류를 의미합니다.
- response.headers: 서버가 어떤 소프트웨어(예: Microsoft-IIS/10.0)로 구동되는지 역으로 추적할 수 있는 정보를 담고 있습니다.
6. 서버 관리자의 문제 해결 체크리스트
만약 스크립트 실행 시 연결 실패가 뜬다면 다음 사항을 점검해야 합니다.
- IIS 서비스 상태: 윈도우 '서비스' 앱에서 World Wide Web Publishing Service가 '실행 중'인지 확인하세요.
- 방화벽(Inbound): 80번 포트가 열려 있는지 다시 한번 확인이 필요합니다. (이전 포스팅 참고)
- 포트 포워딩: 공유기를 사용 중이라면 외부에서 들어오는 신호를 서버 PC로 보내주는 설정이 필요할 수 있습니다.
7. 마치며: 자동화의 다음 단계는?
오늘 만든 간단한 도구만으로도 우리는 서버의 가동률(Uptime)을 획기적으로 관리할 수 있습니다. 여기에 로그 파일 저장 기능만 추가하면 훌륭한 서버 관리 대장이 됩니다.
다음 시간에는 이 데이터를 활용해 '서버가 죽었을 때 내 슬랙 으로 즉시 알림 받기' 기능을 구현해 보겠습니다. 파이썬과 함께라면 서버 관리는 더 이상 두려운 작업이 아닙니다.
'Server Story....' 카테고리의 다른 글
| [Windows Server 2022] MSSQL Express 설치 및 파이썬 연동을 위한 외부 접속 설정 가이드 (0) | 2026.03.29 |
|---|---|
| [Python] 서버 다운 감지 시 슬랙(Slack)으로 즉시 알림 받기 - 파이썬 서버 모니터링 자동화 (0) | 2026.03.28 |
| [Python] 내 웹 서버는 안전할까? 파이썬으로 만드는 실시간 서버 상태 모니터링 도구 (0) | 2026.03.28 |
| [Windows Server] IIS 웹 서버 설치 및 기본 페이지 구동하기 (0) | 2026.03.28 |
| [Python] 파이썬으로 서버 포트 개방 여부 확인하기 (서버 관리 자동화 기초) (0) | 2026.03.27 |