AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

트랜잭션의 배치 작업

이 가이드에서는 MongoDB .NET/C# 드라이버를 사용하여 트랜잭션을 수행하는 방법을 배울 수 있습니다. 트랜잭션을 사용하면 트랜잭션이 커밋될 때까지 데이터를 변경하지 않는 일련의 작업을 실행할 수 있습니다. 트랜잭션에서 오류가 반환되는 경우 드라이버는 트랜잭션을 취소하고 데이터 변경 사항이 표시되기 전에 모든 데이터 변경 사항을 삭제합니다.

MongoDB는 작업에 예상치 못한 오류가 발생하더라도 트랜잭션 작업과 관련된 데이터의 일관성을 보장합니다.

MongoDB 에서 트랜잭션은 논리적 세션 내에서 실행 . 세션 은 순차적으로 실행 하려는 관련 읽기 또는 쓰기 (write) 작업의 그룹입니다. 세션을 사용하면 작업 그룹에 대한 인과적 일관성을 활성화하거나 ACID transaction에서 작업을 실행할 수 있습니다.

.NET/C# 드라이버를 사용하는 경우 MongoClient 인스턴스에서 IClientSession 유형으로 새 세션을 만들 수 있습니다. 매번 새 클라이언트를 인스턴스화하는 대신 여러 세션 및 트랜잭션에 클라이언트를 재사용하는 것이 좋습니다.

다음 예시 StartSession() 메서드를 호출하여 세션을 만드는 방법을 보여 줍니다.

var client = new MongoClient("mongodb://localhost:27017");
var session = client.StartSession();

경고

IClientSession을 생성한 MongoClient(또는 연결된 MongoDatabase 또는 MongoCollection)과 함께만 IClientSession을 사용합니다. 다른 MongoClient과 함께 IClientSession을 사용하면 작업 오류가 발생합니다.

ClientSessionOptions 클래스의 인스턴스 StartSession() 메서드에 전달하여 세션의 동작을 사용자 지정할 수 있습니다. 다음 표에서는 ClientSessionOptions 객체 에 설정하다 수 있는 속성에 대해 설명합니다.

속성
설명

CausalConsistency

세션이 인과적으로 일관적인 적인지 여부를 지정합니다. 인과적으로 일관적인 세션에서 운전자 실행된 순서대로 작업을 실행합니다. 자세한 학습 은 인과적 일관성 참조하세요.

데이터 유형: boolean
기본값: true

DefaultTransactionOptions

세션의 기본값 트랜잭션 옵션을 지정합니다. 여기에는 최대 커밋 시간, 읽기 고려 (read concern), 읽기 설정 (read preference) 및 쓰기 고려 (write concern) 포함됩니다.

데이터 유형: TransactionOptions
기본값: null

Snapshot

운전자 스냅샷 읽기를 수행할지 여부를 지정합니다. 스냅샷 읽기에 대해 자세히 학습 MongoDB Server 매뉴얼에서 읽기 고려 사항 ' 스냅샷 '을 참조하세요.

데이터 유형: 기본값: boolean
false

SnapshotTime

운전자 세션의 모든 데이터를 읽는 클러스터 시간을 지정합니다.Snapshot true 이 속성 설정할 때 를 로 설정하다 해야 합니다. 자세한 학습 은 MongoDB Server 매뉴얼의 읽기 고려 사항 ' 스냅샷 '을 참조하세요.

데이터 유형: BsonTimestamp
기본값: null

DefaultTransactionOptions 속성 TransactionOptions 클래스의 인스턴스 허용합니다. 다음 표에서는 TransactionOptions 객체 에 설정하다 수 있는 속성에 대해 설명합니다.

속성
설명

MaxCommitTime

단일 commitTransaction 명령이 실행 수 있는 최대 시간입니다. 커밋 이 이 제한을 초과하면 MongoDB Server MaxTimeMSExpired 오류를 반환하고 트랜잭션 에서 변경 사항을 커밋 하지 않습니다. 이 오류 발생 후 운전자 커밋 다시 시도하지 않습니다.

