Mongoose에서 트랜잭션 사용

이상문
3 min readMay 15, 2023

트랜잭션은 여러 작업을 그룹화하여 모두 커밋되거나 모두 롤백되도록 하는 방법이다. 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();
}

작업을 수행 중에 예외가 발생하면 롤백을 하도록 구성했다.

마무리

트랜잭션 범위는 데이터가 항상 일관성을 유지하도록 보장하는 데 유용한 방법이 될 수 있다. 여러 작업을 트랜잭션으로 그룹화하면 모두 커밋되거나 모두 롤백되도록 할 수 있다. 이는 데이터 손상 및 기타 문제를 방지하는 데 도움이 된다.

--

--

이상문

software developer working mainly in field of streaming, using C++, javascript