Python 자동화 마스터 1편: Python 기초와 개발 환경 설정
Python Automation Master Part 1: Python Basics and Development Environment Setup
서론: 왜 Python으로 자동화하는가?
현대 업무 환경에서 반복적인 작업은 시간과 에너지를 소모하는 큰 요인입니다. 엑셀 파일 정리, 이메일 발송, 파일 백업, 데이터 수집 등 매일 반복되는 작업들을 자동화할 수 있다면 얼마나 좋을까요? Python은 이러한 자동화 작업에 가장 적합한 프로그래밍 언어입니다.
Python이 자동화에 최적인 이유는 다음과 같습니다:
- 쉬운 문법: 영어와 유사한 직관적인 문법으로 프로그래밍 초보자도 빠르게 배울 수 있습니다.
- 풍부한 라이브러리: 파일 처리, 웹 스크래핑, 엑셀 조작, 이메일 전송 등 거의 모든 작업에 대한 라이브러리가 존재합니다.
- 크로스 플랫폼: Windows, Mac, Linux 어디서든 동일하게 동작합니다.
- 활발한 커뮤니티: 문제가 생겨도 검색하면 대부분의 해결책을 찾을 수 있습니다.
- 무료: 오픈소스로 누구나 무료로 사용할 수 있습니다.
이 시리즈에서는 Python을 활용한 실용적인 자동화 기법을 단계별로 배워나갈 것입니다. 첫 번째 편에서는 Python 설치부터 개발 환경 설정, 기본 문법 복습, 그리고 첫 번째 자동화 스크립트 작성까지 다루겠습니다.
1. Python 설치하기
1.1 Windows에서 Python 설치
Windows에서 Python을 설치하는 방법은 다음과 같습니다:
- Python 공식 웹사이트에 접속합니다.
- "Download Python 3.x.x" 버튼을 클릭하여 최신 버전을 다운로드합니다.
- 다운로드된 설치 파일을 실행합니다.
- 중요! "Add Python to PATH" 체크박스를 반드시 선택합니다.
- "Install Now"를 클릭하여 설치를 완료합니다.
설치 확인을 위해 명령 프롬프트(CMD)를 열고 다음 명령어를 입력합니다:
python --version
pip --version
버전 정보가 출력되면 설치가 성공적으로 완료된 것입니다.
1.2 Mac에서 Python 설치
Mac에는 Python 2가 기본 설치되어 있지만, Python 3을 별도로 설치해야 합니다:
방법 1: 공식 설치 파일 사용
- Python 공식 웹사이트에서 macOS용 설치 파일을 다운로드합니다.
- 다운로드된 .pkg 파일을 실행하여 설치합니다.
방법 2: Homebrew 사용 (권장)
# Homebrew 설치 (없는 경우)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Python 설치
brew install python
1.3 Linux에서 Python 설치
대부분의 Linux 배포판에는 Python이 기본 설치되어 있습니다. 최신 버전이 필요한 경우:
Ubuntu/Debian:
sudo apt update
sudo apt install python3 python3-pip python3-venv
CentOS/RHEL:
sudo yum install python3 python3-pip
Fedora:
sudo dnf install python3 python3-pip
2. 가상환경 설정
가상환경은 프로젝트별로 독립적인 Python 환경을 만들어주는 도구입니다. 왜 가상환경이 필요할까요?
- 프로젝트마다 다른 버전의 패키지를 사용할 수 있습니다.
- 시스템 Python을 깨끗하게 유지할 수 있습니다.
- 프로젝트 의존성을 명확하게 관리할 수 있습니다.
2.1 venv (기본 제공)
Python 3.3 이상에서는 venv 모듈이 기본 제공됩니다:
# 가상환경 생성
python -m venv myenv
# Windows에서 활성화
myenv\Scripts\activate
# Mac/Linux에서 활성화
source myenv/bin/activate
# 비활성화
deactivate
가상환경이 활성화되면 프롬프트 앞에 (myenv)가 표시됩니다.
2.2 virtualenv
virtualenv는 더 많은 기능을 제공하는 서드파티 도구입니다:
# virtualenv 설치
pip install virtualenv
# 가상환경 생성
virtualenv myenv
# 특정 Python 버전으로 생성
virtualenv -p python3.11 myenv
3. pip와 패키지 관리
pip는 Python의 패키지 관리자입니다. 필요한 라이브러리를 쉽게 설치하고 관리할 수 있습니다.
3.1 기본 명령어
# 패키지 설치
pip install requests
# 특정 버전 설치
pip install requests==2.28.0
# 패키지 업그레이드
pip install --upgrade requests
# 패키지 제거
pip uninstall requests
# 설치된 패키지 목록 확인
pip list
# 패키지 정보 확인
pip show requests
3.2 requirements.txt 활용
프로젝트의 의존성을 파일로 관리하면 다른 환경에서도 동일한 패키지를 쉽게 설치할 수 있습니다:
# 현재 설치된 패키지를 requirements.txt로 저장
pip freeze > requirements.txt
# requirements.txt의 패키지 일괄 설치
pip install -r requirements.txt
requirements.txt 예시:
requests==2.31.0
beautifulsoup4==4.12.2
openpyxl==3.1.2
python-dotenv==1.0.0
4. VS Code 개발 환경 설정
Visual Studio Code는 Python 개발에 가장 인기 있는 무료 에디터입니다.
4.1 VS Code 설치
- VS Code 공식 웹사이트에서 다운로드합니다.
- 운영체제에 맞는 설치 파일을 실행합니다.
4.2 필수 확장 프로그램
VS Code를 열고 확장 프로그램(Extensions) 탭에서 다음을 설치합니다:
- Python (Microsoft): Python 언어 지원, 디버깅, 린팅
- Pylance (Microsoft): 향상된 코드 자동완성 및 타입 체크
- Python Indent: 자동 들여쓰기 지원
- autoDocstring: 독스트링 자동 생성
4.3 VS Code 설정
settings.json에 다음 설정을 추가하면 더 나은 개발 경험을 얻을 수 있습니다:
{
"python.defaultInterpreterPath": "python",
"python.formatting.provider": "black",
"editor.formatOnSave": true,
"python.linting.enabled": true,
"python.linting.pylintEnabled": true
}
5. Python 기본 문법 복습
자동화 스크립트 작성에 필요한 핵심 문법을 빠르게 복습해봅시다.
5.1 변수와 자료형
# 기본 자료형
name = "Python" # 문자열 (str)
version = 3.12 # 실수 (float)
count = 100 # 정수 (int)
is_active = True # 불리언 (bool)
# 컬렉션 자료형
fruits = ["apple", "banana", "cherry"] # 리스트
coordinates = (10, 20) # 튜플
person = {"name": "홍길동", "age": 30} # 딕셔너리
unique_numbers = {1, 2, 3, 4, 5} # 세트
# 타입 확인
print(type(name)) #
5.2 조건문
age = 25
if age < 18:
print("미성년자입니다.")
elif age < 65:
print("성인입니다.")
else:
print("노인입니다.")
# 삼항 연산자
status = "성인" if age >= 18 else "미성년자"
5.3 반복문
# for 문
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# range 활용
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# enumerate 활용 (인덱스와 값 동시에)
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# while 문
count = 0
while count < 5:
print(count)
count += 1
# 리스트 컴프리헨션
squares = [x**2 for x in range(10)]
even_numbers = [x for x in range(20) if x % 2 == 0]
5.4 함수
# 기본 함수
def greet(name):
return f"안녕하세요, {name}님!"
# 기본값 매개변수
def greet_with_time(name, time="아침"):
return f"좋은 {time}이에요, {name}님!"
# 가변 인자
def sum_all(*args):
return sum(args)
# 키워드 인자
def create_profile(**kwargs):
return kwargs
# 람다 함수
square = lambda x: x ** 2
add = lambda x, y: x + y
# 사용 예시
print(greet("홍길동"))
print(sum_all(1, 2, 3, 4, 5))
print(create_profile(name="김철수", age=25, city="서울"))
5.5 예외 처리
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except Exception as e:
print(f"오류 발생: {e}")
else:
print("성공적으로 실행되었습니다.")
finally:
print("항상 실행됩니다.")
6. 첫 번째 자동화 스크립트 작성
이제 배운 내용을 활용하여 실용적인 자동화 스크립트를 작성해봅시다. 지정된 폴더의 파일들을 확장자별로 정리하는 스크립트입니다.
6.1 프로젝트 구조
file_organizer/
├── organize.py
├── requirements.txt
└── README.md
6.2 스크립트 코드
"""
파일 정리 자동화 스크립트
지정된 폴더의 파일들을 확장자별로 분류합니다.
"""
import os
import shutil
from datetime import datetime
# 확장자별 폴더 매핑
EXTENSION_FOLDERS = {
# 이미지
'.jpg': 'Images',
'.jpeg': 'Images',
'.png': 'Images',
'.gif': 'Images',
'.bmp': 'Images',
'.svg': 'Images',
# 문서
'.pdf': 'Documents',
'.doc': 'Documents',
'.docx': 'Documents',
'.xls': 'Documents',
'.xlsx': 'Documents',
'.ppt': 'Documents',
'.pptx': 'Documents',
'.txt': 'Documents',
# 동영상
'.mp4': 'Videos',
'.avi': 'Videos',
'.mkv': 'Videos',
'.mov': 'Videos',
# 음악
'.mp3': 'Music',
'.wav': 'Music',
'.flac': 'Music',
# 압축파일
'.zip': 'Archives',
'.rar': 'Archives',
'.7z': 'Archives',
'.tar': 'Archives',
'.gz': 'Archives',
# 프로그램
'.exe': 'Programs',
'.msi': 'Programs',
'.dmg': 'Programs',
}
def get_folder_for_extension(extension):
"""확장자에 해당하는 폴더명을 반환합니다."""
return EXTENSION_FOLDERS.get(extension.lower(), 'Others')
def organize_files(source_folder):
"""
지정된 폴더의 파일들을 확장자별로 정리합니다.
Args:
source_folder: 정리할 폴더 경로
Returns:
정리된 파일 수
"""
if not os.path.exists(source_folder):
print(f"오류: '{source_folder}' 폴더가 존재하지 않습니다.")
return 0
organized_count = 0
# 폴더 내 파일들을 순회
for filename in os.listdir(source_folder):
file_path = os.path.join(source_folder, filename)
# 폴더는 건너뛰기
if os.path.isdir(file_path):
continue
# 확장자 추출
_, extension = os.path.splitext(filename)
if not extension:
continue
# 대상 폴더 결정
target_folder_name = get_folder_for_extension(extension)
target_folder = os.path.join(source_folder, target_folder_name)
# 대상 폴더가 없으면 생성
if not os.path.exists(target_folder):
os.makedirs(target_folder)
print(f"폴더 생성: {target_folder_name}")
# 파일 이동
target_path = os.path.join(target_folder, filename)
# 동일한 파일명이 있는 경우 처리
if os.path.exists(target_path):
name, ext = os.path.splitext(filename)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
new_filename = f"{name}_{timestamp}{ext}"
target_path = os.path.join(target_folder, new_filename)
shutil.move(file_path, target_path)
print(f"이동: {filename} -> {target_folder_name}/")
organized_count += 1
return organized_count
def main():
"""메인 실행 함수"""
print("=" * 50)
print("파일 정리 자동화 스크립트")
print("=" * 50)
# 정리할 폴더 경로 입력
source_folder = input("정리할 폴더 경로를 입력하세요: ").strip()
if not source_folder:
# 기본값: 현재 사용자의 다운로드 폴더
source_folder = os.path.join(os.path.expanduser("~"), "Downloads")
print(f"기본 경로 사용: {source_folder}")
# 확인
confirm = input(f"'{source_folder}' 폴더를 정리하시겠습니까? (y/n): ")
if confirm.lower() != 'y':
print("취소되었습니다.")
return
# 파일 정리 실행
print("\n파일 정리를 시작합니다...\n")
count = organize_files(source_folder)
print("\n" + "=" * 50)
print(f"완료! 총 {count}개의 파일이 정리되었습니다.")
print("=" * 50)
if __name__ == "__main__":
main()
6.3 스크립트 실행
# 스크립트 실행
python organize.py
7. 마무리 및 다음 편 예고
이번 편에서는 Python 자동화의 기초를 다졌습니다. 우리가 배운 내용을 정리하면:
- Python이 자동화에 적합한 이유
- Windows, Mac, Linux에서 Python 설치 방법
- 가상환경(venv, virtualenv)의 필요성과 사용법
- pip를 통한 패키지 관리
- VS Code 개발 환경 설정
- Python 기본 문법 복습
- 첫 번째 자동화 스크립트 작성
다음 편 예고: Python 자동화 마스터 2편에서는 파일 및 폴더 자동화를 심층적으로 다룹니다. os 모듈, pathlib, shutil을 활용한 고급 파일 처리 기법과 실용적인 파일 정리 프로젝트를 함께 만들어봅니다!