AICosmus

Where tech meets the everyday — AI, fintech, swimming, and cars.
Python 자동화 입문 – 매일 반복하는 PC 작업 5가지 없애는 법

Python 자동화 입문 – 매일 반복하는 PC 작업 5가지 없애는 법

매일 같은 작업, 이제 Python에게 맡기세요

컴퓨터를 켜면 매일 비슷한 작업을 반복하고 계신가요? 다운로드 폴더에 쌓인 파일 정리, 엑셀 데이터 취합, 웹사이트에서 정보 확인, 보고 메일 발송… 하나하나는 몇 분이면 끝나지만, 이런 작업이 쌓이면 하루에 30분에서 1시간이 훌쩍 지나갑니다.

이전에 n8n 같은 노코드 자동화 도구를 소개해 드린 적이 있는데요, n8n은 웹 서비스 간 워크플로우를 연결하는 데 탁월하지만, 내 PC 안에서 일어나는 작업을 자동화하기에는 한계가 있습니다. 로컬 파일을 정리하거나, 엑셀 데이터를 가공하거나, 특정 시간에 맞춰 작업을 실행하는 것은 프로그래밍 언어의 영역이죠.

그중에서도 Python은 자동화에 가장 적합한 언어입니다. 문법이 간결해서 프로그래밍 경험이 적은 분도 금방 따라 할 수 있고, 파일 처리·데이터 분석·웹 크롤링·이메일 전송 등 자동화에 필요한 라이브러리가 이미 다 갖춰져 있기 때문입니다. 실제로 비개발자 직군에서도 Python 자동화 스크립트를 업무에 활용하는 사례가 급격히 늘고 있습니다.

이 글에서는 Python을 처음 접하는 분도 바로 따라 할 수 있도록, 설치부터 실전 자동화 스크립트 5가지까지 하나하나 안내해 드리겠습니다. 복사해서 바로 실행할 수 있는 코드를 제공하니, 오늘 당장 반복 작업 하나를 없애 보세요.

Python 설치와 개발 환경 세팅 – 10분이면 끝

Python 설치하기

자동화를 시작하려면 먼저 Python을 설치해야 합니다. 이미 설치되어 있다면 이 단계는 건너뛰셔도 됩니다.

Windows 사용자python.org 공식 사이트에서 최신 버전(2026년 4월 기준 Python 3.13)을 다운로드합니다. 설치 시 반드시 ‘Add Python to PATH’ 체크박스를 선택해 주세요. 이걸 빠뜨리면 명령 프롬프트에서 python 명령어를 인식하지 못합니다.

Mac 사용자는 터미널에서 brew install python 명령어 한 줄이면 설치가 완료됩니다. Homebrew가 없다면 먼저 Homebrew를 설치해 주세요.

설치가 끝나면 터미널(또는 명령 프롬프트)을 열고 아래 명령어로 정상 설치를 확인합니다.

python –version

Python 3.13.x 같은 버전 정보가 출력되면 성공입니다.

가상환경 만들기

Python 프로젝트마다 사용하는 라이브러리가 다르기 때문에, 가상환경을 만들어 프로젝트별로 라이브러리를 분리하는 것이 좋습니다. 자동화 스크립트용 폴더를 하나 만들고 그 안에서 가상환경을 생성합니다.

mkdir my-automation

cd my-automation

python -m venv venv

Windows에서는 venv\Scripts\activate, Mac/Linux에서는 source venv/bin/activate로 가상환경을 활성화합니다. 터미널 프롬프트 앞에 (venv)가 표시되면 활성화된 상태입니다.

VS Code 에디터 설치

코드를 작성할 에디터로는 VS Code를 추천합니다. 무료이면서 Python 확장 기능이 뛰어나고, 코드 자동 완성과 디버깅 기능을 제공합니다. VS Code를 설치한 뒤 확장 탭에서 ‘Python’ 확장을 검색해 설치하면 준비 완료입니다.

이제 본격적으로 자동화 스크립트를 만들어 보겠습니다.

실전 1: 다운로드 폴더 파일 자동 정리

문제 상황

