🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Python 컨텍스트 매니저 완벽 가이드 - 슬라이드 1/11
C

CodeDeck AI

2025. 11. 8. · 36 Views

Python 컨텍스트 매니저 완벽 가이드

파일, 데이터베이스, 네트워크 연결 등의 리소스를 안전하게 관리하는 컨텍스트 매니저의 모든 것을 배워봅니다. with 문부터 커스텀 컨텍스트 매니저 작성까지 실무에서 바로 활용할 수 있는 패턴들을 소개합니다.


카테고리:Python
언어:Python
메인 태그:#Python
서브 태그:
#ContextManager#with문#리소스관리#고급기능

들어가며

이 글에서는 Python 컨텍스트 매니저 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. 기본_with_문_사용하기
  2. 여러_리소스_동시_관리
  3. 클래스로_컨텍스트_매니저_만들기
  4. contextlib_데코레이터_활용
  5. 데이터베이스_트랜잭션_관리
  6. suppress로_예외_무시하기
  7. ExitStack으로_동적_리소스_관리
  8. Lock을_활용한_스레드_안전성
  9. redirect_stdout으로_출력_리다이렉트
  10. 재사용_가능한_컨텍스트_매니저

1. 기본 with 문 사용하기

개요

with 문은 파일이나 리소스를 자동으로 열고 닫아줍니다. 예외가 발생해도 안전하게 리소스가 정리됩니다.

코드 예제

with open('data.txt', 'r') as file:
    content = file.read()
    print(content)
# 파일이 자동으로 닫힘

설명

with 블록이 끝나면 자동으로 file.close()가 호출되어 파일이 안전하게 닫힙니다.


2. 여러 리소스 동시 관리

개요

여러 개의 컨텍스트 매니저를 한 번에 사용할 수 있습니다. 각각의 리소스가 독립적으로 관리됩니다.

코드 예제

with open('input.txt', 'r') as infile, \
     open('output.txt', 'w') as outfile:
    data = infile.read()
    outfile.write(data.upper())

설명

두 파일을 동시에 열어 입력 파일의 내용을 읽고, 대문자로 변환하여 출력 파일에 씁니다.


3. 클래스로 컨텍스트 매니저 만들기

개요

__enter__와 exit 메서드를 구현하여 커스텀 컨텍스트 매니저를 만들 수 있습니다.

코드 예제

class Timer:
    def __enter__(self):
        self.start = time.time()
        return self

    def __exit__(self, *args):
        print(f"실행 시간: {time.time() - self.start}초")

설명

with Timer(): 블록 안의 코드 실행 시간을 자동으로 측정하고 출력합니다.


4. contextlib 데코레이터 활용

개요

@contextmanager 데코레이터를 사용하면 간단하게 컨텍스트 매니저를 만들 수 있습니다.

코드 예제

from contextlib import contextmanager

@contextmanager
def temp_change_dir(path):
    old_dir = os.getcwd()
    os.chdir(path)
    yield
    os.chdir(old_dir)

설명

yield 전에 설정 작업을, yield 후에 정리 작업을 수행합니다. 임시로 디렉토리를 변경했다가 원래대로 되돌립니다.


5. 데이터베이스 트랜잭션 관리

개요

컨텍스트 매니저로 데이터베이스 트랜잭션을 안전하게 관리할 수 있습니다.

코드 예제

@contextmanager
def transaction(connection):
    try:
        yield connection
        connection.commit()
    except Exception:
        connection.rollback()
        raise

설명

with transaction(conn): 블록 안에서 오류가 발생하면 rollback하고, 성공하면 commit을 자동으로 처리합니다.


6. suppress로 예외 무시하기

개요

contextlib.suppress를 사용하면 특정 예외를 조용히 무시할 수 있습니다.

코드 예제

from contextlib import suppress

with suppress(FileNotFoundError):
    os.remove('temp_file.txt')
# 파일이 없어도 에러 없이 계속 진행

설명

FileNotFoundError가 발생해도 프로그램이 중단되지 않고 계속 실행됩니다.


