[ 메신저 – 디스코드 ] PowerShell과 작업 스케줄러로 디스코드 서버 장애 알람 봇 만들기 2부: PowerShell 스크립트 작성

지난 1부에서는 디스코드 채널에 외부 알람을 꽂아 넣을 수 있는 ‘웹훅(Webhook) URL’을 발급받았습니다. 이번 2부에서는 인프라 엔지니어의 강력한 무기인 PowerShell을 활용하여, 서버의 상태를 수집하고 해당 웹훅 URL로 알람 메시지를 전송하는 자동화 스크립트를 직접 작성해 보겠습니다.

📝 핵심 내용 요약

  • 디스코드 웹훅은 JSON (JavaScript Object Notation) 형식의 데이터를 받아들입니다.
  • PowerShell의 Invoke-RestMethod 명령어를 사용하면 복잡한 외부 모듈 설치 없이 윈도우 기본 기능만으로 REST API(POST) 호출이 가능합니다.
  • 스크립트 내부에 디스코드 마크다운(Markdown) 문법을 적용하여 가독성 높은 경고 메시지를 디자인할 수 있습니다.

1. 알람 전송 스크립트의 원리 (Invoke-RestMethod)

웹훅(Webhook)은 쉽게 말해 “이 주소로 데이터를 던지면, 내가 채널에 텍스트로 띄워줄게”라는 약속입니다. 따라서 우리는 PowerShell을 통해 1) 보낼 메시지를 조립하고, 2) 디스코드가 이해할 수 있는 규격(JSON)으로 포장한 뒤, **3) 웹훅 주소로 전송(POST 방식)**만 하면 됩니다.

이 모든 과정을 단 한 줄로 수행해 주는 핵심 명령어가 바로 Invoke-RestMethod입니다.

2. PowerShell 스크립트 작성 실전

메모장이나 PowerShell ISE를 열고 아래 코드를 복사하여 붙여넣습니다. 코드를 저장할 때는 한글 텍스트가 깨지지 않도록 반드시 인코딩을 UTF-8(BOM) 방식으로 설정하여 DiscordAlert.ps1 이라는 이름으로 저장합니다.

PowerShell

<#
.SYNOPSIS
    Windows Server 상태 알람 디스코드 전송 스크립트
.DESCRIPTION
    웹훅(Webhook) URL을 통해 디스코드 특정 채널로 경고/알림 메시지를 발송합니다.
#>

# 1. 환경 변수 및 웹훅 설정
# [주의] 1부에서 발급받은 본인의 디스코드 웹훅 URL을 아래 큰따옴표 안에 반드시 붙여넣으세요!
$WebhookUrl = "https://discord.com/api/webhooks/여기에/본인의웹훅주소를넣으세요"

# 알람이 발생한 서버를 식별하기 위해 현재 서버의 호스트네임(컴퓨터 이름)을 가져옵니다.
$ServerName = $env:COMPUTERNAME

# 알람 발생 시간을 [YYYY-MM-DD HH:mm:ss] 포맷으로 저장합니다.
$CurrentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

# 2. 전송할 메시지 내용 구성 (해시테이블 구조)
# 디스코드 API 규격에 맞게 'content'라는 속성 안에 보낼 텍스트를 작성합니다.
$Payload = @{
    content = "🚨 **[시스템 상태 알림]**`n`n> **서버명:** $ServerName`n> **발생 시간:** $CurrentTime`n> **메시지:** 일일 서버 점검 스크립트가 정상적으로 실행되었습니다."
}

# 3. JSON 변환 및 전송 (POST 호출)
# 구성한 메시지 덩어리를 디스코드 서버가 읽을 수 있도록 JSON 포맷으로 변환합니다.
$JsonPayload = $Payload | ConvertTo-Json

# 변환된 데이터를 UTF-8 인코딩으로 웹훅 URL에 전송합니다.
Write-Host "디스코드 알람 전송을 시도합니다..." -ForegroundColor Cyan
Invoke-RestMethod -Uri $WebhookUrl -Method Post -Body $JsonPayload -ContentType 'application/json; charset=utf-8'

Write-Host "전송 완료! 디스코드 채널을 확인해 보세요." -ForegroundColor Green

💡 코드 상세 분석 및 커스터마이징 팁

  • content 속성: 디스코드 채널에 실제로 표시될 텍스트입니다.
  • 마크다운(Markdown) 문법 활용: 코드 내부의 `n은 엔터(줄바꿈) 역할을 합니다. 텍스트 양쪽에 **굵게**를 넣으면 볼드체가 되고, > 를 넣으면 인용구 블록이 생성됩니다. 이를 잘 활용하면 단순한 텍스트가 아니라, 시스템 관제 센터에서 보낸 것 같은 가독성 높은 알람 창을 꾸밀 수 있습니다.

3. 스크립트 실행 및 결과 확인 (테스트)

작성된 .ps1 파일을 저장한 후, 관리자 권한으로 PowerShell 창을 열어 해당 폴더로 이동한 뒤 스크립트를 직접 실행해 봅니다.

스크립트가 오류 없이 실행되고 초록색으로 “전송 완료!” 메시지가 출력되었다면, 즉시 스마트폰이나 PC의 디스코드를 확인해 보세요. 방금 우리가 스크립트에 작성했던 서버의 호스트네임과 현재 시간이 담긴 텍스트가 알람 채널에 예쁘게 도착해 있을 것입니다.

4. 마무리

이번 2부에서는 1부에서 만든 디스코드 웹훅 URL을 향해 PowerShell 스크립트로 직접 JSON 데이터를 쏘아 올려 실제 메신저 알람을 받아보는 데 성공했습니다. 복잡한 API 인증 과정이나 토큰(Token) 발급 없이 URL 하나만으로 이 정도의 자동화가 가능하다는 것이 웹훅의 가장 큰 매력입니다.

하지만 실무에서 엔지니어가 매일 서버에 들어와서 이 스크립트를 수동으로 더블클릭할 수는 없겠죠? 다음 마지막 3부에서는 이 강력한 알람 스크립트를 Windows **작업 스케줄러(Task Scheduler)**에 등록하여, 관리자가 서버에서 로그아웃한 상태이거나 서버가 재부팅된 직후에도 백그라운드에서 완벽하게 알람이 자동 발송되도록 무인 관제 세팅을 완성해 보겠습니다. 다음 글에서 뵙겠습니다!

답글 남기기

Your email address will not be published. Required fields are marked *.

*
*