엑셀 매크로(VBA) 보안 경고 끝! 파이썬으로 똑같은 작업 대체하기

이미지
엑셀 매크로(VBA) 보안 경고 끝! 파이썬으로 똑같은 작업 대체하기 (완성 코드 공개) "매크로가 포함된 파일을 다른 사람에게 보내면 보안 경고 때문에 매크로 사용 설정을 매번 따로 해야 한다", "VBA 코드가 회사 PC마다 다르게 작동해서 디버깅이 어렵다", "매크로를 쓰는 동료가 퇴사하면 그 파일을 아무도 수정하지 못한다"… VBA 매크로는 엑셀 안에서 바로 실행되는 장점이 있지만, 보안 정책으로 차단되거나, 회사 PC마다 설정이 달라 오작동하거나, 코드 관리가 어려운 한계가 있습니다. 이 글에서는 이 블로그에서 지금까지 소개한 파이썬 코드들이 VBA의 어떤 기능을 대체할 수 있는지 비교하고, 대표적인 매크로 작업을 파이썬으로 구현하는 방법을 소개합니다. VBA 매크로 vs 파이썬 비교 VBA 매크로 파이썬 실행 환경 엑셀 안에서만 동작 독립적으로 어디서나 동작 보안 경고 매번 발생, 차단 가능 해당 없음 배포 파일에 코드 포함 스크립트 파일만 공유 디버깅 엑셀 VBA 편집기 사용 다양한 코드 에디터 사용 가능 다른 프로그램 연동 제한적 (Win API 필요) 매우 풍부함 (이메일, 웹, DB 등) 버전 관리(깃 등) 거의 불가능 일반적인 코드처럼 관리 가능 배우는 난이도 엑셀에 특화된 문법 범용 프로그래밍 언어, 활용도 넓음 💡 언제 VBA가 더 나을까: 엑셀을 열자마자 버튼 클릭으로 즉시 실행하고 싶거나, 엑셀 전용 UI(사용자 정의 양식)가 필요한 경우는 VBA가 더 간단할 수 있습니다. 하지만 안정성, 보안, 확장성을 고려하면 대부분의 반복 작업은 파이썬이 더 유리합니다. 대표 매크로 작업 1 — 여러 시트 합치기 VBA로 흔히 작성하는 "모...

팀 알림 자동화! 파이썬으로 슬랙(Slack) 메시지 자동 발송하기

팀 알림 자동화! 파이썬으로 슬랙(Slack) 메시지 자동 발송하기 (완성 코드 공개)

파이썬으로 슬랙 메시지를 자동으로 발송하는 모습


"매일 아침 팀 채널에 일정을 자동으로 공유하고 싶다", "배치 작업이 실패했을 때 개발팀 채널에 즉시 알리고 싶다", "주간 매출 데이터를 슬랙으로 자동 리포트하고 싶다"…

슬랙은 팀 협업의 중심이 되는 만큼, 업무 알림을 슬랙으로 받으면 별도 앱을 확인할 필요가 없어 효율적입니다. 슬랙은 웹훅(Webhook) 기능을 기본으로 제공해 코드 몇 줄로 메시지를 자동 발송할 수 있습니다. 별도 봇 앱을 만들지 않아도 간단한 설정만으로 바로 시작할 수 있습니다.


1단계: 슬랙 웹훅 URL 발급 (최초 1회만)

