[개발] sequelize 개발시 transaction 작성 요령

안녕하세요 @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 작성시 헷갈리지 않을 수 있습니다.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now