[python] 파이썬으로 MongoDB의 트랜잭션 관리하기

프로그래밍에서 다수의 작업을 하나의 논리적 단위로 묶어야 할 때, 트랜잭션은 매우 유용한 개념입니다. MongoDB는 기본적으로 트랜잭션을 지원하지 않지만, MongoDB 4.0 이후로는 트랜잭션을 사용할 수 있는 기능을 제공하고 있습니다. 이번 포스트에서는 파이썬에서 MongoDB의 트랜잭션을 관리하는 방법에 대해 알아보겠습니다.

필수 패키지 설치

먼저, MongoDB의 트랜잭션을 사용하기 위해서는 pymongo 패키지의 최신 버전이 필요합니다. 아래의 명령을 사용하여 pymongo를 설치합니다.

pip install pymongo

트랜잭션 시작하기

트랜잭션을 시작하려면 MongoDB 클라이언트를 생성한 후, 해당 클라이언트에서 트랜잭션을 시작해야 합니다. 아래의 예시 코드에서는 먼저 MongoClient를 사용하여 클라이언트를 생성하고, 해당 클라이언트에서 트랜잭션을 시작합니다.

from pymongo import MongoClient

# MongoDB 클라이언트 생성
client = MongoClient('mongodb://localhost:27017')

# 트랜잭션 시작
with client.start_session() as session:
    with session.start_transaction():
        # 트랜잭션 작업 수행
        # ...

트랜잭션 작업 수행하기

트랜잭션 내에서 수행할 작업은 with session.start_transaction():의 내부에서 수행됩니다. 다음은 트랜잭션 내에서 데이터를 삽입하는 예시 코드입니다.

with session.start_transaction():
    db = client.mydb
    collection = db.my_collection

    # 데이터 삽입
    collection.insert_one({"name": "John", "age": 30})
    collection.insert_one({"name": "Jane", "age": 25})

트랜잭션 내에서 발생한 모든 작업은 롤백이나 커밋을 알리지 않는 이상, 트랜잭션 완료 시 자동으로 커밋됩니다.

트랜잭션 롤백하기

트랜잭션 내에서 오류가 발생하거나, 특정 조건을 만족하지 않는 경우 롤백을 수행할 수 있습니다. 롤백은 트랜잭션 내의 모든 작업을 취소하며, 이전 상태로 되돌립니다. 아래의 코드는 트랜잭션이 실패한 경우 롤백하는 예시입니다.

with session.start_transaction():
    db = client.mydb
    collection = db.my_collection

    # 데이터 삽입
    collection.insert_one({"name": "John", "age": 30})
    collection.insert_one({"name": "Jane", "age": 25})

    # 트랜잭션 실패 시 롤백
    if some_condition:
        session.abort_transaction()

abort_transaction() 메소드를 사용하여 트랜잭션을 실패로 표시하고 롤백합니다.

트랜잭션 커밋하기

트랜잭션이 정상적으로 완료되었을 때, 트랜잭션을 커밋하여 변경 사항을 영구 저장소에 적용할 수 있습니다. 다음은 트랜잭션을 커밋하는 예시 코드입니다.

with session.start_transaction():
    db = client.mydb
    collection = db.my_collection

    # 데이터 삽입
    collection.insert_one({"name": "John", "age": 30})
    collection.insert_one({"name": "Jane", "age": 25})

    # 트랜잭션 커밋
    session.commit_transaction()

commit_transaction() 메소드를 사용하여 트랜잭션을 커밋합니다.

결론

이번 포스트에서는 파이썬에서 MongoDB의 트랜잭션을 관리하는 방법에 대해 알아보았습니다. 트랜잭션을 사용하면 여러 작업을 원자적으로 처리할 수 있으며, 오류 발생 시 롤백을 수행할 수 있습니다. MongoDB의 트랜잭션 관리 기능을 통해 데이터 일관성을 유지하고, 원자적인 작업을 보장할 수 있습니다.

참고 자료