다운로드 폴더를 열어 보세요. PDF, 이미지, 엑셀, 압축 파일이 뒤죽박죽 섞여 있지 않나요? 파일이 수십 개만 쌓여도 원하는 파일을 찾기 어렵고, 주기적으로 정리하자니 귀찮습니다. Python으로 파일 확장자별로 자동 분류하는 스크립트를 만들면, 클릭 한 번으로 깔끔하게 정리할 수 있습니다.

핵심 라이브러리: os, shutil, pathlib

이 스크립트에는 별도의 외부 라이브러리 설치가 필요 없습니다. Python에 기본 내장된 os, shutil, pathlib 모듈만으로 충분합니다.

  • os: 운영체제와 상호작용하는 기본 모듈. 디렉토리 생성, 파일 목록 조회 등
  • shutil: 파일 복사, 이동, 삭제 등 고수준 파일 작업
  • pathlib: 파일 경로를 객체지향적으로 다루는 모듈. 확장자 추출이 간편

전체 코드

아래 코드를 organize_downloads.py로 저장하세요.

from pathlib import Path

import shutil

먼저 정리할 폴더 경로와 확장자별 분류 규칙을 정의합니다.

DOWNLOAD_DIR = Path.home() / “Downloads”

CATEGORIES = {

    “이미지”: [“.jpg”, “.jpeg”, “.png”, “.gif”, “.bmp”, “.webp”, “.svg”],

    “문서”: [“.pdf”, “.doc”, “.docx”, “.txt”, “.hwp”, “.hwpx”, “.pptx”, “.xlsx”],

    “압축파일”: [“.zip”, “.rar”, “.7z”, “.tar”, “.gz”],

    “동영상”: [“.mp4”, “.avi”, “.mkv”, “.mov”, “.wmv”],

    “음악”: [“.mp3”, “.wav”, “.flac”, “.aac”],

    “설치파일”: [“.exe”, “.msi”, “.dmg”],

}

다음으로 파일을 분류하는 함수를 작성합니다.

def get_category(file_ext):

    for category, extensions in CATEGORIES.items():

        if file_ext.lower() in extensions:

            return category

    return “기타”

마지막으로 실제 파일 이동을 수행합니다.

def organize():

    moved_count = 0

    for file_path in DOWNLOAD_DIR.iterdir():

        if file_path.is_file():

            category = get_category(file_path.suffix)

            target_dir = DOWNLOAD_DIR / category

            target_dir.mkdir(exist_ok=True)

            dest = target_dir / file_path.name

            if dest.exists():

                dest = target_dir / f”{file_path.stem}_copy{file_path.suffix}”

            shutil.move(str(file_path), str(dest))

            moved_count += 1

    print(f”정리 완료! {moved_count}개 파일을 분류했습니다.”)

organize()

코드 해설

이 스크립트의 동작 흐름은 간단합니다. 다운로드 폴더 안의 모든 파일을 하나씩 확인하면서, 확장자를 기준으로 미리 정의한 카테고리 폴더로 이동시킵니다. 카테고리 폴더가 없으면 자동으로 생성하고, 같은 이름의 파일이 이미 있으면 ‘_copy’를 붙여서 덮어쓰기를 방지합니다.

CATEGORIES 딕셔너리에 원하는 확장자를 추가하거나 카테고리 이름을 변경하면 자신의 상황에 맞게 커스터마이징할 수 있습니다. 예를 들어 개발자라면 “.py”, “.js”, “.json” 같은 확장자를 “코드” 카테고리로 추가할 수 있겠죠.

실행 방법

터미널에서 python organize_downloads.py를 실행하면 됩니다. 실행 전에 DOWNLOAD_DIR 경로가 본인의 다운로드 폴더와 일치하는지 확인하세요. 실행하면 “정리 완료! 47개 파일을 분류했습니다.” 같은 메시지가 출력되며, 다운로드 폴더에 카테고리별 하위 폴더가 생성된 것을 확인할 수 있습니다.

실전 2: 엑셀·CSV 데이터 자동 처리

문제 상황