슬랙 메시지를 자동 발송하려면 먼저 웹훅 URL을 발급받아야 합니다.

  1. api.slack.com/apps에 접속해 슬랙 계정으로 로그인합니다.
  2. "Create New App""From scratch" 선택 → 앱 이름(예: "업무알림봇") 입력 → 워크스페이스 선택 후 생성합니다.
  3. 왼쪽 메뉴 "Incoming Webhooks"를 클릭합니다.
  4. 상단 토글을 "On"으로 활성화합니다.
  5. 하단 "Add New Webhook to Workspace" 클릭 → 메시지를 받을 채널을 선택하고 "허용"을 클릭합니다.
  6. 생성된 Webhook URL(https://hooks.slack.com/services/... 형태)을 복사해 둡니다.
⚠️ 주의: 웹훅 URL은 해당 채널에 메시지를 보낼 수 있는 비밀 키와 같습니다. 외부에 노출되면 누구나 그 채널에 메시지를 보낼 수 있으므로 코드를 공유할 때는 URL을 반드시 가리거나 환경 변수로 분리하세요.

2단계: 준비물 설치

터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install requests

슬랙 웹훅은 HTTP POST 요청 방식으로 동작하기 때문에 requests 라이브러리만 있으면 됩니다.


3단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, slack_msg.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

import requests
import json
from datetime import datetime

# ① 설정
WEBHOOK_URL = "여기에_웹훅_URL_입력"   # ← 1단계에서 발급받은 URL

# ② 일반 텍스트 메시지 발송 함수
def send_message(text):
    payload = {"text": text}
    res = requests.post(WEBHOOK_URL, data=json.dumps(payload),
                        headers={"Content-Type": "application/json"})
    if res.status_code == 200:
        print(f"  ✔ 메시지 발송 완료")
    else:
        print(f"  ✘ 발송 실패: {res.status_code} / {res.text}")

# ③ 서식이 있는 블록 메시지 발송 함수 (표 형태로 정리해서 보기 좋게)
def send_block_message(title, items, color="#2E5090"):
    """
    title : 메시지 제목
    items : {"항목명": "값", ...} 형태의 딕셔너리
    """
    fields = [
        {"type": "mrkdwn", "text": f"*{key}*\n{value}"}
        for key, value in items.items()
    ]

    payload = {
        "blocks": [
            {
                "type": "header",
                "text": {"type": "plain_text", "text": title, "emoji": True}
            },
            {
                "type": "section",
                "fields": fields
            },
            {
                "type": "context",
                "elements": [{
                    "type": "mrkdwn",
                    "text": f"⏰ {datetime.now().strftime('%Y-%m-%d %H:%M')}"
                }]
            }
        ]
    }

    res = requests.post(WEBHOOK_URL, data=json.dumps(payload),
                        headers={"Content-Type": "application/json"})
    if res.status_code == 200:
        print(f"  ✔ 블록 메시지 발송 완료")
    else:
        print(f"  ✘ 발송 실패: {res.status_code} / {res.text}")

# ④ 실행 예시
# 일반 메시지
send_message("📊 *오늘의 업무 자동화 완료 알림*\n\n✅ 데이터 수집 완료\n✅ 보고서 발송 완료")

# 서식 있는 블록 메시지
send_block_message(
    title = "📈 일일 업무 자동화 리포트",
    items = {
        "주식 데이터 수집": "✅ 완료 (6종목)",
        "보고서 차트 생성": "✅ 완료",
        "이메일 발송":      "✅ 완료 (3건)",
        "전체 상태":        "정상",
    }
)

print("\n✅ 완료! 슬랙으로 메시지를 발송했습니다.")

4단계: 실행 방법

  1. 코드 ① 설정의 WEBHOOK_URL에 발급받은 웹훅 URL을 입력합니다.
  2. 코드 ④ 실행의 메시지 내용을 원하는 내용으로 수정합니다.
  3. 터미널에서 아래 명령어로 실행합니다:
python slack_msg.py

정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 메시지 발송 완료
  ✔ 블록 메시지 발송 완료

✅ 완료! 슬랙으로 메시지를 발송했습니다.

웹훅을 설정할 때 선택한 슬랙 채널에 메시지가 도착합니다. 블록 메시지는 제목, 표 형태의 항목, 시간 정보가 깔끔하게 정리되어 표시됩니다.


5단계: 자주 발생하는 오류와 해결법

오류 1: 404 Not Found 또는 invalid_token

웹훅 URL이 잘못 입력되었거나 만료된 경우입니다. 슬랙 앱 설정 페이지에서 "Incoming Webhooks"의 URL을 다시 확인하세요. URL 앞뒤에 공백이 없는지도 점검합니다.

오류 2: 메시지는 발송되는데 채널이 다름

웹훅은 발급 시 선택한 채널에 고정됩니다. 다른 채널로 보내려면 해당 채널용 웹훅을 별도로 발급받아야 합니다. "Add New Webhook to Workspace"를 다시 클릭해 새 채널을 선택하세요.

오류 3: 한글이 깨져서 출력됨

json.dumps() 사용 시 한글이 유니코드로 인코딩되어 전송되지만 슬랙에서는 정상적으로 표시됩니다. 만약 콘솔에서 깨진 것처럼 보인다면 실제 슬랙 채널을 확인하세요. 코드 저장 시 인코딩이 UTF-8인지도 확인합니다.


응용: 파이썬 스크립트 오류 발생 시 슬랙으로 알림 받기

장시간 실행되는 자동화 스크립트에 슬랙 알림을 추가하면 오류 발생 시 즉시 확인할 수 있습니다.

from slack_msg import send_message
import traceback

try:
    # 기존 자동화 코드
    pass

except Exception as e:
    error_msg = (f"🚨 *스크립트 오류 발생!*\n\n"
                f"❌ 오류: `{str(e)}`\n"
                f"```{traceback.format_exc()[:500]}```")
    send_message(error_msg)
    raise
💡 이전 게시글과 결합하면: 주식·환율 자동 수집 편이나 시스템 정보 자동 수집 편과 결합하면 팀 전체가 슬랙에서 데이터 현황을 실시간으로 확인할 수 있습니다. 스케줄러 편과 결합하면 매일 정해진 시간에 팀 채널로 자동 리포트가 발송됩니다.

핵심 요약

  • 준비물: 슬랙 웹훅 URL 발급(최초 1회) + pip install requests
  • 설정: WEBHOOK_URL 입력 후 메시지 내용 수정
  • 실행: 터미널에서 python slack_msg.py 입력
  • 결과: 일반 텍스트 또는 서식 있는 블록 메시지로 슬랙 채널에 자동 발송

이 코드를 응용하면 특정 조건(오류 발생, 임계값 초과)이 충족될 때만 알림을 보내는 조건부 발송이나, 여러 채널에 동시 발송하는 것도 가능합니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