몽고db 트랜잭션

Dongwon Ahn·2023년 5월 30일
0
post-custom-banner

몽고db 트랜잭션 적용 관련 내용

유의사항

  • MongoDB version 4.0 이상 사용 가능
  • Mongoose 5.2.0 이상 사용 가능
  • multi-document transaction incurs a greater performance cost over single document writes

기본 트랜잭션 사용방법

  • 예시
import { startSession } from 'mongoose';

const session = await startSession();
try {
  session.startTransaction();
	// 저장 예시
	await Customer.create({ firstName: req.body.firstName });
	await Customer.create({ firstName: req.body.firstName2 });	

	await session.commitTransaction();
  session.endSession();
} catch (e) {
	await session.abortTransaction();
  session.endSession();
}

작업 순서

  1. startSession() 으로 세션 생성
  2. session.startTransaction() 으로 트랜잭션 시작
  3. DB 작업 진행 (Create, Update, Insert)
  4. session.commitTransaction() 으로 앞선 작업 commit 진행
    1. 실패 시
      • session.abortTransaction() 트랜잭션 내 모든 작업 rollback
  5. session.endSession() 으로 세션 종료

Multi-Document 트랜잭션 차이점

같은 세션에서 진행을 해야, 트랜잭션이 가능하기 때문에 Multi-Document 처리를 진행 할 경우 아래 방식 중 하나를 사용

  • 트랜잭션 내 DB 작업을 같은 세션을 통해 진행하도록 추가 작업 필요
import { ClientSession } from 'mongoose';

const session: ClientSession = await startSession();

await Customer.create({ firstName: req.body.firstName }).session(session);
import { ClientSession } from 'mongoose';

const session: ClientSession = await startSession();

const newCustomer = new Customer({ firstName: req.body.firstName });
await newCustomer.save({ session });
profile
Typescript를 통해 풀스택 개발을 진행하고 있습니다.
post-custom-banner

0개의 댓글