업무 중 가장 많은 시간을 잡아먹는 반복 작업 중 하나가 엑셀 데이터 처리입니다. 여러 엑셀 파일을 하나로 합치기, 특정 조건으로 데이터 필터링하기, 월별 요약 보고서 만들기… 엑셀의 VLOOKUP이나 피벗 테이블로 해결할 수 있지만, 매번 수작업으로 하기엔 비효율적입니다.

Python의 pandas 라이브러리를 사용하면 이런 작업을 코드 몇 줄로 자동화할 수 있습니다.

pandas 설치

pandas는 외부 라이브러리이므로 별도 설치가 필요합니다. 엑셀 파일(.xlsx)을 다루려면 openpyxl도 함께 설치합니다.

pip install pandas openpyxl

시나리오: 여러 엑셀 파일을 하나로 합치고 요약하기

매달 각 팀에서 매출 보고서를 엑셀로 보내온다고 가정해 봅시다. sales_01.xlsx, sales_02.xlsx, sales_03.xlsx… 이 파일들을 하나로 합치고, 팀별·월별 합계를 구하는 스크립트를 만들어 보겠습니다.

import pandas as pd

from pathlib import Path

먼저 엑셀 파일들이 있는 폴더를 지정하고, 모든 엑셀 파일을 읽어 하나의 데이터프레임으로 합칩니다.

data_dir = Path(“./sales_data”)

all_data = []

for excel_file in data_dir.glob(“*.xlsx”):

    df = pd.read_excel(excel_file)

    df[“파일명”] = excel_file.stem

    all_data.append(df)

combined = pd.concat(all_data, ignore_index=True)

합쳐진 데이터에서 팀별 매출 합계를 구합니다.

team_summary = combined.groupby(“팀명”)[“매출액”].agg([“sum”, “mean”, “count”])

team_summary.columns = [“총매출”, “평균매출”, “건수”]

team_summary = team_summary.sort_values(“총매출”, ascending=False)

결과를 새 엑셀 파일로 저장합니다.

with pd.ExcelWriter(“매출_종합보고서.xlsx”) as writer:

    combined.to_excel(writer, sheet_name=”전체데이터”, index=False)

    team_summary.to_excel(writer, sheet_name=”팀별요약”)

print(f”처리 완료! 총 {len(combined)}건의 데이터를 합쳤습니다.”)

코드 해설

pd.read_excel()은 엑셀 파일을 읽어 데이터프레임(표 형태의 데이터 구조)으로 변환합니다. pd.concat()으로 여러 데이터프레임을 세로로 합치고, groupby()로 특정 열을 기준으로 그룹화한 뒤 합계·평균·건수를 한 번에 계산합니다.

pandas의 강력한 점은 이 모든 작업이 단 몇 줄로 끝난다는 것입니다. 엑셀에서 수십 분 걸리던 작업이 코드 실행 1~2초 만에 완료됩니다.

자주 쓰는 pandas 자동화 패턴

아래는 업무에서 바로 활용할 수 있는 pandas 코드 패턴들입니다.

  • 특정 조건으로 필터링: df[df[“매출액”] >= 1000000] — 매출 100만 원 이상인 행만 추출
  • 중복 제거: df.drop_duplicates(subset=[“고객명”, “전화번호”]) — 특정 열 기준 중복 행 제거
  • 열 이름 변경: df.rename(columns={“old_name”: “new_name”}) — 영문 열 이름을 한글로 바꾸기
  • 날짜 필터링: df[df[“날짜”] >= “2026-01-01”] — 특정 날짜 이후 데이터만 추출
  • CSV로 저장: df.to_csv(“result.csv”, index=False, encoding=”utf-8-sig”) — 한글 깨짐 없이 CSV 저장

이 패턴들을 조합하면 거의 모든 엑셀 반복 작업을 자동화할 수 있습니다. 특히 encoding=”utf-8-sig” 옵션은 한글 데이터를 CSV로 저장할 때 엑셀에서 깨지지 않게 해 주는 중요한 팁이니 꼭 기억해 두세요.

실전 3: 웹에서 정보 자동 수집(웹 스크래핑)

문제 상황