7. ExitStack으로 동적 리소스 관리

개요

실행 시점에 결정되는 여러 개의 컨텍스트 매니저를 동적으로 관리할 수 있습니다.

코드 예제

from contextlib import ExitStack

with ExitStack() as stack:
    files = [stack.enter_context(open(f))
             for f in file_list]
    # 모든 파일 사용

설명

파일 개수를 미리 알 수 없을 때 유용합니다. 모든 파일이 자동으로 닫힙니다.


8. Lock을 활용한 스레드 안전성

개요

threading.Lock을 컨텍스트 매니저로 사용하여 멀티스레드 환경에서 안전하게 작업할 수 있습니다.

코드 예제

import threading

lock = threading.Lock()

with lock:
    shared_resource += 1
    # 다른 스레드의 접근 차단

설명

with 블록 안에서만 lock이 유지되고, 블록을 벗어나면 자동으로 해제됩니다.


9. redirect stdout으로 출력 리다이렉트

개요

표준 출력을 일시적으로 파일이나 다른 스트림으로 리다이렉트할 수 있습니다.

코드 예제

from contextlib import redirect_stdout

with open('output.txt', 'w') as f:
    with redirect_stdout(f):
        print('파일에 저장됩니다')
        # 콘솔 대신 파일로 출력

설명

with 블록 안의 모든 print 출력이 파일로 리다이렉트되고, 블록이 끝나면 원래대로 돌아옵니다.


10. 재사용 가능한 컨텍스트 매니저

개요

한 번만 사용할 수 있는 일반 컨텍스트 매니저와 달리, 재사용 가능한 컨텍스트 매니저를 만들 수 있습니다.

코드 예제

class ReusableContext:
    def __init__(self, name):
        self.name = name

    def __enter__(self):
        print(f'{self.name} 시작')
        return self

    def __exit__(self, *args):
        print(f'{self.name} 종료')

설명

같은 인스턴스를 여러 번 with 문에서 사용할 수 있어 반복적인 작업에 유용합니다.


마치며

이번 글에서는 Python 컨텍스트 매니저 완벽 가이드에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#Python #ContextManager #with문 #리소스관리 #고급기능

#Python#ContextManager#with문#리소스관리#고급기능

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스

VPC 네트워크의 기초 - CIDR과 서브넷 설계 완벽 가이드

초급 개발자를 위한 VPC와 서브넷 설계 입문서입니다. 도서관 비유로 CIDR 개념을 쉽게 이해하고, 실무에서 자주 사용하는 서브넷 분할 전략을 단계별로 배워봅니다. 점프 투 자바 스타일로 술술 읽히는 네트워크 입문 가이드입니다.

AWS 리소스 정리와 비용 관리 완벽 가이드

AWS 사용 후 리소스를 안전하게 정리하고 예상치 못한 과금을 방지하는 방법을 배웁니다. 프리티어 관리부터 비용 모니터링까지 실무에서 꼭 필요한 내용을 다룹니다.

AWS 고가용성과 내결함성 아키텍처 설계 기초

서비스가 멈추지 않는 시스템을 만들고 싶으신가요? AWS의 글로벌 인프라를 활용한 고가용성과 내결함성 아키텍처 설계 원칙을 실무 중심으로 배워봅시다. 초급 개발자도 쉽게 이해할 수 있도록 스토리와 비유로 풀어냈습니다.

이스티오 기반 마이크로서비스 플랫폼 완벽 가이드

Kubernetes와 Istio를 활용한 엔터프라이즈급 마이크로서비스 플랫폼 구축 방법을 실전 프로젝트로 배웁니다. Helm 차트 작성부터 트래픽 관리, 보안, 모니터링까지 전체 과정을 다룹니다.

오토스케일링 완벽 가이드

트래픽 변화에 자동으로 대응하는 오토스케일링의 모든 것을 배웁니다. HPA, VPA, Cluster Autoscaler까지 실전 예제와 함께 쉽게 설명합니다. 초급 개발자도 술술 읽히는 실무 중심 가이드입니다.