본문 바로가기

콩's WORK

🤖 파이썬으로 사무자동화하기: GitHub Actions 핵심!

반응형

 

🤖 파이썬으로 사무자동화하기: 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를 활용한 사무자동화는 무료이면서도 강력한 솔루션입니다. 초기 설정이 다소 복잡할 수 있지만, 한 번 구축하면 안정적으로 업무를 자동화할 수 있습니다.

이 가이드를 따라하시면서 궁금한 점이 있으시면 언제든 문의해주세요. 여러분의 업무 효율성이 크게 향상되기를 바랍니다! 🚀

반응형

⚠️ 광고 차단 프로그램 감지

애드블록, 유니콘 등 광고 차단 확장 프로그램을 해제하거나
화이트리스트에 추가해주세요.