매일 아침 특정 웹사이트에 접속해 정보를 확인하는 루틴이 있나요? 뉴스 헤드라인, 환율, 주가, 날씨, 부동산 시세 등을 매번 브라우저를 열어 확인하는 것은 번거롭습니다. Python으로 웹 페이지의 정보를 자동으로 수집하면, 원하는 데이터를 한눈에 정리해서 볼 수 있습니다.

라이브러리 설치

웹 스크래핑에는 requestsBeautifulSoup 두 가지 라이브러리를 사용합니다.

pip install requests beautifulsoup4

  • requests: 웹 페이지의 HTML 소스코드를 가져오는 역할
  • BeautifulSoup: 가져온 HTML에서 원하는 정보를 추출하는 역할 (HTML 파싱)

시나리오: 네이버 실시간 환율 정보 수집

해외 직구나 해외 여행을 준비 중이라면 환율을 자주 확인하게 됩니다. 네이버 금융에서 주요 통화의 환율 정보를 수집해 보겠습니다.

import requests

from bs4 import BeautifulSoup

from datetime import datetime

네이버 환율 페이지에 HTTP 요청을 보내고, HTML을 파싱합니다.

url = “https://finance.naver.com/marketindex/”

headers = {“User-Agent”: “Mozilla/5.0”}

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, “html.parser”)

환율 정보가 담긴 HTML 요소를 찾아 데이터를 추출합니다.

exchange_items = soup.select(“.market_data .data_lst li”)

print(f”=== 환율 정보 ({datetime.now().strftime(‘%Y-%m-%d %H:%M’)}) ===”)

for item in exchange_items[:4]:

    name = item.select_one(“.blind”).text.strip()

    value = item.select_one(“.value”).text.strip()

    change = item.select_one(“.change”).text.strip()

    print(f”{name}: {value}원 (전일 대비 {change})”)

웹 스크래핑 핵심 개념

웹 스크래핑을 이해하려면 몇 가지 핵심 개념을 알아야 합니다.

CSS 선택자(Selector)는 HTML 문서에서 특정 요소를 찾는 방법입니다. 브라우저에서 F12(개발자 도구)를 열면 웹 페이지의 HTML 구조를 볼 수 있고, 원하는 요소의 클래스명이나 ID를 확인할 수 있습니다. soup.select()에 이 선택자를 넣으면 해당 요소를 추출합니다.

User-Agent 헤더는 요청을 보내는 주체가 어떤 브라우저인지 서버에 알려주는 정보입니다. 일부 웹사이트는 User-Agent가 없는 요청을 차단하므로, headers에 브라우저 정보를 포함시키는 것이 좋습니다.

웹 스크래핑 시 주의사항

  • robots.txt 확인: 웹사이트의 /robots.txt 파일을 확인해서 크롤링이 허용된 영역인지 반드시 확인하세요.
  • 과도한 요청 금지: 짧은 시간에 너무 많은 요청을 보내면 서버에 부담을 주고, IP가 차단될 수 있습니다. time.sleep()으로 요청 간격을 두세요.
  • 개인정보 수집 주의: 타인의 개인정보를 무단으로 수집하는 것은 법적 문제가 될 수 있습니다.
  • 상업적 이용 시 확인: 수집한 데이터를 상업적으로 사용할 때는 해당 웹사이트의 이용약관을 반드시 확인하세요.

웹 스크래핑은 강력한 도구이지만, 책임감 있게 사용하는 것이 중요합니다. 공개 API가 제공되는 서비스라면 API를 사용하는 것이 더 안정적이고 합법적인 방법입니다.

실전 활용 팁: 수집 데이터를 파일로 저장하기

수집한 데이터를 매번 화면에만 출력하면 기록이 남지 않습니다. CSV 파일로 누적 저장하면 시간에 따른 변화를 추적할 수 있습니다.

import csv

from datetime import datetime

def save_to_csv(data_list, filename=”exchange_log.csv”):

    file_exists = Path(filename).exists()

    with open(filename, “a”, newline=””, encoding=”utf-8-sig”) as f:

        writer = csv.writer(f)

        if not file_exists:

            writer.writerow([“수집일시”, “통화”, “환율”, “변동”])

        for item in data_list:

            writer.writerow([datetime.now().isoformat(), *item])

