본문 바로가기
카테고리 없음

Python 데이터 엔지니어링 고급 문법 가이드

by fisherman1 2025. 5. 24.

Python 데이터 엔지니어링 고급 문법 가이드

개요 : 데이터 엔지니어링에서는 대용량 처리, 시스템 자원 관리, 최적화 기술이 필수입니다. 이 글은 Python 상급자를 위한 데이터 엔지니어링 최적화 문법을 설명하고 실무 적용 예제를 제공합니다.

1. 제너레이터로 대용량 파일 처리

yield 키워드를 이용한 제너레이터는 메모리를 최소화하며 스트리밍 데이터를 처리할 수 있습니다.

예시코드
제너레이터로 텍스트 파일 읽기
def read_large_file(path):
    with open(path, "r") as f:
        for line in f:
            yield line.strip()

for row in read_large_file("log.txt"):
    process(row)
        

2. 컨텍스트 매니저로 자원 관리

with 구문과 __enter__/__exit__ 메서드를 통해 DB나 파일을 안전하게 사용할 수 있습니다.

예시코드
SQLite 연결 자동 정리
import sqlite3

with sqlite3.connect("data.db") as conn:
    cur = conn.cursor()
    cur.execute("SELECT * FROM users")
    print(cur.fetchall())
        

3. 데코레이터로 파이프라인 추상화

로깅, 예외 처리, 모니터링 등을 데코레이터로 함수에 주입하여 파이프라인 로직을 정리할 수 있습니다.

예시코드
로그 데코레이터
def log_step(func):
    def wrapper(*args, **kwargs):
        print(f"[LOG] 실행: {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@log_step
def extract():
    print("데이터 추출 중...")

extract()
        

4. 병렬 처리로 작업 시간 단축

concurrent.futures를 활용하면 I/O 또는 CPU 작업을 멀티스레드/프로세스로 빠르게 수행할 수 있습니다.

예시코드
ThreadPoolExecutor 예시
from concurrent.futures import ThreadPoolExecutor

def fetch_data(url):
    return f"{url} 완료"

urls = ["url1", "url2", "url3"]
with ThreadPoolExecutor(max_workers=3) as executor:
    results = executor.map(fetch_data, urls)
    for r in results:
        print(r)
        

5. 함수형 프로그래밍으로 파이프라인 구성

map, filter, lambda, reduce를 활용하여 선언형으로 데이터를 처리할 수 있습니다.

예시코드
map/filter/reduce 활용
from functools import reduce

data = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, data))
even = list(filter(lambda x: x % 2 == 0, data))
summed = reduce(lambda x, y: x + y, data)

print(squared, even, summed)
        

6. 캐시로 중복 계산 제거

@lru_cache를 이용해 함수 결과를 저장하면 반복 계산을 줄여 성능 향상에 도움이 됩니다.

예시코드
LRU Cache 활용
from functools import lru_cache

@lru_cache(maxsize=128)
def heavy_task(n):
    print(f"계산 중: {n}")
    return n * n

print(heavy_task(10))
print(heavy_task(10))  # 캐시에서 반환
        

요약 정리

주제 핵심 문법 활용 목적
제너레이터 yield 스트리밍 처리
컨텍스트 매니저 with, __enter__, __exit__ DB/파일 정리 자동화
데코레이터 @decorator 로깅, 에러 핸들링
병렬 처리 concurrent.futures 멀티스레딩/멀티프로세싱
함수형 프로그래밍 map, filter, lambda, reduce 데이터 흐름 처리
캐싱 @lru_cache 반복 계산 제거