[Sequelize] ํŠธ๋žœ์žญ์…˜

[์›๋ณธ ๋งํฌ]

์ผ๋ จ์˜ DB ์ˆ˜์ • ์ž‘์—…๋“ค์„ ํ–‰ํ•˜๋‹ค๋ณด๋ฉด, ๊ทธ๊ฑธ ํ•˜๋‚˜์˜ ์™„์ „ํ•œ ์ž‘์—… ๋‹จ์œ„๋กœ์„œ ๋ฌถ์–ด์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋‹ค.

๊ฐ€๋ น, ์–ด๋–ค ๋กœ์ง์—์„œ ์ˆ˜์ •์ž‘์—… A์™€ B๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ์น˜์ž. ์—ฌ๊ธฐ์„œ A์™€ B๋Š” ๋ฐ˜๋“œ์‹œ ๋‘˜ ๋‹ค ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๋‘˜ ๋‹ค ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ๊ฐ‘์ž๊ธฐ A์—์„œ ์‚‘์‚ฌ๋ฆฌ๊ฐ€ ๋‚˜์„œ B๊ฐ€ ์‹คํ–‰๋˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด? A๋ฅผ ์–ด์„คํ”„๊ฒŒ ์ˆ˜์ •ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚จ์€ ์ƒํƒœ์—์„œ B๋งŒ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
์ด๊ฒŒ ๋ญ๋ž€ ๋ง์ธ๊ฐ€?

์ด๋Ÿฐ ์‚ฌํƒœ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ ์ž‘์—…๋“ค์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๊ณ , ๊ทธ ์ž์ฒด๋กœ ์›์ž์„ฑ์„ ๊ฐ€์ง€๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ํŠธ๋žœ์žญ์…˜์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ž˜ ๋ฌถ์ธ ์ž‘์—…๋“ค์€ ๋ฐ”๋กœ DB์— ๋ฐ˜์˜์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
์ „๋ถ€ ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ์—๋งŒ commit์œผ๋กœ ์™„์ „ํžˆ ๋ฐ˜์˜ํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ๋ฐœ์ƒํ•ด์„œ ๋Š๊ฒผ์„ ๊ฒฝ์šฐ์—” rollback์œผ๋กœ ์ „๋ถ€ ๋‚ ๋ ค๋ฒ„๋ฆฐ๋‹ค.

์‹œํ€„๋ผ์ด์ฆˆ์—์„œ๋„ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์“ฐ๊ธฐ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•œ๋‹ค.

์จ๋ณด์ž.
์šฐ์„  ์—ฐ๊ฒฐ๋ถ€ํ„ฐ ๋งŒ๋“ ๋‹ค.
๊นœ๋นกํ•˜๊ณ  host๋ฅผ ์•ˆ๋„ฃ์—ˆ๋Š”๋ฐ ์ž˜ ๋„ฃ๊ธธ ๋ฐ”๋ž€๋‹ค.

ํŠธ๋žœ์žญ์…˜์— ํฌํ•จํ•  ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์—, ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ์‹œํ‚ฌ ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ๋งˆ๋‹ค, ๋งˆ์ง€๋ง‰ object ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
ํ‚ค๊ฐ’์€ transaction์ด๋‹ค.

๋‚œ raw ์ฟผ๋ฆฌ๋ฌธ์„ ์ผ์ง€๋งŒ, ORM ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋“ค์—๋„ ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.
๊ณต์‹ ๋งค๋‰ด์–ผ์— ์žˆ๋Š” ์˜ˆ์ œ๋‹ค.

๊ทธ๋ž˜์„œ ๋Œ€๋žต, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
์ฟผ๋ฆฌ ์ˆ˜ํ–‰๋ฌธ๋“ค์€ ์ „๋ถ€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ตฌ๋ฌธ์œผ๋กœ ๋ฌถ์–ด๋†“๊ณ , catch๋กœ ์ด๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž˜ ์ˆ˜ํ–‰๋œ ๊ฒƒ์ด๋‹ˆ, commit์œผ๋กœ ์™„์ „ ์ ์šฉ.
์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ์—” ๋ญ๊ฐ€ ํŽ‘ํฌ๊ฐ€ ๋‚œ ๊ฒƒ์ด๋‹ˆ rollback์œผ๋กœ ์ „๋ถ€ ์›์ƒ๋ณต๊ตฌํ•œ๋‹ค.

์ € ์ฝ”๋“œ๋ฅผ ๋Œ๋ฆฌ๋ฉด

์ด๋ฏธ id๋Š” ๊ธฐ๋ณธํ‚ค๊ฐ’์œผ๋กœ ์œ ์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฒซ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋Š” ์‚ฝ์ž…์— ์‹คํŒจํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ…Œ์ด๋ธ”์„ ์ฝ์–ด๋ณด๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋‹ฌ๋ผ์ง„ ๊ฒƒ์ด ์—†๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌธ์ œ์—†์ด ๋Œ์•„๊ฐ€๋„๋ก ํ•œ๋‹ค๋ฉด


์ปค๋ฐ‹๋˜๊ณ ,


์‹ค์ œ๋กœ๋„ ๋ฐ˜์˜์ด ์ž˜ ๋  ๊ฒƒ์ด๋‹ค.



๊ด€๋ฆฌ๋˜๋Š” ํŠธ๋žœ์žญ์…˜

์œ„์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋ฅผ ์–ป์–ด์„œ ์†์œผ๋กœ ํ•œ๋•€ํ•œ๋•€ commit๊ณผ rollback์„ ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์‹œํ€„๋ผ์ด์ฆˆ์—์„œ๋Š” ๋ณด๋‹ค ์ž๋™ํ™”๋œ ๊ฐ„ํŽธํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
transaction ๋ฉ”์„œ๋“œ์˜ ๋‹ค๋ฅธ ์˜ค๋ฒ„๋กœ๋“œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ด๊ฑด ์ฟผ๋ฆฌ๋ฌธ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ฝœ๋ฐฑํ•จ์ˆ˜์—์„œ ๋ญ๋ผ๋„ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด rollback์„ ์ˆ˜ํ–‰ํ•˜๊ณ ,

๋ฌธ์ œ์—†์ด ์ข…๋ฃŒ๋˜๋ฉด commit์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ˜•ํƒœ๋‹ค.
๊ทธ๋ž˜์„œ ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ด์™ธ์—, ์ž„์˜๋กœ rollback์„ ์‹œํ‚ค๋ ค๋ฉด ์ง์ ‘ ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ € ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” commit๊ณผ rollback์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค!
์˜ค์ง ์˜ˆ์™ธ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐœ์ƒ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

์—ฌํŠผ ๊ทธ๋Œ€๋กœ ์‹คํ–‰์‹œํ‚ค๋ฉด, ์ €๊ธฐ์„œ๋Š” id 1๊ฐ’์ด ์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ณ ์œ ํ‚ค์™€ ์ถฉ๋Œํ•˜๋ฏ€๋กœ, ๋กค๋ฐฑ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค.


์ฐธ์กฐ
https://sequelize.org/master/manual/transactions.html