Python으로 반복 업무 줄이는 자동화 스크립트 8가지

3178 단어
16 분
Python으로 반복 업무 줄이는 자동화 스크립트 8가지

개발자 시간이 코드가 아니라 정리·이동·복붙에 새면 자동화 후보입니다. 아래 8가지는 “아이디어 목록”이 아니라 바로 뼈대를 돌릴 수 있는 수준으로 적었습니다. 환경마다 인증 정보가 다르므로, 비밀번호는 코드에 하드코딩하지 마세요.

준비물#

  • Python 3.10+
  • python -m venv .venv 후 패키지 설치
  • 환경변수 또는 .env (.gitignore 필수)
  • 자동화 적합성: 주 1회 이상, 규칙 명확, 15분 이상 소요

공통 시작#

Terminal window
python -m venv .venv
# Windows: .venv\Scripts\activate
pip install python-dotenv requests
# config는 환경변수에서만
import os
from dotenv import load_dotenv
load_dotenv()
API_TOKEN = os.environ["API_TOKEN"]

스크립트 1 — 폴더 정리 (확장자별 이동)#

from pathlib import Path
import shutil
DOWNLOADS = Path.home() / "Downloads"
RULES = {
".pdf": "docs",
".png": "images",
".jpg": "images",
".zip": "archives",
}
def organize(root: Path) -> None:
for p in root.iterdir():
if p.is_file() and p.suffix.lower() in RULES:
dest_dir = root / RULES[p.suffix.lower()]
dest_dir.mkdir(exist_ok=True)
shutil.move(str(p), dest_dir / p.name)
print("moved", p.name)
if __name__ == "__main__":
organize(DOWNLOADS)

검증: 테스트용 폴더 복사본에서 먼저 실행.

스크립트 2 — 로그에서 ERROR 줄만 추출·요약 파일#

from pathlib import Path
from datetime import datetime
def extract_errors(log_path: Path, out_path: Path) -> int:
lines = [ln for ln in log_path.read_text(encoding="utf-8", errors="ignore").splitlines()
if "ERROR" in ln or "CRITICAL" in ln]
header = f"# errors {datetime.now().isoformat()} count={len(lines)}\n"
out_path.write_text(header + "\n".join(lines[:500]), encoding="utf-8")
return len(lines)
# AI 요약이 필요하면 out 파일 내용을 챗에 붙여 "상위 원인 3개"만 요청

스크립트 3 — CSV → 주간 요약 통계#

import csv
from collections import Counter
from pathlib import Path
def summarize_csv(path: Path, status_col: str = "status") -> Counter:
with path.open(encoding="utf-8-sig", newline="") as f:
rows = list(csv.DictReader(f))
return Counter(r.get(status_col, "") for r in rows)
if __name__ == "__main__":
c = summarize_csv(Path("issues.csv"))
for k, v in c.most_common():
print(f"{k}: {v}")

스크립트 4 — Git 상태 브리핑 (로컬)#

import subprocess
from pathlib import Path
def git_brief(repo: Path) -> str:
def run(args):
return subprocess.check_output(["git", *args], cwd=repo, text=True, stderr=subprocess.STDOUT)
branch = run(["rev-parse", "--abbrev-ref", "HEAD"]).strip()
status = run(["status", "-sb"])
return f"branch={branch}\n{status}"
print(git_brief(Path(".")))

스크립트 5 — Conventional Commit 메시지 초안 도우미#

# staged diff를 읽어 사람이 최종 확정
import subprocess
diff = subprocess.check_output(["git", "diff", "--cached"], text=True, errors="ignore")
print("아래 diff를 AI에 붙여 커밋 메시지 초안을 요청하세요. 직접 검토 후 커밋:")
print(diff[:4000])

프롬프트 예: Conventional Commits로 제목 1줄+본문 3줄. 과장 금지.

스크립트 6 — 디렉터리 백업 (zip)#

