#05 – 파일 핸들링(File Handling) & 예외 처리(Exceptions)
요약
Python의 파일 핸들링과 예외 처리 방법을 다루는 개발 가이드입니다. pathlib 모듈을 활용한 경로 관리, JSON 및 CSV를 이용한 구조화된 데이터 처리, 그리고 프로그램의 안정성을 높이는 예외 처리 메커니즘을 학습합니다.
핵심 포인트
- pathlib 모듈을 사용한 운영 체제 독립적인 파일 경로 관리
- JSON 및 CSV 형식을 활용한 데이터 읽기 및 쓰기 방법
- try-except-finally 구문을 통한 견고한 예외 처리 및 오류 대응
- 실무적인 데이터 저장 및 로깅 아키텍처 구축 기초
5일 차에 오신 것을 환영합니다! 오늘은 휘발성이고 일시적인 인메모리(in-memory) 변수에서 벗어나 **지속 가능한 저장소(persistent storage)와 애플리케이션 내구성(application durability)**으로 전환합니다. 운영 체제의 파일 시스템과 안전하게 상호 작용하는 방법, 구조화된 산업 데이터 패턴을 읽고 쓰는 방법, 실제 운영 중 발생하는 충돌(crash)을 우아하게 처리하는 방법, 그리고 전문적인 로깅 아키텍처(logging architectures)를 사용하여 실행 타임라인을 문서화하는 방법을 배우게 될 것입니다. 💾
1. 파일 핸들링(File Handling) & pathlib 📄
Python의 pathlib 모듈은 파일 경로를 단순한 텍스트 문자열이 아닌 스마트한 객체 구조로 취급합니다. 이를 통해 운영 체제마다 다른 슬래시 방향(Windows는 \를 사용하고, Mac/Linux는 /를 사용)으로 인해 발생하는 버그를 방지할 수 있습니다.
- 읽기 (
"r"): 파일 내용을 메모리로 로드합니다. - 쓰기 (
"w"): 기존 파일 내용을 모두 지우고 처음부터 새로운 페이로드(payload)를 작성합니다. - 추가 (
"a"): 파일의 끝을 대상으로 하며, 기존 내용을 덮어쓰지 않고 새로운 텍스트를 추가합니다.
🌱 쉬운 입문 예제
from pathlib import Path
# 현재 워크스페이스 디렉토리의 파일을 가리키는 경로 참조 생성
...
🏛️ 실무 예제: 멀티 플랫폼 시스템 텔레메트리(Telemetry) 추가기
from pathlib import Path
from datetime import datetime
...
2. 구조화된 데이터 형식 (JSON & CSV) 📊
A. JSON (JavaScript Object Notation)
JSON은 웹 데이터 교환 및 구성 상태(configuration states)에 사용되는 텍스트 형식입니다. 이는 Python의 딕셔너리(dictionaries) 및 리스트(lists)와 유사한 구조를 가집니다.
🌱 쉬운 입문 예제
import json
user_profile = {"username": "alice", "active": True, "roles": ["admin", "dev"]}
...
🏛️ 실무 예제: 로컬 설정 파일 저장 및 수정
import json
from pathlib import Path
...
B. CSV (Comma-Separated Values)
CSV 파일은 표 형식의 스프레드시트 데이터를 일반 텍스트 줄에 저장합니다.
🌱 쉬운 입문 예제
import csv
# 레코드를 행(rows)에 깔끔하게 기록하기
...
🏛️ 실무 예제: 제품 재고 보고서 처리 엔진
import csv
from pathlib import Path
...
3. 예외 처리 (Exception Handling) 🛠️
예외 (Exceptions)는 애플리케이션 실행 중에 감지되는 오류입니다. **예외 처리 (Exception Handling)**는 무언가 잘못되었을 때 프로그램이 예상치 못하게 충돌(crash)하는 대신, 프로그램이 원활하게 계속 실행될 수 있도록 유지해 줍니다.
try: 예상치 못한 오류를 발생시킬 수 있는 코드 블록을 감쌉니다.except: 특정 런타임 오류 (runtime errors)를 포착하고 처리하는 코드 블록입니다.else:try블록 내부의 코드가 아무런 오류 없이 실행되었을 때_만_ 실행됩니다.finally: 오류 발생 여부와 상관없이 항상 실행됩니다. 데이터베이스 연결 종료와 같은 정리 작업 (cleanup tasks)에 이상적입니다.raise: 특정 오류를 의도적으로 발생시킵니다.
🌱 쉬운 입문 예제
try:
number = int(input("10을 나눌 숫자를 입력하세요: "))
result = 10 / number
...
🏛️ 실무 예제: 견고한 외부 API 데이터 파일 추출 파이프라인 (Robust External API Data File Extraction Pipeline)
from pathlib import Path
def fetch_transaction_payload(filename: str) -> str:
...
4. 사용자 정의 예외 (Custom Exceptions) 🚨
표준 예외 (예: ValueError)는 종종 너무 광범위합니다. **사용자 정의 예외 (Custom Exceptions)**를 생성하면 비즈니스 로직 내의 실제 문제에 따라 특정 오류의 이름을 붙일 수 있어, 버그를 훨씬 더 쉽게 추적할 수 있습니다.
🌱 쉬운 입문 예제
# 사용자 정의 예외 클래스는 기본 Exception 클래스를 직접 상속받습니다
class AgeRestrictionError(Exception):
pass
...
🏛️ 실무 예제: 디지털 지갑 거래 가드레일 (Digital Wallet Transaction Guardrail)
class InsufficientFundsError(Exception):
"""계좌가 활성 잔액보다 많은 금액을 인출하려고 시도할 때 발생합니다."""
def __init__(self, requested: float, available: float):
...
5. 로깅 (Logging) 🪵
오류를 추적하기 위해 print()를 사용하는 것은 안티 패턴 (anti-pattern)입니다. 터미널이 닫히면 출력 내용이 사라지기 때문입니다. logging 모듈은 이벤트를 심각도 (severity)에 따라 분류하고 디스크에 기록하는 영구적인 추적기를 제공합니다.
로그 레벨 (Log Levels)
| 레벨 (Level) | 심각도 코드 값 (Severity Code Value) | 핵심 기능적 목적지 용도 (Core Functional Destination Purpose) |
|---|---|---|
DEBUG | 10 | 로컬 디버깅 (local debugging)을 위한 상세한 진단 정보. |
| ... |
🌱 쉬운 시작 예제 (Easy Starter Example)
import logging
# 즉시 사용 가능한 간단한 로거 설정 (Simple logger configuration setup out of the box)
...
🏛️ 실무 예제: 엔터프라이즈 애플리케이션 로깅 아키텍처 (Real-World Example: Enterprise Application Logging Architecture)
import logging
from pathlib import Path
...
6. 실습 과제: 데이터 처리 엔진 (Practice Challenge: Data Processing Engine) 🏋️
오늘 배운 모든 내용을 하나의 종합적인 연습 문제로 결합해 보겠습니다. 파일에서 사용자 데이터셋을 읽고, 사용자 정의 예외 (custom exceptions)를 사용하여 정보를 검증하며, 모든 내용을 로컬 메트릭 (metrics) 파일에 기록하는 데이터 수집 (data ingestion) 스크립트를 작성할 것입니다.
1단계: 프로젝트 파일 설정 (Step 1: Set Up Your Project Files)
4일 차에 익힌 터미널 기술을 사용하여, 새로운 스크립트 파일이 포함된 워크스페이스를 생성하세요:
uv init day_5_challenge && cd day_5_challenge
touch data_processor.py
2단계: 코드 베이스 구현 (Step 2: Implement the Code Base)
data_processor.py를 열고 프로덕션 데이터 파싱 파이프라인 (production data parsing pipeline)을 구현하세요:
# data_processor.py
import json
import csv
...
3단계: 출력 결과 실행 및 확인 (Step 3: Run and Verify Your Outputs)
터미널 환경 내에서 처리 엔진 스크립트를 실행하세요:
uv run data_processor.py
이제 생성된 출력물을 확인하세요. cleansed_output.json 파일에는 검증된 행 (rows)만 포함되어 있을 것입니다:
[
{
"user_id": "s_rogers",
...
system_execution.log를 열어 엔진이 충돌 없이 백그라운드에서 어떻게 오류를 추적했는지 검토하세요:
2026-07-17 23:59:00,124 - [INFO] - Initializing raw transaction CSV import pipeline.
2026-07-17 23:59:00,125 - [INFO] - Successfully processed user record: 's_rogers'.
2026-07-17 23:59:00,125 - [WARNING] - Skipping row registry error: Row 3: Missing critical data fields.
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기