이렇게 하면 실행할 때마다 데이터가 한 줄씩 추가되어, 나중에 엑셀에서 열어 환율 추이 차트를 만들 수도 있습니다.

실전 4: 이메일 자동 발송

문제 상황

정기적으로 보고 메일을 보내거나, 특정 이벤트가 발생했을 때 알림 메일을 보내야 하는 경우가 있습니다. 앞서 만든 자동화 스크립트의 실행 결과를 이메일로 받아보면 더욱 편리하겠죠. Python의 내장 모듈만으로 이메일 발송을 자동화할 수 있습니다.

Gmail SMTP 설정

Gmail을 예로 들어 설명합니다. Gmail에서 Python 스크립트를 통해 메일을 보내려면 앱 비밀번호를 생성해야 합니다.

  • Google 계정 설정 → 보안 → 2단계 인증을 먼저 활성화합니다.
  • 2단계 인증 설정 페이지 하단의 ‘앱 비밀번호’에서 새 비밀번호를 생성합니다.
  • 생성된 16자리 비밀번호를 안전하게 보관합니다. 이 비밀번호는 스크립트에서 사용됩니다.

보안상 실제 Gmail 비밀번호가 아닌 앱 비밀번호를 사용하는 것이며, 앱 비밀번호는 언제든 폐기하고 새로 만들 수 있어 안전합니다.

이메일 발송 코드

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

발신자 정보를 설정합니다. 앱 비밀번호는 환경변수로 관리하는 것이 보안상 좋습니다.

import os

SMTP_SERVER = “smtp.gmail.com”

SMTP_PORT = 587

SENDER_EMAIL = “[email protected]

APP_PASSWORD = os.environ.get(“GMAIL_APP_PASSWORD”, “your_app_password”)

메일 내용을 구성합니다.

def send_email(to_email, subject, body_html):

    msg = MIMEMultipart(“alternative”)

    msg[“Subject”] = subject

    msg[“From”] = SENDER_EMAIL

    msg[“To”] = to_email

    html_part = MIMEText(body_html, “html”)

    msg.attach(html_part)

    with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:

        server.starttls()

        server.login(SENDER_EMAIL, APP_PASSWORD)

        server.send_message(msg)

    print(f”{to_email}로 메일을 발송했습니다.”)

앞서 만든 환율 수집 결과를 메일로 보내는 예시입니다.

html_body = “””

<h2>오늘의 환율 정보</h2>

<table border=’1′ cellpadding=’8′>

<tr><th>통화</th><th>환율</th><th>변동</th></tr>

<tr><td>USD</td><td>1,350.50</td><td>+2.30</td></tr>

<tr><td>EUR</td><td>1,470.20</td><td>-1.10</td></tr>

</table>

“””

send_email(“[email protected]”, “[자동] 오늘의 환율 리포트”, html_body)

보안 주의사항

코드에 비밀번호를 직접 입력하는 것은 보안상 매우 위험합니다. 특히 코드를 GitHub 등에 올릴 경우 비밀번호가 노출될 수 있습니다. 반드시 아래 방법 중 하나를 사용하세요.

  • 환경변수: os.environ.get(“GMAIL_APP_PASSWORD”)로 시스템 환경변수에서 읽기
  • .env 파일: python-dotenv 라이브러리로 .env 파일에서 읽기 (.gitignore에 .env 추가 필수)
  • 시스템 키체인: keyring 라이브러리로 운영체제의 자격 증명 저장소 사용

어떤 방식이든 비밀번호가 소스코드에 직접 포함되지 않도록 하는 것이 핵심입니다.

첨부 파일 보내기

보고서 파일을 메일에 첨부하고 싶다면 아래 코드를 추가합니다.

from email.mime.base import MIMEBase

from email import encoders

def attach_file(msg, filepath):

    with open(filepath, “rb”) as f:

        part = MIMEBase(“application”, “octet-stream”)

        part.set_payload(f.read())

    encoders.encode_base64(part)

    part.add_header(“Content-Disposition”, f”attachment; filename={Path(filepath).name}”)

    msg.attach(part)