import shutil
from pathlib import Path
from datetime import datetime
def zip_backup(src: Path, dest_dir: Path) -> Path:
dest_dir.mkdir(parents=True, exist_ok=True)
stamp = datetime.now().strftime("%Y%m%d_%H%M")
base = dest_dir / f"{src.name}_{stamp}"
archive = shutil.make_archive(str(base), "zip", root_dir=src)
return Path(archive)

스크립트 7 — HTTP 헬스체크 + 실패 시 종료코드#

import sys
import urllib.request
def check(url: str, timeout: float = 5.0) -> None:
try:
with urllib.request.urlopen(url, timeout=timeout) as r:
if r.status >= 400:
raise SystemExit(f"bad status {r.status}")
print("ok", url, r.status)
except Exception as e:
print("fail", url, e)
raise SystemExit(1)
if __name__ == "__main__":
check("https://example.com")

작업 스케줄러·cron에 연결 가능.

스크립트 8 — 텍스트 일괄 치환 (코드 이동 시 조심)#

from pathlib import Path
def replace_in_files(root: Path, old: str, new: str, suffix: str = ".md") -> int:
n = 0
for p in root.rglob(f"*{suffix}"):
text = p.read_text(encoding="utf-8")
if old in text:
p.write_text(text.replace(old, new), encoding="utf-8")
n += 1
return n
# 실행 전 git status 깨끗한지 확인, 반드시 버전관리 하에서

실패에서 배운 운영 팁#

  • 이메일·슬랙 자동 분류는 오분류 비용이 큼 → 처음엔 “초안 폴더 + 사람 확인”
  • 모든 스크립트에 if __name__ == "__main__"과 로그
  • 주 1회 “자동화 점검” 15분

FAQ#

Q. AI가 스크립트를 짜 주면 되나요? 초안은 가능. 경로 삭제·메일 발송·결제 API는 반드시 사람 검토.

Q. No-code(Zapier)와 비교? 단순 SaaS 연동은 노코드, 파일·Git·커스텀 규칙은 Python이 유리.

실습 체크 (발행 전 본인 확인)#

  • 글의 명령을 다른 폴더에서 한 번 더 실행해 보았는가
  • 독자가 준비물 없이 막히지 않는가
  • 관련 글과 역할이 겹치지 않는가

Python으로 반복 업무 줄이는 자동화 스크립트 8가지 본문 이미지
Python으로 반복 업무 줄이는 자동화 스크립트 8가지 본문 이미지

실습 체크리스트 (Python 자동화)#

  • 가상환경(venv)을 만들고 의존성을 고정했는가
  • 경로·계정 정보는 환경변수 또는 설정 파일로 분리했는가
  • 스크립트 1개를 dry-run 후 실제 실행했는가
  • 실패 시 로그가 남는가
  • 스케줄(작업 스케줄러/cron) 등록 전 수동 성공을 확인했는가

자동화 후보를 고르는 점수표#

모든 반복 업무를 스크립트로 만들 필요는 없습니다. 아래 점수가 높은 것부터 하세요.

기준높음낮음
빈도매일/매주분기 1회
실수 비용높음(누락·오타)낮음
입력 안정성형식 고정매번 다름
소요 시간10분+1분
롤백쉬움어려움

운영 체크 (스크립트 배포 전)#

  • 로그 파일 경로와 로테이션
  • 실패 시 알림(메일/슬랙/종료 코드)
  • 의존성 버전 고정
  • 샘플 데이터로 통합 테스트
  • README에 권한·스케줄 예시

유지보수 부채를 줄이는 습관#

스크립트는 “짠 날”보다 고친 날이 많습니다. 함수 이름에 업무 용어를 쓰고, 매직 넘버를 상수로 빼며, 날짜 처리는 타임존을 명시하세요. AI로 초안을 받았다면 삭제·전송·결제가 있는 줄에 주석 # DANGER를 달아 리뷰 포인트를 만드세요.

Windows 작업 스케줄러를 쓸 때는 “가장 권한 높은 실행”을 기본으로 켜지 마세요. 필요한 최소 권한 계정으로 돌리고, 작업 시작/종료 로그를 이벤트 뷰어 또는 파일로 남기면 장애 분석이 빨라집니다.