이 속성 생략하면 MongoDB Server 기본값 트랜잭션 런타임 제한을 적용합니다.

데이터 유형: TimeSpan?
기본값: null

ReadConcern

세션의 각 트랜잭션 에 대한 읽기 고려입니다. 자세한 학습 은 MongoDB Server 매뉴얼의 읽기 고려를 참조하세요.

이 속성 생략하면 트랜잭션은 세션 수준 읽기 고려 (read concern) 사용합니다( 설정하다 한 경우). 세션 수준 읽기 고려 (read concern) 도 생략하면 트랜잭션은 클라이언트 수준 읽기 고려 (read concern) 사용합니다.

데이터 유형: ReadConcern
기본값: null

ReadPreference

세션의 각 트랜잭션 에 대한 읽기 설정입니다. 자세한 학습 은 MongoDB Server 매뉴얼의 읽기 설정을 참조하세요.

이 속성 생략하면 트랜잭션은 세션 수준 읽기 설정 (read preference) 사용합니다( 설정하다 한 경우). 세션 수준 읽기 설정 (read preference) 도 생략하면 트랜잭션은 클라이언트 수준 읽기 설정 (read preference) 사용합니다.

데이터 유형: ReadPreference
기본값: null

WriteConcern

세션의 각 트랜잭션 에 대한 쓰기 고려. 자세한 학습 은 MongoDB Server 매뉴얼의 쓰기 고려를 참조하세요.

이 속성 생략하면 트랜잭션은 세션 수준 쓰기 고려 (write concern) 사용합니다( 설정하다 한 경우). 세션 수준 쓰기 고려 (write concern) 도 생략하면 트랜잭션은 클라이언트 수준 쓰기 고려 (write concern) 사용합니다.

데이터 유형: WriteConcern
기본값: null

다음 코드 예시 사용자 지정 옵션을 사용하여 세션을 생성하는 방법을 보여 줍니다.

var client = new MongoClient("mongodb://localhost:27017");
var sessionOptions = new ClientSessionOptions
{
CausalConsistency = true,
DefaultTransactionOptions = new TransactionOptions(
readConcern: ReadConcern.Available,
writeConcern: WriteConcern.Acknowledged)
};
var session = client.StartSession(sessionOptions);

MongoDB 특정 클라이언트 세션에서 인과적 일관성 지원합니다. 인과적 일관성 모델은 분산된 시스템에서 세션 내의 작업이 인과적 순서로 실행 보장 . 클라이언트는 인과 관계 또는 작업 간의 종속성과 일관적인 결과를 관찰합니다. 예시 를 들어, 한 작업이 논리적으로 다른 작업의 결과에 따라 달라지는 일련의 작업을 수행하는 경우 모든 후속 읽기에는 종속 관계 반영됩니다.

인과적 일관성 보장하려면 클라이언트 세션이 다음 요구 사항을 충족해야 합니다.

  • 세션을 시작할 때 운전자 인과적 일관성 옵션을 활성화 해야 합니다. 이 옵션은 기본값 으로 활성화되어 있습니다.

  • 작업은 단일 스레드의 단일 세션에서 실행 되어야 합니다. 그렇지 않으면 세션 또는 스레드가 optime 및 클러스터 시간 값을 서로 통신해야 합니다. 이러한 값을 전달하는 두 세션의 예시 보려면 MongoDB Server 매뉴얼에서 인과적 일관성 예시 를 참조하세요.

  • 반드시 ReadConcern.Majority 읽기 고려 (read concern) 사용해야 합니다.

  • 반드시 WriteConcern.WMajority 쓰기 고려 (write concern) 사용해야 합니다. 이는 기본값 쓰기 고려 (write concern) 값입니다.

다음 표에서는 인과적으로 일관적인 세션이 제공하는 보장 에 대해 설명합니다.

보장
설명

쓰기 읽기

읽기 작업은 이전 쓰기 (write) 작업의 결과를 반영합니다.

단조적 읽기

읽기 작업은 이전 읽기 작업보다 이전 데이터 상태 반영하는 결과를 반환하지 않습니다.