이 함수를 send_email 함수 안에서 msg.attach(html_part) 뒤에 호출하면 파일이 첨부됩니다. 앞서 만든 ‘매출_종합보고서.xlsx’를 첨부해서 보내면, 데이터 처리부터 메일 발송까지 완전히 자동화할 수 있습니다.

실전 5: 작업 스케줄링 – 정해진 시간에 자동 실행

문제 상황

지금까지 만든 스크립트들은 수동으로 실행해야 합니다. 하지만 진정한 자동화는 사람의 개입 없이 정해진 시간에 자동으로 실행되는 것이죠. 매일 아침 9시에 환율 정보를 수집하고, 결과를 이메일로 보내고, 저녁에는 다운로드 폴더를 정리하는 일련의 작업을 완전 자동화해 봅시다.

방법 1: schedule 라이브러리 (간편한 방법)

Python의 schedule 라이브러리를 사용하면 cron 문법을 몰라도 직관적으로 스케줄을 설정할 수 있습니다.

pip install schedule

import schedule

import time

앞서 만든 함수들을 조합해 매일 실행할 작업을 정의합니다.

def morning_routine():

    print(“[아침 루틴 시작]”)

    # 환율 정보 수집 및 메일 발송

    exchange_data = fetch_exchange_rates()

    send_email(“[email protected]”, “오늘의 환율”, format_html(exchange_data))

    print(“[아침 루틴 완료]”)

def evening_routine():

    print(“[저녁 루틴 시작]”)

    organize() # 다운로드 폴더 정리

    print(“[저녁 루틴 완료]”)

스케줄을 등록합니다.

schedule.every().day.at(“09:00”).do(morning_routine)

schedule.every().day.at(“18:00”).do(evening_routine)

schedule.every().friday.at(“17:00”).do(weekly_report) # 매주 금요일

print(“스케줄러가 실행 중입니다. Ctrl+C로 종료합니다.”)

while True:

    schedule.run_pending()

    time.sleep(60)

schedule 라이브러리의 장점은 코드가 영어 문장처럼 읽힌다는 것입니다. every().day.at(“09:00”)은 “매일 09시에”로 직관적으로 이해됩니다. 단점은 이 스크립트가 실행 중이어야만 스케줄이 동작한다는 것입니다. 컴퓨터를 끄거나 터미널을 닫으면 스케줄도 멈춥니다.

방법 2: Windows 작업 스케줄러 (OS 수준 자동화)

컴퓨터가 켜져 있기만 하면 파이썬 스크립트를 실행하지 않아도 자동으로 작업을 수행하고 싶다면, Windows 작업 스케줄러를 사용합니다.

설정 방법은 다음과 같습니다.

  • Windows 검색에서 ‘작업 스케줄러’를 찾아 실행합니다.
  • ‘기본 작업 만들기’를 클릭합니다.
  • 이름과 설명을 입력합니다. 예: “아침 환율 리포트”
  • 트리거를 ‘매일’로 설정하고, 시작 시간을 09:00으로 지정합니다.
  • 동작에서 ‘프로그램 시작’을 선택합니다.
  • 프로그램/스크립트에 Python 실행 파일 경로를 입력합니다. 예: C:\Python313\python.exe
  • 인수 추가에 스크립트 경로를 입력합니다. 예: C:\my-automation\morning_report.py
  • 시작 위치에 스크립트가 있는 폴더를 입력합니다. 예: C:\my-automation

Mac/Linux 사용자는 crontab을 사용합니다. 터미널에서 crontab -e를 실행하고 아래 한 줄을 추가하면 됩니다.

0 9 * * * /usr/bin/python3 /home/user/my-automation/morning_report.py

이 설정은 매일 아침 9시에 스크립트를 실행합니다. 숫자의 의미는 순서대로 분(0), 시(9), 일(*=매일), 월(*=매월), 요일(*=매일)입니다.

방법 3: 시작 시 자동 실행

