Python 컨텍스트 관리자: 실제로 필요한 세 가지 경우

대부분의 튜토리얼은 평범한 with open(...) 예제를 보여주고 멈춥니다. 여기 실제 코드에서 실제로 사용하는 세 가지 패턴과 각 패턴이 방지하는 실패 모드가 있습니다. 경우 1: 리소스 정리 및 오류 처리 무엇이든 발생하더라도 정리해야 하는 리소스가 있을 때: class DatabaseConnection: def __init__(self, config): self.config = config self.connection = None def __enter__(self): self.connection = create_connection(self.config) return self.connection def __exit__(self, exc_type, exc_val, exc_tb): if self.connection: self.connection.close() 왜 이것이 중요한가 예외 상황에서도 리소스 정리 리소스 누수 방지 코드 더 신뢰할 수 있게 만들기 경우 2: 임시 상태 관리 일부 상태를 임시로 변경한 다음 복원해야 할 때: ...

2026년 5월 3일 · 2 분 · 기술 노트

PostgreSQL에서 EXPLAIN ANALYZE 출력 읽기 - 길을 잃지 않게

EXPLAIN ANALYZE 출력은 실제로 중요한 세 숫자를 알기 전까지는 위협적으로 보입니다. 여기 내가 그것들을 읽는 순서와 특정 버그를 가리키는 패턴이 있습니다. 실제로 중요한 세 숫자 1. 총 실행 시간 (Total Execution Time) Total runtime: 1234.567 ms 가장 중요한 지표입니다. 쿼리가 느리면 여기에서 알려줍니다. 2. 실제 행 수 vs 예상 행 수 (Actual vs Estimated Rows) Seq Scan on users (cost=0.00..123.45 rows=1000 width=32) (actual time=1.234..567.890 rows=50000 loops=1) 거대한 차이는 플래너가 잘못된 가정을 했다는 것을 나타냅니다. ...

2026년 5월 2일 · 2 분 · 기술 노트