이 글을 끝내면 할 수 있는 것#

  • 반복 업무 8종 중 내게 해당하는 스크립트를 고른다.
  • venv·설정 분리·로그로 안전하게 실행한다.
  • “한 번 수동 성공 → 스케줄” 순서를 지킨다.

각 스크립트 유형별 해설 (왜 쓰는가)#

  1. 파일 일괄 이름 변경: 다운로드 폴더 정리, 날짜 접두
  2. CSV 병합·필터: 주간 리포트 원본 만들기
  3. 이미지 리사이즈: 블로그·썸네일 일괄
  4. API 폴링 후 저장: 상태 페이지·환율 등
  5. 로그에서 에러 카운트: 운영 1차 점검
  6. 중복 파일 해시 검사: 디스크 정리
  7. Git 상태 요약 메일/슬랙: 아침 브리핑
  8. 폴더 백업 zip: 배포 전 스냅샷

각 유형을 구현할 때 입출력 경로를 상수로 박지 말고 argparse 또는 환경변수로 받으세요. 그래야 다른 PC에서도 재사용됩니다.

공통 골격 예시#

# run_job.py — 개념 골격
import argparse, logging, sys
from pathlib import Path
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
log = logging.getLogger("job")
def main() -> int:
p = argparse.ArgumentParser()
p.add_argument("--dry-run", action="store_true")
p.add_argument("--input", type=Path, required=True)
args = p.parse_args()
log.info("start input=%s dry_run=%s", args.input, args.dry_run)
# ... 실제 처리 ...
log.info("done")
return 0
if __name__ == "__main__":
sys.exit(main())

트러블슈팅#

증상원인해결
경로 인코딩 깨짐Windows cp949pathlib + UTF-8 명시
권한 오류읽기 전용/잠금파일 닫힌 뒤 실행
스케줄만 실패작업 경로·venv 미지정절대 경로로 python.exe
API 429호출 과다sleep·백오프
잘못된 대량 삭제dry-run 생략기본 dry-run True

FAQ 보강#

Q. PowerShell로 충분하지 않나요? 단순 파일 작업은 충분합니다. 파싱·API·테스트가 늘면 Python이 유지보수에 유리한 경우가 많습니다.

Q. 회사 PC에 pip 설치가 막혀 있어요. 내장 venv + wheels 오프라인 설치, 또는 승인된 사내 PyPI를 사용하세요.

Q. 스크립트를 팀에 공유하는 최소 요건은? README 10줄, requirements.txt, dry-run, 샘플 입력이 있으면 충분합니다.

Q. AI가 짜 준 스크립트를 믿어도 되나요? 경로 삭제·메일 발송·결제 API는 특히 위험합니다. 부작용 있는 줄에 브레이크포인트를 걸고 한 줄씩 확인하세요.

현장에서 바로 쓰는 Python 자동화 운영 노트#

이 절은 Python 자동화 본문을 읽은 뒤 다음 영업일 안에 실행할 때 참고하는 운영 메모입니다. 도구 이름보다 중요한 것은 반복 가능한 순서와 실패 기록입니다. 처음 한 주는 완벽한 세팅보다 ‘최소 성공 1회’를 목표로 하세요. 성공 기준을 숫자나 체크박스로 적어 두면 나중에 회고할 때 감이 아니라 데이터로 판단할 수 있습니다.

첫 48시간 실행 계획 (Python 자동화)#

  1. 준비물 절을 보고 계정·설치·권한을 먼저 끝낸다. 본론 중간에서 설치하면 흐름이 끊긴다.
  2. 본문의 핵심 절차 중 가장 작은 단위 하나만 끝까지 재현한다.
  3. 트러블슈팅 표에서 해당 증상 행을 찾아 해결을 적용하고, 없으면 새 행을 메모한다.
  4. FAQ에서 비용·보안·팀 도입 질문을 읽고 내 환경에 해당하는지 표시한다.
  5. 실습 체크리스트를 인쇄하거나 이슈 한 장에 옮겨 완료 표시를 남긴다.
  6. 동료가 있다면 5분 데모를 보여 주고, 설명 중 막힌 지점을 문서에 보완한다.

