Docs Menu
Docs Home
/ / /
Java 동기화 드라이버
/

트랜잭션

이 페이지의 내용

  • 개요
  • 방법
  • 예제
  • 추가 정보
  • API 문서

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

MongoDB에서 트랜잭션은 논리적 세션 내에서 실행됩니다. 세션은 순차적으로 실행하려는 관련 읽기 또는 쓰기 작업의 그룹입니다. 세션을 사용하면 작업 그룹에 대한 인과적 일관성을 유지하거나 ACID transaction 에서 작업을 실행할 수 있습니다. MongoDB는 작업에 예상치 못한 오류가 발생하더라도 트랜잭션 작업과 관련된 데이터의 일관성을 보장합니다.

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

경고

ClientSession을(를) 생성한 MongoClient (또는 MongoDatabase 또는 MongoCollection)에만 ClientSession을(를) 사용합니다. 다른 MongoClient와(과) 함께 ClientSession을(를) 사용하면 작업 오류가 발생합니다.

중요

트랜잭션에 포함하려는 모든 작업의 매개 변수로 session 를 포함해야 합니다.

MongoClient 인스턴스에서 startSession() 메서드를 사용하여 ClientSession 를 만듭니다. 그런 다음 ClientSession 에서 제공하는 메서드를 사용하여 세션 상태를 수정할 수 있습니다. 다음 표에서는 트랜잭션을 관리하는 데 사용할 수 있는 방법에 대해 설명합니다.

메서드
설명
startTransaction()
Starts a new transaction for this session with the default transaction options. Pass an instance of TransactionOptions as a parameter to start a transaction with given options. You cannot start a transaction if there's already an active transaction running in the session.

Parameter: TransactionOptions transactionOptions
abortTransaction()
Ends the active transaction for this session. Returns an error if there is no active transaction for the session or the transaction was previously ended.
commitTransaction()
Commits the active transaction for this session. Returns an error if there is no active transaction for the session or if the transaction was ended.
withTransaction()
Starts a new transaction for this session and runs the given function. This method handles retries, committing, and aborting transactions. Pass an instance of TransactionBody as a parameter that defines the operations you want to execute within the transaction.

Parameter: TransactionBody<T> transactionBody

ClientSession 에는 세션 속성을 검색하고 변경 가능한 세션 속성을 수정하는 메서드도 있습니다. 이러한 메서드에 대해 자세히 알아보려면 API 설명서 를 참조하세요.

다음 예에서는 다음 단계를 통해 세션을 생성하고, 트랜잭션을 생성하고, 다중 문서 삽입 작업을 커밋하는 방법을 보여 줍니다.

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

  2. 트랜잭션 옵션을 설정하여 트랜잭션 동작을 구성합니다.

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

  4. 여러 문서를 삽입합니다. withTransaction() 메서드는 트랜잭션을 실행, 커밋 및 중단합니다. 작업 중 오류가 발생하면 withTransaction() 이 트랜잭션 취소를 처리합니다.

String connectionString = "<connection string>"; // Replace with your connection string
try (MongoClient mongoClient = MongoClients.create(connectionString)) {
MongoDatabase database = mongoClient.getDatabase("transaction_db");
MongoCollection<Document> collection = database.getCollection("books");
// Sets transaction options
TransactionOptions txnOptions = TransactionOptions.builder()
.writeConcern(WriteConcern.MAJORITY)
.build();
try (ClientSession session = mongoClient.startSession()) {
// Uses withTransaction and lambda for transaction operations
session.withTransaction(() -> {
collection.insertMany(session, Arrays.asList(
new Document("title", "The Bluest Eye").append("author", "Toni Morrison"),
new Document("title", "Sula").append("author", "Toni Morrison"),
new Document("title", "Song of Solomon").append("author", "Toni Morrison")
));
return null; // Return value as expected by the lambda
}, txnOptions);
}
} catch (Exception e) {
e.printStackTrace();
}

트랜잭션에 대한 더 많은 제어가 필요한 경우 startTransaction() 메서드를 사용할 수 있습니다. 이 메서드를 이전 섹션에서 설명한 commitTransaction()abortTransaction() 메서드와 함께 사용하여 트랜잭션 수명 주기를 수동으로 관리할 수 있습니다.

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

ACID 규정 준수에 대해 자세히 알아보려면 데이터베이스 관리 시스템의 ACID 속성이란 무엇인가요?를 참조하세요. MongoDB 웹사이트의 문서입니다.

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

돌아가기

Indexes