얼음꽃의 일지

[JS] sequelize transaction commit, rollback 잘못 걸었을때 본문

잡다한 지식

[JS] sequelize transaction commit, rollback 잘못 걸었을때

얼음꽃 2023. 11. 1. 15:15
728x90

지난 글에서 sequelize transaction 을 직접 거는글을 올려놨었는데요.

 

반대로 commit, rollback 이 잘못넣었거나 오류가 생겼을때 현상을 알려드릴려고 합니다.

 

1. commit 후 rollback 이 붙어있는 경우

const db = require('../../모델 위치');

exports.test = async (req, res) => {
  const transaction = await db.sequelize.transaction();

  await transaction.commit();

  await transaction.rollback();

  return res.json(200);
};

이런경우 나오는 에러는 다음과 같습니다.

 

Error: Transaction cannot be rolled back because it has been finished with state: commit

 

commit한 후에 rollback 을 할 수가 없다는 뜻이죠. 

 

2. rollback 후 commit 이 붙어있는 경우

const db = require('../../모델 위치');

exports.test = async (req, res) => {
  const transaction = await db.sequelize.transaction();

  await transaction.rollback();

  await transaction.commit();

  return res.json(200);
};

이런경우 나오는 에러는 다음과 같습니다.

 

Error: Transaction cannot be committed because it has been finished with state: rollback

 

rollback  한 후에 commit을 할 수가 없다는 뜻이죠. 

 

즉, transaction을 한번 완료를 하게 되면 또 그 transaction을 건들 수가 없죠.

 

이렇게 붙어 쓰지 않고 서버 에러 아니면 코드 오류로 인해서 transaction을 건드리게 되면 위와 같은 현상이 나올 수 있습니다.

 

Error: Transaction cannot be committed  back because it has been finished with state: commit

 

Error: Transaction cannot be rolled back because it has been finished with state: rollback

 

이렇게 두가지 에러가 나오는 경우는 두번 commit 하거나 rollback 하는 경우 인데 이럴때는 동기, 비동기 로 인해 코드가 꼬였거나 for문 안에 넣어놔서 여러번 인식되거나 서버 문제로 인해 인식이 잘못되면 발생 가능합니다.

 

항상 테스트를 진행해보고 잘 썼는지 체크하는게 최고입니다.

 

728x90