컴퓨터를 켤 때마다 자동으로 스케줄러 스크립트를 실행하고 싶다면, Windows의 ‘시작 프로그램’ 폴더에 바로가기를 추가합니다.

  • Win+R을 눌러 실행 창을 엽니다.
  • shell:startup을 입력하고 Enter를 누릅니다.
  • 열린 폴더에 Python 스크립트의 바로가기를 만들어 넣습니다.

이렇게 하면 컴퓨터를 켤 때 자동으로 스케줄러가 시작되어, 정해진 시간에 자동화 작업이 수행됩니다.

전체 자동화 파이프라인 구성하기

스크립트 통합

지금까지 만든 5가지 스크립트를 하나의 자동화 시스템으로 통합해 봅시다. 전체 프로젝트 구조는 다음과 같습니다.

my-automation/

├── venv/

├── scripts/

│   ├── organize_downloads.py

│   ├── excel_processor.py

│   ├── web_scraper.py

│   └── email_sender.py

├── scheduler.py

├── config.py

└── requirements.txt

config.py에 설정을 모아두면 관리가 편합니다.

import os

from pathlib import Path

DOWNLOAD_DIR = Path.home() / “Downloads”

DATA_DIR = Path(“./data”)

OUTPUT_DIR = Path(“./output”)

SMTP_SERVER = “smtp.gmail.com”

SMTP_PORT = 587

SENDER_EMAIL = os.environ.get(“SENDER_EMAIL”, “”)

APP_PASSWORD = os.environ.get(“GMAIL_APP_PASSWORD”, “”)

requirements.txt에는 사용하는 라이브러리를 기록합니다.

pandas==2.2.0

openpyxl==3.1.2

requests==2.31.0

beautifulsoup4==4.12.3

schedule==1.2.1

다른 PC에서도 pip install -r requirements.txt 한 줄로 동일한 환경을 구성할 수 있습니다.

에러 처리와 로그 남기기

자동화 스크립트는 무인으로 실행되기 때문에, 에러가 발생했을 때 이를 확인할 수 있도록 로그를 남기는 것이 중요합니다.

import logging

logging.basicConfig(

    filename=”automation.log”,

    level=logging.INFO,

    format=”%(asctime)s – %(levelname)s – %(message)s”,

    encoding=”utf-8″

)

def safe_run(func, task_name):

    try:

        logging.info(f”{task_name} 시작”)

        func()

        logging.info(f”{task_name} 완료”)

    except Exception as e:

        logging.error(f”{task_name} 실패: {e}”)

이 safe_run 함수로 각 작업을 감싸면, 에러가 발생해도 전체 스케줄러가 중단되지 않고, 에러 내용이 로그 파일에 기록됩니다. 나중에 automation.log 파일을 확인하면 어떤 작업이 언제 실행되었고, 어떤 에러가 발생했는지 한눈에 파악할 수 있습니다.

자동화를 더 발전시키는 아이디어

이 글에서 다룬 5가지 자동화는 시작점에 불과합니다. Python 자동화의 세계는 훨씬 넓습니다. 아래는 한 단계 더 나아갈 수 있는 아이디어들입니다.

데스크톱 알림 보내기

plyer 라이브러리를 사용하면 Windows, Mac 모두에서 데스크톱 알림을 보낼 수 있습니다. 이메일 대신 바탕화면에 팝업 알림으로 결과를 확인할 수 있어 편리합니다.

pip install plyer

from plyer import notification

notification.notify(

    title=”환율 알림”,

    message=”USD 환율이 1,400원을 돌파했습니다!”,

    timeout=10

)

텔레그램 봇으로 알림 보내기

PC 앞에 없을 때도 자동화 결과를 확인하고 싶다면 텔레그램 봇을 활용하면 됩니다. 앞서 이메일 발송에서 배운 것과 비슷한 패턴으로 간단하게 구현할 수 있습니다.

def send_telegram(message):

    token = os.environ.get(“TELEGRAM_TOKEN”)

    chat_id = os.environ.get(“TELEGRAM_CHAT_ID”)

    url = f”https://api.telegram.org/bot{token}/sendMessage”

    requests.post(url, json={“chat_id”: chat_id, “text”: message})

AI와 결합하기

