안녕하세요 @realmankwon 입니다.
sequelize 를 사용하다보면 transaction 을 사용하게 될때가 많습니다.
transaction 의 사용은 크게 어렵지는 않지만 헷갈릴 때가 많습니다.
create, findOrCreate, update, upsert, destory 등 함수별로 transaction 정보를 입력하는 것이 조금은 다르기 때문입니다.
이때 헷갈리지 않고 작성할 수 있는 팁이 하나 있습니다.
바로 where 이 있을 때와 없을 때를 구분하는 것입니다.
1 . where 이 없을 때
create 와 upsert의 경우는 where 없이 json으로만 구문이 작성이 됩니다.
이럴때는 transaction : t를 json 형태로 만들어서 다음과 같이 작성을 해 줍니다.
await models.user.create({
id, name, age, department
}, {transaction : t});
2 . where 이 있을 때
where 가 있는 경우는 where 가 속한 json 내에 속성으로 다음과 같이 transaction : t를 입력해 줍니다.
await models.user.update({
name, age, department
}, {
where : { id },
transaction : t
});
3 . sequelize.query 구문
where로 구분할 수 없는 경우가 query 함수를 사용할 때입니다.
이때는 query 구문 다음에 다음과 같이 transaction : t 가 포함된 json을 작성해 줍니다.
await models.sequelize.query(`
update user
set
name = '${name}',
age = ${age},
departure = '${departure}'
where
id = '${id}'
`,
{
type: Sequelize.QueryTypes.UPDATE,
transaction: t,
raw: true,
});
이 3가지 경우만 숙지하면 transaction 작성시 헷갈리지 않을 수 있습니다.