기본용어:트랜잭션

트랜잭션(Transaction)이란?

트랜잭션은 데이터베이스 작업의 논리적인 단위로, 단일 작업들의 그룹을 의미한다. 단일 작업은 쉽게 말해 더 이상 나눌 수 없는 최소한의 처리 단위이다. 예를 들어 개발자 A씨는 xx은행을 통해 친구 B씨에게 300불을 송금해야할 일이 생겼다. 그래서 송금을 하던 도중, 300불이 출금되었는데 xx은행에서 오류가 발생해 A씨의 계좌에선 300불이 빠져나갔지만, B씨의 계좌에 300불을 받지 못했다. 이럴 경우엔 우리는 xx은행을 다시는 사용하지 못하게 되는 계기가 되고, 300불은 A씨도 B씨도 아닌 어딘가로 사라진다.

앞 예제에서 A씨의 계좌에서 300불이 출금되는 현상을 하나의 단일 작업로 볼 수 있고, B씨의 계좌에 입금이 되는 것을 또 하나의 단일 작업으로 볼 수 있어, 송금을 트랜잭션으로 묶을 수 있다. 실패를 방지하기 위해 우리는 트랜잭션을 사용한다. 만약 정상적으로 트랜잭션이 완료되었다면, B씨의 계좌에서 300불 입금하면서 오류가 발생했을 것이고, 오류가 발생했으면 롤백(rollback: 트랜잭션 시작 이전의 상태로 돌리는 행위)이 되어 A씨 계좌에서 300불이 출금되지 않았어야 한다.

반대로 오류가 없었다면 트랜잭션 A씨의 계좌에서 300불이 정상적으로 빠져 나간 뒤에는 B씨의 계좌에 300불이 입금되었을 것이다. 올바르게 데이터가 데이터베이스에 반영이 되었을 경우 이를 커밋(commit) 이라고 한다.


🙆‍♀️🙆🙆‍♂️

데이터 작업을 1번 스키마에 넣고 2번 스키마에 넣는 것으로 나누는 대신, 이 작업들을 하나의 트랜잭션으로 묶는 게 중요하다고 이해했다. 그럼 데이터를 동시에 적용하거나 롤백(오류시 트랜잭션 이전으로 돌아가기)할 수 있어서 데이터 일관성을 더 쉽게 유지할 수 있다.

오류가 나면 롤백, 성공하면 커밋 아하

단일 작업을 하나의 트랜잭션으로 묶는 것은 데이터베이스에서 중요한 원칙 중 하나이다. 이를 통해 데이터 일관성과 무결성을 보존할 수 있다. 트랜잭션은 '모든 것이 성공하거나 아무것도 성공하지 않는다'는 원자성 원칙을 따른다. 따라서 1번 스키마와 2번 스키마에 데이터를 넣는 작업을 하나의 트랜잭션으로 묶으면, 어떠한 스키마에 대한 작업이 실패하면 모든 작업이 롤백되고, 모든 작업이 성공하면 커밋된다. 이것은 데이터의 무결성을 유지하고 데이터베이스의 일관성을 보장하는 데 도움이 된다고 한다.


[mongoose 문법]

트랜잭션이란

트랜잭션은 여러 작업을 그룹화하여 모두 커밋되거나 모두 롤백되도록 하는 방법이다. Mongoose에서 트랜잭션을 사용하면 여러 작업을 그룹화하고 데이터가 항상 일관성을 유지하도록 할 수 있다.

Mongoose에서 트랜잭션을 사용하려면 먼저 startSession() 메서드를 사용하여 세션을 만든다. 그런 다음 startTransaction() 메서드를 사용하여 세션에 대한 트랜잭션을 시작할 수 있다.