수집한 데이터를 AI에게 분석시키면 한 차원 높은 자동화가 가능합니다. 예를 들어 매일 수집한 뉴스 헤드라인을 AI에게 보내 핵심 요약을 받거나, 엑셀 데이터의 이상치를 AI가 자동으로 감지하도록 할 수 있습니다. 이전에 소개한 Ollama를 활용하면 로컬에서 무료로 AI 분석을 돌릴 수 있어 비용 부담도 없습니다.

GUI 만들기

명령줄이 익숙하지 않은 분이라면 tkinter(Python 내장)나 PySimpleGUI로 간단한 버튼 인터페이스를 만들 수 있습니다. “폴더 정리” 버튼을 클릭하면 스크립트가 실행되는 방식이죠. 동료에게 자동화 도구를 공유할 때도 GUI가 있으면 훨씬 편리합니다.

자동화 사례 모음

실제로 많은 분들이 Python 자동화로 효과를 보고 있는 영역들을 정리해 봤습니다.

  • 사진 정리: 촬영 날짜별로 사진 폴더 자동 분류 (Pillow 라이브러리의 EXIF 데이터 활용)
  • PDF 합치기·분할: 여러 PDF를 하나로 합치거나, 특정 페이지만 추출 (PyPDF2)
  • 워터마크 일괄 삽입: 수백 장의 이미지에 로고나 텍스트 워터마크 자동 삽입 (Pillow)
  • 중복 파일 찾기: 파일 해시값을 비교해 중복 파일을 찾아 삭제 (hashlib)
  • 바탕화면 배경 자동 교체: 매일 다른 배경화면으로 자동 변경
  • 클립보드 기록: 복사한 텍스트를 자동으로 파일에 저장해 나만의 클립보드 히스토리 만들기
  • 회의 알림: Google Calendar API와 연동해 회의 5분 전 데스크톱 알림 보내기

이 중 하나라도 자신의 상황에 맞는 것이 있다면, 이 글에서 배운 기본 패턴을 응용해 충분히 만들 수 있습니다. Python 자동화의 핵심은 거창한 프로그램을 만드는 것이 아니라, 매일 반복하는 작은 작업 하나를 없애는 것에서 시작합니다.

마무리: 자동화는 작은 것부터

이 글에서 다룬 5가지 자동화를 정리하면 다음과 같습니다.

  • 파일 정리: 다운로드 폴더의 파일을 확장자별로 자동 분류
  • 엑셀 처리: 여러 엑셀 파일을 합치고 요약 보고서 생성
  • 웹 스크래핑: 웹사이트에서 정보를 자동 수집하고 CSV로 저장
  • 이메일 발송: 수집한 데이터를 정리해 자동으로 메일 전송
  • 스케줄링: 모든 작업을 정해진 시간에 자동 실행

이 다섯 가지를 조합하면 “매일 아침 9시에 환율을 수집하고, 보고서를 만들고, 메일로 보내고, 저녁에는 다운로드 폴더를 정리하는” 완전한 자동화 파이프라인을 구축할 수 있습니다.

자동화의 매력은 한번 만들어 두면 계속 시간을 절약해 준다는 것입니다. 매일 10분 절약하면 한 달에 5시간, 1년이면 60시간입니다. 그 시간에 더 창의적이고 가치 있는 일에 집중할 수 있습니다.

처음부터 복잡한 자동화를 목표로 하지 마세요. 오늘 당장 하나의 반복 작업을 골라 자동화해 보세요. 다운로드 폴더 정리 스크립트는 5분이면 만들 수 있습니다. 그 작은 성공 경험이 다음 자동화로 이어지고, 어느새 여러분의 PC는 스스로 일하는 비서가 되어 있을 것입니다.

Python 자동화에 대해 궁금한 점이 있다면 댓글로 남겨 주세요. 여러분의 반복 작업을 자동화하는 데 도움이 될 수 있도록 구체적인 사례를 함께 고민해 보겠습니다.

이미지는 Claude AI 로 생성되었습니다.

답글 남기기

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

Warning: Undefined array key "cookies" in /var/www/html/wp-content/themes/personal-cv-resume/class/class-post-related.php on line 212
*
*

최신 댓글