본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
CodeDeck AI
2025. 11. 8. · 56 Views
Python 컨텍스트 매니저 완벽 가이드
파일, 데이터베이스, 네트워크 연결 등의 리소스를 안전하게 관리하는 컨텍스트 매니저의 모든 것을 배워봅니다. with 문부터 커스텀 컨텍스트 매니저 작성까지 실무에서 바로 활용할 수 있는 패턴들을 소개합니다.
들어가며
이 글에서는 Python 컨텍스트 매니저 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 기본_with_문_사용하기
- 여러_리소스_동시_관리
- 클래스로_컨텍스트_매니저_만들기
- contextlib_데코레이터_활용
- 데이터베이스_트랜잭션_관리
- suppress로_예외_무시하기
- ExitStack으로_동적_리소스_관리
- Lock을_활용한_스레드_안전성
- redirect_stdout으로_출력_리다이렉트
- 재사용_가능한_컨텍스트_매니저
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문 #리소스관리 #고급기능
댓글 (0)
함께 보면 좋은 카드 뉴스
vLLM 통합 완벽 가이드
대규모 언어 모델 추론을 획기적으로 가속화하는 vLLM의 설치부터 실전 서비스 구축까지 다룹니다. PagedAttention과 연속 배칭 기술로 GPU 메모리를 효율적으로 활용하는 방법을 배웁니다.
Web UI Demo 구축 완벽 가이드
Gradio를 활용하여 머신러닝 모델과 AI 서비스를 위한 웹 인터페이스를 구축하는 방법을 다룹니다. 코드 몇 줄만으로 전문적인 데모 페이지를 만들고 배포하는 과정을 초급자도 쉽게 따라할 수 있도록 설명합니다.
Sandboxing & Execution Control 완벽 가이드
AI 에이전트가 코드를 실행할 때 반드시 필요한 보안 기술인 샌드박싱과 실행 제어에 대해 알아봅니다. 격리된 환경에서 안전하게 코드를 실행하고, 악성 동작을 탐지하는 방법을 단계별로 설명합니다.
Voice Design then Clone 워크플로우 완벽 가이드
AI 음성 합성에서 일관된 캐릭터 음성을 만드는 Voice Design then Clone 워크플로우를 설명합니다. 참조 음성 생성부터 재사용 가능한 캐릭터 구축까지 실무 활용법을 다룹니다.
Tool Use 완벽 가이드 - Shell, Browser, DB 실전 활용
AI 에이전트가 외부 도구를 활용하여 셸 명령어 실행, 브라우저 자동화, 데이터베이스 접근 등을 수행하는 방법을 배웁니다. 실무에서 바로 적용할 수 있는 패턴과 베스트 프랙티스를 담았습니다.