품질을 유지하는 주간 루틴#

Python 자동화 관련 설정과 문서는 한 번 만들고 방치하면 금방 낡습니다. 매주 15분만 투자해 다음을 점검하세요. 지난주에 새로 생긴 예외 상황, 팀원이 물은 질문, 실패한 명령, 유료 결제 여부, 보안 정책 변경 여부입니다. 변경이 있으면 본문 요약이 아니라 체크리스트와 트러블슈팅 표를 먼저 고칩니다. 긴 서론을 고치는 것보다 표 한 줄이 다음 독자를 더 많이 구합니다.

혼자 일할 때와 팀에서 쓸 때의 차이#

개인 사이드 프로젝트에서는 속도와 실험이 우선일 수 있습니다. 하지만 팀 저장소·고객 데이터·공통 인프라가 걸리면 Python 자동화 사용 방식이 달라져야 합니다. 권한, 감사 로그, 승인 단계, 공유 채널 공지 같은 사회적 절차가 기술적 절차만큼 중요합니다. 모호하면 보수적으로 선택하세요. 막힌 시간을 줄이려다 사고를 키우는 경우가 더 비쌉니다. 팀 합의 문장이 없다면 이 글의 체크리스트를 복사해 ‘우리 팀 버전’ 헤더만 바꿔 공유하는 것으로 충분합니다.

측정 지표 제안#

지표측정 방법해석
첫 성공까지 시간타이머온보딩 문서 개선 신호
주간 재사용 횟수간단한 해시 체크습관 정착 여부
실패 재발같은 증상 메모트러블슈팅 보강 필요
도움 요청 횟수슬랙/구두문서 공백 위치
중단 결정2주 후 유지/폐기도구 과잉 방지

폐기 기준 (중요)#

Python 자동화가 팀에 안 맞을 수도 있습니다. 실패를 인정하는 기준을 미리 정하세요. 예를 들어 2주 동안 핵심 절차를 3회 이상 재현하지 못했거나, 보안 검토에서 막혔거나, 기존 도구 대비 명확한 이득이 없으면 중단이 올바른 결정입니다. 중단할 때도 설정 내보내기·권한 회수·문서 보관 위치를 남겨 두면 다음에 재도전할 때 비용이 줄어듭니다. 생산성 글의 목적은 도구 수집이 아니라 더 적은 마찰로 같은 품질의 결과를 내는 것입니다.

독자가 자주 놓치는 디테일#

  • 버전을 안 적으면 한 달 뒤 같은 글이 거짓이 됩니다. 환경 절에 버전을 남기세요.
  • 스크린샷만 있고 텍스트 명령이 없으면 접근성과 검색성이 떨어집니다.
  • 성공 로그만 남기고 실패 로그를 지우면 학습이 사라집니다.
  • 다른 글과 주제가 비슷할 때는 이 글의 완료 정의만 다시 읽고 범위를 지키세요.
  • 공유 전에 시크릿·사내 URL·고객명이 있는지 검색하세요.

정리#

8개 중 폴더 정리·로그 추출·헬스체크부터 스케줄에 올려 보세요. 자동화는 한 번 만들면 매주 시간이 돌아옵니다.

참고: Python 문서 · Real Python

글 공유

이 글이 도움이 되셨다면 다른 사람들과 공유해 주세요!

Python으로 반복 업무 줄이는 자동화 스크립트 8가지
https://example.com/posts/python-automation-scripts-8/
작성자
Donastar
게시일
2026-07-05
라이선스
CC BY-NC-SA 4.0
공지사항
아직 데이터가 없습니다
Profile Image of the Author
Donastar
Hello!
카테고리
태그
사이트 통계
12
카테고리
2
태그
49
총 단어 수
6,137
운영 일수
0
마지막 활동
0일 전

목차