단조로운 쓰기

쓰기 (write) 작업이 다른 쓰기 (write) 작업보다 먼저 수행되어야 하는 경우 서버 이 쓰기 (write) 작업을 먼저 실행합니다.

예시 를 들어 InsertOne() 를 호출하여 문서 삽입한 다음 UpdateOne() 를 호출하여 삽입된 문서 수정하면 서버 먼저 삽입 작업을 실행합니다.

읽기 후 쓰기

쓰기 (write) 작업이 다른 읽기 작업 뒤에 와야 하는 경우 서버 읽기 작업을 먼저 실행합니다.

예시 를 들어 Find() 를 호출하여 문서 조회 다음 DeleteOne() 를 호출하여 조회된 문서 삭제 하면 서버 먼저 찾기 작업을 실행합니다.

이 섹션에 언급된 개념에 대해 자세히 학습 다음 MongoDB Server 매뉴얼 항목을 참조하세요.

MongoClient 인스턴스에서 동기 StartSession() 또는 비동기식 StartSessionAsync() 메서드를 사용하여 IClientSession을(를) 생성합니다. 그런 다음 IClientSession 인터페이스에서 제공하는 메서드 세트를 사용하여 세션 상태를 수정할 수 있습니다. 다음 Synchronous MethodsAsynchronous Methods 탭에서 선택하여 트랜잭션관리 메서드에 대해 알아보세요.

메서드
설명

StartTransaction()

이 세션에서 지정된 옵션으로 구성된 새 트랜잭션 시작합니다. 세션에 대해 이미 진행 중인 트랜잭션 있는 경우 예외가 발생합니다. 이 메서드에 대해 자세히 학습 서버 매뉴얼의 startTransaction() 페이지를 참조하세요.

매개변수: TransactionOptions (선택 사항)

AbortTransaction()

이 세션의 활성 트랜잭션 종료합니다. 세션에 대한 활성 트랜잭션 없거나 트랜잭션 커밋 또는 종료된 경우 예외가 발생합니다. 이 메서드에 대해 자세히 학습 서버 매뉴얼의 abortTransaction() 페이지를 참조하세요.

매개변수: CancellationToken

CommitTransaction()

이 세션의 활성 트랜잭션 커밋합니다. 세션에 대한 활성 트랜잭션 없거나 트랜잭션 종료된 경우 예외가 발생합니다. 이 메서드에 대해 자세히 학습 서버 매뉴얼의 commitTransaction() 페이지를 참조하세요.

매개변수: CancellationToken

WithTransaction()

이 세션에서 트랜잭션을 시작하고 제공된 콜백을 실행합니다. 이 메서드에 대해 자세히 알아보려면 서버 매뉴얼의 withTransaction() 페이지를 참조하세요.

짧은 시간: 에서 사용하는 콜백 함수 WithTransaction() 내에서 예외를 포착하는 경우 try-catch 차단 종료하기 전에 예외를 다시 발생시켜야 합니다. 그렇지 않으면 무한 루프가 발생할 수 있습니다. 이 경우 예외를 처리하다 방법에 대한 C# 자세한 내용은 서버 매뉴얼의 트랜잭션을 참조하고 언어 드롭다운에서 를 선택하여 예시 확인합니다.


매개Func <IClientSessionHandle, CancellationToken, Task<TResult>>변수:,, TransactionOptions 반환CancellationToken
유형: Task <TResult>

메서드
설명

StartTransaction()

이 세션에서 지정된 옵션으로 구성된 새 트랜잭션 시작합니다. 세션에 대해 이미 진행 중인 트랜잭션 있는 경우 예외가 발생합니다. 이 메서드에 대해 자세히 학습 서버 매뉴얼의 startTransaction() 페이지를 참조하세요.

매개변수: TransactionOptions (선택 사항)

AbortTransactionAsync()

이 세션의 활성 트랜잭션 종료합니다. 세션에 대한 활성 트랜잭션 없거나 트랜잭션 커밋 또는 종료된 경우 예외가 발생합니다. 이 메서드에 대해 자세히 학습 서버 매뉴얼의 abortTransaction() 페이지를 참조하세요.

