트랜잭션은 여러 작업을 그룹화하여 모두 커밋되거나 모두 롤백되도록 하는 방법이다. Mongoose에서 트랜잭션을 사용하면 여러 작업을 그룹화하고 데이터가 항상 일관성을 유지하도록 할 수 있다.
예를 들어, 사용자를 생성한 다음 사용자의 주소를 생성해야 하는 경우 트랜잭션을 사용할 수 있다. 트랜잭션을 사용하면 사용자와 주소가 모두 생성되거나 둘 다 생성되지 않는다.
Mongoose에서 트랜잭션을 사용하려면 먼저 startSession()
메서드를 사용하여 세션을 만든다. 그런 다음 startTransaction()
메서드를 사용하여 세션에 대한 트랜잭션을 시작할 수 있다.
트랜잭션을 시작했으면 원하는 수의 작업을 수행할 수 있다. 모든 작업은 함께 그룹화되고 단위로 커밋되거나 롤백된다.
트랜잭션을 커밋하려면 세션에 대해 commitTransaction()
메서드를 호출한다. 트랜잭션을 롤백하려면 세션에 대해 abortTransaction()
메서드를 호출하면 된다.
const mongoose = require("mongoose");
const conn = await mongoose.connect("mongodb://localhost/mydb");
const session = await conn.startSession();
await session.startTransaction();
// Perform some operations...
await session.commitTransaction();
위의 예제에서 MongoDB에 연결하고 세션을 만들고 트랜잭션을 시작한다. 이후 작업을 수행하고 마지막으로 트랜잭션을 커밋한다.
트랜잭션 중에 문제가 발생하면 abortTransaction()
메서드를 호출하여 트랜잭션을 롤백할 수 있다.
Mongoose에서 트랜잭션을 롤백하는 방법을 살펴보자.
const mongoose = require("mongoose");
const conn = await mongoose.connect("mongodb://localhost/mydb");
const session = await conn.startSession();
try {
await session.startTransaction();
// Perform some operations...
} catch(err) {
// Something goes wrong!
await session.abortTransaction();
}
작업을 수행 중에 예외가 발생하면 롤백을 하도록 구성했다.
마무리
트랜잭션 범위는 데이터가 항상 일관성을 유지하도록 보장하는 데 유용한 방법이 될 수 있다. 여러 작업을 트랜잭션으로 그룹화하면 모두 커밋되거나 모두 롤백되도록 할 수 있다. 이는 데이터 손상 및 기타 문제를 방지하는 데 도움이 된다.