파이썬 고급 문법 – Asyncio, Decorator

데이터 처리: 리스트, 딕셔너리, Pandas의 활용법

언제 사용하나?

  • 로그 데이터 분석, 사용자 정보 관리, 웹 스크래핑 결과 정리 등
  • CSV, 엑셀, API 데이터를 다룰 때 필수

기본 내장 타입: 리스트와 딕셔너리

리스트 예제

scores = [87, 92, 78, 90]
high_scores = [s for s in scores if s > 85]
print(high_scores)  # [87, 92, 90]

딕셔너리 예제

students = {"Alice": 88, "Bob": 76, "Charlie": 93}
passed = {k: v for k, v in students.items() if v > 80}

Pandas로 대량 데이터 처리

import pandas as pd

df = pd.read_csv("students.csv")
top_students = df[df["score"] > 85]
print(top_students.sort_values(by="score", ascending=False))

실무 적용

  • 웹 크롤링 후 정제된 데이터 분석
  • 보고서용 집계표 자동 생성
  • AI 모델 학습 데이터 준비

비동기 프로그래밍 (Asyncio)

언제 사용하나?

  • API 다수 호출 시 대기 시간 줄이기
  • 채팅 서버, 웹소켓 등 실시간 통신 처리
  • 자동화 봇, 크롤러에 유용

핵심 문법: async, await, asyncio

기본 구조

import asyncio

async def fetch_page(url):
    print(f"{url}에서 데이터 가져오는 중...")
    await asyncio.sleep(1)  # 비동기 대기
    return f"{url} 완료"

async def main():
    urls = ["site1.com", "site2.com", "site3.com"]
    tasks = [fetch_page(u) for u in urls]
    results = await asyncio.gather(*tasks)
    print(results)

asyncio.run(main())

실무 활용

  • 웹 크롤링 자동화 (BeautifulSoup + aiohttp)
  • 대규모 비동기 테스트 자동화
  • Discord 봇, Telegram 봇 개발

파일 입출력 (File I/O)

언제 사용하나?

  • 로그 저장, 사용자 기록 남기기
  • CSV/JSON 파일 저장 또는 불러오기
  • 텍스트 전처리 작업

파일 읽고 쓰기

쓰기

with open("log.txt", "w", encoding="utf-8") as f:
    f.write("작업 시작\n")

읽기

with open("log.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        print(line.strip())

실무 예시

  • 서버 로그 자동 수집
  • 사용자 통계 파일 저장
  • 엑셀 → CSV 변환 자동화

데코레이터 (Decorator)

언제 사용하나?

  • 함수 호출 전후로 로깅, 인증, 시간 측정 기능 추가
  • 코드를 깔끔하게 유지하고 DRY 원칙을 적용할 때

데코레이터 만들기

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} 실행 시간: {time.time() - start:.2f}초")
        return result
    return wrapper

@timer
def process():
    time.sleep(1)
    print("작업 완료")

process()

실무 적용 예시

  • 함수 실행 시간 측정 (성능 최적화)
  • 사용자 인증 체크 데코레이터 (웹 개발)
  • 캐시 활용 (LRU 캐시, functools 사용)

제너레이터 (Generator)

언제 사용하나?

  • 수천만 개의 데이터처럼, 한 번에 불러오기 어려운 대용량 처리
  • 중간 결과만 필요한 경우 빠르게 처리 가능

기본 예제

def count_up_to(max):
    count = 1
    while count <= max:
        yield count
        count += 1

for num in count_up_to(5):
    print(num)

실무 사용 예시

  • CSV 한 줄씩 읽기 (csv.reader)
  • 실시간 데이터 스트리밍 처리
  • 머신러닝 배치 생성기 (데이터셋의 순차 전송)

컨텍스트 매니저 (Context Manager)

언제 사용하나?

  • 파일, DB, 네트워크 연결 해제를 자동으로 처리하고 싶을 때
  • 예외 발생 여부와 관계없이 자원 해제를 보장하고 싶을 때

기본 사용: 파일 처리

with open("example.txt", "w") as f:
    f.write("자동으로 닫힘")

사용자 정의 컨텍스트 매니저

class ManagedConnection:
    def __enter__(self):
        print("연결 시작")
        self.resource = "DB 연결"
        return self.resource

    def __exit__(self, exc_type, exc_val, traceback):
        print("연결 종료")

with ManagedConnection() as conn:
    print(conn)

실무 활용

  • 데이터베이스 트랜잭션 관리
  • 로그 파일 자동 저장 및 닫기
  • 외부 라이브러리(API) 연결 자원 정리

이 문법들을 언제, 어떻게 써야 할까?

문법 사용 시기 실무 예
데이터 처리 파일/웹/DB 데이터 분석 Pandas로 분석 보고서 자동화
비동기 처리 API 호출, 크롤링 네이버 뉴스 비동기 수집
파일 I/O 데이터 저장/로드 로그 기록, 백업 저장
데코레이터 함수 확장, 코드 유지 로깅, 성능 체크 데코레이터
제너레이터 대용량 데이터 처리 스트리밍 로그 분석
컨텍스트 매니저 자원 자동 정리 DB 트랜잭션, 파일 안전 닫기

정리 : 고급 문법을 활용하자!

위에서 소개한 6가지 문법은 파이썬의 유연성과 강력함을 가장 잘 보여주는 도구입니다.
단순히 문법을 암기하는 것이 아니라, 문제를 어떻게 해결할 수 있는가?라는 관점으로 접근해야 실력이 향상됩니다.

파이썬 기초 입문 – 리스트, 셋, 튜플, 딕셔너리

FastAPI Pydantic SQLAlchemy 연동 완전 정복(2025년)

Leave a Comment