파이썬 프로토콜과 context manager, psycopg2 connection 객체 정리

Sue·2025년 7월 4일
0
post-thumbnail

파이썬 프로토콜과 context manager, psycopg2 connection 객체 정리


1. 프로토콜이란?

  • 프로토콜은 특정 기능을 수행하기 위해 클래스가 반드시 구현해야 하는 메서드들의 집합이다.
  • 파이썬에서는 명시적 상속 없이도 필요한 메서드만 구현하면 해당 프로토콜을 따르는 것으로 간주한다.

파이썬 프로토콜은 인터페이스보다 유연한 개념이다. 꼭 어떤 클래스를 상속하지 않아도, 필요한 메서드만 구현하면 되는데 이를 'Duck Typing"이라 한다.

  • 주요 프로토콜 예시
    • iterator 프로토콜: __iter__(), __next__() 메서드 구현 → 반복문에서 사용 가능
    • container 프로토콜: __contains__(), __getitem__() 등 → in 연산자, 인덱싱 지원
    • context manager 프로토콜: __enter__(), __exit__() 메서드 구현 → with 문에서 사용 가능

2. context manager 프로토콜

  • with 문을 사용할 수 있도록 하는 프로토콜이다.
  • with 문에 진입할 때 __enter__() 메서드가 호출되고, 블록이 끝나거나 예외 발생 시 __exit__() 메서드가 호출된다.
  • 주로 파일, 데이터베이스 연결, 락(lock) 등 자원 관리에 사용된다.
  • 예시
class MyResource:
    def __enter__(self):
        # 자원 할당 또는 초기화
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        # 자원 해제 또는 정리
        pass

with MyResource() as resource:
    # 자원 사용 코드
    pass

3. psycopg2의 connection 객체

  • psycopg2는 파이썬에서 PostgreSQL 데이터베이스와 연결하기 위한 라이브러리이다.
  • connection 객체는 PostgreSQL 서버와의 연결 상태를 나타내며, SQL 쿼리를 실행하려면 cursor 객체를 생성해야 한다.

connection은 DB 연결 자체를 관리하면서 commit(), rollback(), close() 등을 수행한다.

cursor의 경우, SQL 문장을 실행하는 실제 작업자이다. execute(), fetchall(), close() 등이 있다.

  • 예시
import psycopg2

conn = psycopg2.connect(host='localhost', dbname='testdb', user='user', password='password')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
  • 예시
conn = psycopg2.connect(...)
cursor = conn.cursor()

try:
    cursor.execute(...)
    conn.commit()
except:
    conn.rollback()
finally:
    cursor.close()
    conn.close()
  • connection 객체는 데이터베이스와의 통신 파이프라인 역할을 하며, cursor는 SQL 쿼리 실행을 위한 도구이다.

4. execute() 메서드

  • cursor.execute()는 SQL 쿼리를 데이터베이스에 전달하여 실행하는 메서드이다.
  • 모든 종류의 SQL 문장(SELECT, INSERT, UPDATE, DELETE 등)을 실행할 수 있다.
  • 파라미터 바인딩을 지원하여 SQL Injection 공격을 방지한다.
cursor.execute("SELECT * FROM project WHERE id = %s", (project_id,))
  • 쿼리 실행 후 결과는 fetchone(), fetchall() 등으로 가져올 수 있다.

5. 트랜잭션 자동 커밋 옵션

psycopg2.connect(..., autocommit=True) 옵션을 주면, conn.commit() 안 해도 바로 반영된다.

그러나 데이터를 안전하게 다루려면 autocommit=False(default) 로 두고,
작업이 끝난 후 명시적으로 commit() 하는 게 일반적이다.

psycopg2에서는 autocommit 설정도 가능하지만, 보통 명시적으로 commit/rollback을 사용하는 것이 더 안전하다.


이상으로 파이썬 프로토콜, context manager, 그리고 psycopg2의 connection 객체와 execute 메서드에 대한 핵심 내용을 정리하였다.


profile
AI/ML Engineer

0개의 댓글