반응형
🤖 파이썬으로 사무자동화하기: GitHub Actions
PC 없이도 24시간 자동으로 업무를 처리하는 방법을 알아보세요
🌟 들어가며
매일 반복되는 업무에 지치셨나요? 파이썬과 GitHub Actions를 활용하면 PC를 켜두지 않아도 24시간 자동으로 업무를 처리할 수 있습니다. 이 글에서는 실제 경험을 바탕으로 무료로 사무자동화를 구현하는 방법을 단계별로 설명드리겠습니다. 웹 스크래핑, 데이터 수집, 보고서 자동 생성, 이메일 발송 등 다양한 업무를 자동화하여 생산성을 극대화해보세요!
📊 4가지 사무자동화 방법 비교
사무자동화를 구현하는 방법은 여러 가지가 있습니다. 각 방법의 장단점을 비교해보겠습니다.
방법 | 비용 | 설정 난이도 | 스케줄 | 핵심 특징 |
---|---|---|---|---|
💻 내 PC 활용 | 무료 | 매우 쉬움 | 매시간 (자유롭게) | PC가 항상 켜져 있어야 함 |
☁️ GCP VM 활용 | 무료 | 어려움 | 매시간 (자유롭게) | 가장 안정적이고 강력함 |
🐍 PythonAnywhere | 무료 | 쉬움 | 매일 1회 (지정된 시간) | 셀레니움이 미리 설치되어 매우 편리함 |
🚀 GitHub Actions | 무료 | 중간 | 매시간 (자유롭게) | Git/GitHub 지식 필요, 유연성이 높음 |
🎯 GitHub Actions를 선택한 이유
✅ 장점
- 완전 무료 - 월 2,000분까지 무료 사용 가능
- PC 불필요 - 클라우드에서 자동 실행
- 유연한 스케줄링 - cron 표현식으로 원하는 시간 설정
- 버전 관리 - Git으로 코드 이력 관리
- 다양한 환경 - Ubuntu, Windows, macOS 지원
❌ 단점
- Git/GitHub 기본 지식 필요
- YAML 문법 이해 필요
- 실행 시간 제한 (6시간)
- 디버깅이 상대적으로 복잡
- 네트워크 제한 (일부 사이트 차단)
추천 대상: Git을 사용해본 경험이 있고, 유연한 자동화 환경을 원하는 개발자나 업무 담당자
🛠️ GitHub Actions 설정 방법
🔸 1단계: GitHub 저장소 생성
GitHub에서 새로운 저장소를 생성하고 로컬에 클론합니다.
git clone https://github.com/yourusername/your-repo.git
cd your-repo
🔸 2단계: 디렉토리 구조 생성
다음과 같은 구조로 파일을 생성합니다.
your-repo/
├── .github/
│ └── workflows/
│ └── automation.yml
├── src/
│ └── main.py
└── requirements.txt
🔸 3단계: GitHub Actions 워크플로우 작성
.github/workflows/automation.yml
파일을 생성합니다.
name: 🤖 사무자동화 워크플로우
on:
schedule:
# 매일 오전 9시에 실행 (UTC 기준이므로 한국시간 -9시간)
- cron: '0 0 * * *'
workflow_dispatch: # 수동 실행 가능
jobs:
automation:
runs-on: ubuntu-latest
steps:
- name: 📥 코드 체크아웃
uses: actions/checkout@v4
- name: 🐍 Python 설정
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: 📦 종속성 설치
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: 🚀 자동화 스크립트 실행
run: python src/main.py
env:
# 환경 변수 설정 (GitHub Secrets 사용)
API_KEY: ${{ secrets.API_KEY }}
EMAIL_PASSWORD: ${{ secrets.EMAIL_PASSWORD }}
🐍 파이썬 코드 작성
📋 requirements.txt 작성
requests==2.31.0
beautifulsoup4==4.12.2
selenium==4.15.0
pandas==2.1.3
smtplib-send==1.0.0
🎯 main.py 예시 코드
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
사무자동화 메인 스크립트
GitHub Actions에서 실행되는 자동화 코드
"""
import os
import requests
from datetime import datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def collect_data():
"""데이터 수집 함수"""
try:
# 웹 API 호출 또는 웹 스크래핑
response = requests.get('https://api.example.com/data')
data = response.json()
print(f"✅ 데이터 수집 완료: {len(data)}개 항목")
return data
except Exception as e:
print(f"❌ 데이터 수집 실패: {e}")
return None
def process_data(data):
"""데이터 처리 함수"""
if not data:
return None
try:
# 데이터 가공 및 분석
processed_data = []
for item in data:
# 여기에 데이터 처리 로직 추가
processed_item = {
'name': item.get('name', ''),
'value': item.get('value', 0),
'timestamp': datetime.now().isoformat()
}
processed_data.append(processed_item)
print(f"✅ 데이터 처리 완료: {len(processed_data)}개 항목")
return processed_data
except Exception as e:
print(f"❌ 데이터 처리 실패: {e}")
return None
def send_email_report(data):
"""이메일 보고서 발송 함수"""
try:
# 환경 변수에서 이메일 설정 가져오기
sender_email = os.getenv('SENDER_EMAIL')
sender_password = os.getenv('EMAIL_PASSWORD')
receiver_email = os.getenv('RECEIVER_EMAIL')
if not all([sender_email, sender_password, receiver_email]):
print("⚠️ 이메일 설정이 완료되지 않았습니다.")
return
# 이메일 내용 작성
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = f"📊 자동화 보고서 - {datetime.now().strftime('%Y-%m-%d')}"
body = f"""
안녕하세요!
📅 날짜: {datetime.now().strftime('%Y년 %m월 %d일')}
📊 처리된 데이터: {len(data) if data else 0}개
자동화 시스템이 성공적으로 실행되었습니다.
감사합니다.
"""
msg.attach(MIMEText(body, 'plain', 'utf-8'))
# Gmail SMTP 서버를 통해 이메일 발송
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, sender_password)
text = msg.as_string()
server.sendmail(sender_email, receiver_email, text)
server.quit()
print("✅ 이메일 보고서 발송 완료")
except Exception as e:
print(f"❌ 이메일 발송 실패: {e}")
def main():
"""메인 실행 함수"""
print("🚀 사무자동화 시작!")
print(f"⏰ 실행 시간: {datetime.now()}")
# 1. 데이터 수집
raw_data = collect_data()
# 2. 데이터 처리
processed_data = process_data(raw_data)
# 3. 보고서 발송
send_email_report(processed_data)
print("🎉 사무자동화 완료!")
if __name__ == "__main__":
main()
🚀 배포 및 실행
🔐 1단계: Secrets 설정
GitHub 저장소의 Settings → Secrets and variables → Actions에서 환경 변수를 설정합니다.
API_KEY
: 사용할 API 키EMAIL_PASSWORD
: Gmail 앱 비밀번호SENDER_EMAIL
: 발신자 이메일RECEIVER_EMAIL
: 수신자 이메일
📤 2단계: 코드 푸시
git add .
git commit -m "✨ 사무자동화 코드 추가"
git push origin main
▶️ 3단계: 워크플로우 실행
GitHub Actions 탭에서 워크플로우 상태를 확인할 수 있습니다.
- 자동 실행: 설정한 cron 시간에 자동 실행
- 수동 실행: "Run workflow" 버튼으로 즉시 실행
💡 실전 팁과 주의사항
🔥 성능 최적화 팁
- 캐싱 활용:
actions/cache
를 사용하여 종속성 설치 시간 단축 - 병렬 처리: 여러 작업을 동시에 실행하여 시간 절약
- 최소 종속성: 필요한 라이브러리만 설치하여 실행 시간 최소화
⚠️ 주의사항
실행 시간 제한: GitHub Actions는 작업당 최대 6시간까지 실행 가능합니다. 장시간 실행되는 작업은 여러 단계로 나누어 처리하세요.
API 사용량 제한: 무료 계정은 월 2,000분의 실행 시간이 제공됩니다. 효율적인 코드 작성으로 사용량을 관리하세요.
🐛 트러블슈팅
- 권한 오류: Secrets가 올바르게 설정되었는지 확인
- 네트워크 오류: 일부 웹사이트는 GitHub IP를 차단할 수 있음
- 시간대 문제: cron은 UTC 기준이므로 한국시간과 9시간 차이
🎉 마무리
GitHub Actions를 활용한 사무자동화는 무료이면서도 강력한 솔루션입니다. 초기 설정이 다소 복잡할 수 있지만, 한 번 구축하면 안정적으로 업무를 자동화할 수 있습니다.
이 가이드를 따라하시면서 궁금한 점이 있으시면 언제든 문의해주세요. 여러분의 업무 효율성이 크게 향상되기를 바랍니다! 🚀
반응형
'콩's WORK' 카테고리의 다른 글
🎨 피그마 프로(Figma Pro), 학생과 교육자라면 100% 무료! (feat. 신청 방법 총정리) (1) | 2025.06.27 |
---|---|
경력직 면접 A to Z: 1차·2차 합격 전략 가이드 (0) | 2025.06.26 |
네이버 부동산 크롤링하는데 개발자도구(F12)가 막힌다고요? 완벽 해결 가이드 (2) | 2025.06.04 |
네이버 기존 지도 API 유료화 전환 - 2025년 7월 1일부터 무료 이용량 중단 (0) | 2025.06.02 |