매개변수: CancellationToken
반환 유형: Task

CommitTransactionAsync()

이 세션의 활성 트랜잭션 커밋합니다. 세션에 대한 활성 트랜잭션 없거나 트랜잭션 종료된 경우 예외가 발생합니다. 이 메서드에 대해 자세히 학습 서버 매뉴얼의 commitTransaction() 페이지를 참조하세요.

매개변수: CancellationToken
반환 유형: Task

WithTransactionAsync()

이 세션에서 트랜잭션을 시작하고 제공된 콜백을 실행합니다. 이 메서드에 대해 자세히 알아보려면 서버 매뉴얼의 withTransaction() 페이지를 참조하세요.

짧은 시간: 에서 사용하는 콜백 함수 WithTransactionAsync() 내에서 예외를 포착하는 경우 try-catch 차단 종료하기 전에 예외를 다시 발생시켜야 합니다. 그렇지 않으면 무한 루프가 발생할 수 있습니다. 이 경우 예외를 처리하다 방법에 대한 C# 자세한 내용은 서버 매뉴얼의 트랜잭션을 참조하고 언어 드롭다운에서 를 선택하여 예시 확인합니다.


매개Func <IClientSessionHandle, CancellationToken, Task<TResult>>변수:,, TransactionOptions 반환CancellationToken
유형: Task <TResult>

트랜잭션 구성

TransactionOptions 클래스의 인스턴스 StartTransaction() 또는 WithTransaction() 메서드에 전달하여 개별 트랜잭션의 동작을 사용자 지정할 수 있습니다. 여기에서 설정하다 옵션은 ClientSessionOptions 객체 에 설정하다 기본값 트랜잭션 옵션을 재정의합니다.

이 예시에서는 다음 단계를 통해 세션을 생성하고, 트랜잭션을 생성하고, 트랜잭션 내의 여러 컬렉션에 문서를 삽입하는 방법을 보여줍니다.

  1. StartSession() 메서드를 사용하여 클라이언트에서 세션을 만듭니다.

  2. 트랜잭션 구성하려면 TransactionOptions 객체 만듭니다.

  3. StartTransaction() 메서드를 사용하여 트랜잭션을 시작합니다.

  4. booksfilms 컬렉션에 문서를 삽입합니다.

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

var books = database.GetCollection<Book>("books");
var films = database.GetCollection<Film>("films");
// Begins transaction
using (var session = mongoClient.StartSession())
{
// Configures transaction options
var transactionOptions = new TransactionOptions(
readConcern: ReadConcern.Majority,
writeConcern: WriteConcern.WMajority
);
session.StartTransaction(transactionOptions);
try
{
// Creates sample data
var book = new Book
{
Title = "Beloved",
Author = "Toni Morrison",
InStock = true
};
var film = new Film
{
Title = "Star Wars",
Director = "George Lucas",
InStock = true
};
// Inserts sample data
books.InsertOne(session, book);
films.InsertOne(session, film);
// Commits our transaction
session.CommitTransaction();
}
catch (Exception e)
{
Console.WriteLine("Error writing to MongoDB: " + e.Message);
return;
}
// Prints a success message if no error thrown
Console.WriteLine("Successfully committed transaction!");
}
Successfully committed transaction!

참고

병렬 작업이 지원되지 않음

.NET/ C# 드라이버 단일 트랜잭션 내에서 병렬 작업 실행 을 지원 하지 않습니다.

MongoDB Server v8.0 이상을 사용하는 경우 BulkWrite() 또는 BulkWriteAsync() 메서드를 사용하여 단일 트랜잭션 내에서 여러 네임스페이스에 대한 쓰기 (write) 작업을 수행할 수 있습니다. 자세한 내용은 대량 쓰기 작업을 참조하세요.

이 가이드에 언급된 개념에 대해 자세히 알아보려면 서버 매뉴얼의 다음 페이지를 참조하세요.

이 가이드에서 설명하는 유형 또는 메서드에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.