๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring

@Transactional ์„ ํ†ตํ•ด ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฐฉ์ง€ํ•˜๊ธฐ

by ์•„๋ฆฌ๊ฐ€๋˜๐Ÿ™‚ 2023. 3. 13.

์›น ๋ฐ์ดํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ, dao์—์„œ sql๋ฌธ์œผ๋กœ db์— ์ ‘๊ทผํ•˜๊ณ  service์—์„œ dao ๋ฉ”์„œ๋“œ๋“ค์„ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ๋ช…์ด์„œ ๋™์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค๋ฉด? ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์„ฑ ๋ฌธ์ œ๋ž€, ๋‘ ๊ฐœ ์ด์ƒ์˜ ์„ธ์…˜์ด ๊ณตํ†ต๋œ ์ž์›์„ ์ฝ๊ณ  ์“ธ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ์™€ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , @Transactional ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค

 


ํŠธ๋žœ์žญ์…˜์ด๋ž€?

DBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฉ์–ด์ƒ ์ •์˜๋กœ๋Š” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ, ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ์„ ์•Œ์•„๋ณด๋ฉด ๋ณด๋‹ค ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค.

 

 

 

Service layer์—์„œ ์ฒด์Šค๋ง์„ ์›€์ง์ด๋Š” ์ฝ”๋“œ์ผ ๋•Œ,

์œ„ move ๋ฉ”์„œ๋“œ์—๋Š” 3๊ฐœ์˜ sql ์ฟผ๋ฆฌ๋ฌธ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ƒ๋Œ€๋ง์„ deleteํ•ด์ฃผ๋Š” ์ฟผ๋ฆฌ๋ฌธ, ํ˜„์žฌ๋ง์„ updateํ•ด์ฃผ๋Š” ์ฟผ๋ฆฌ๋ฌธ, turn์„ updateํ•ด์ฃผ๋Š” ์ฟผ๋ฆฌ๋ฌธ.

์ด ๋ฌถ์Œ๋“ค, ์ฆ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—… ๋‹จ์œ„๋ฅผ transaction, ํŠธ๋žœ์žญ์…˜์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•„์„œ move ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ turn์ด update๋˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ๋งŒ ์‹คํ–‰๋˜๊ฑฐ๋‚˜, piece๋งŒ update๋˜๊ณ  turn์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ํฐ ํ˜ผ๋ž€์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํŠธ๋žœ์žญ์…˜์€ ํ•œ ๋ฒˆ ์‹คํ–‰๋  ๋•Œ ๊ทธ ์•ˆ์˜ ์ž‘์—…๋“ค์ด ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜๊ณผ์˜ ์ถฉ๋Œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ํ”ผํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜๊ณผ์˜ ์ถฉ๋Œ ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ ๋™์‹œ์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ๋„์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ทธ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ์ž‘์—…๋“ค์€ ๋ชจ๋‘ rollback๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ๋“ค์„ ์ •๋ฆฌํ•œ ๊ฒƒ์„ ํŠธ๋žœ์žญ์…˜ ACID ์„ฑ์งˆ์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.


๋™์‹œ์„ฑ ๋ฌธ์ œ ์ข…๋ฅ˜

๋‘ ๊ฐœ ์ด์ƒ์˜ ์„ธ์…˜์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ์ข…๋ฅ˜๋ฅผ ์•Œ์•„๋ณด๋ฉด

ํŠธ๋žœ์žญ์…˜ 1: ์ฝ๊ธฐ ์ž‘์—… / ํŠธ๋žœ์žญ์…˜ 2: ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ.

ํŠธ๋žœ์žญ์…˜ ๋‘ ๊ฐœ๊ฐ€ ๋ชจ๋‘ ์ฝ๊ธฐ ์ž‘์—…์„ ํ•  ๋•Œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ํŠธ๋žœ์žญ์…˜ ๋‘ ๊ฐœ๊ฐ€ ๋ชจ๋‘ ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•  ๋•Œ์—๋Š” Exclusive lock(์“ฐ๊ธฐ ๋ฝ)์œผ๋กœ ์•„์˜ˆ ์ ‘๊ทผ์„ ๋ง‰์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ๊ฐ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ฒฉ๋ฆฌ๋ ˆ๋ฒจ์„ ์ž˜ ์„ค์ •ํ•ด์ฃผ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

Dirty Read 

ํŠธ๋žœ์žญ์…˜ 1์ด ํŠธ๋žœ์žญ์…˜ 2์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ.

์ด ๋•Œ, ํŠธ๋žœ์žญ์…˜ 2๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์—… ํ›„์— ์•„์ง ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹์€ ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•  ๊ฒฝ์šฐ

๊ทธ๋Ÿฐ๋ฐ ํŠธ๋žœ์žญ์…˜ 2์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์—… ์ „์œผ๋กœ rollbackํ•˜๊ณ  ์ปค๋ฐ‹์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ 1์€ ํŠธ๋žœ์žญ์…˜ 2์—์„œ ์ปค๋ฐ‹ํ•˜์ง€๋„ ์•Š์€ (rollback ์ „) ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ Dirty Read๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ 1์€ 1๋ฒˆ ์œ ์ €์˜ ๋‚˜์ด๊ฐ€ 21์‚ด๋กœ ์˜คํ•ดํ•œ ์ฑ„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์‹œ์—์„œ Transaction 2๋Š” commit์„ ํ•˜์ง€ ์•Š๊ณ  ์ž‘์—…ํ•˜๊ณ  ์žˆ๊ณ . ์ฆ‰, ํŠธ๋žœ์žญ์…˜ 2๋Š” ์•„์ง ๋๋‚˜์ง€ ์•Š๊ณ  ์ง„ํ–‰์ค‘์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์ƒํ™ฉ์—์„œ ํŠธ๋žœ์žญ์…˜ 1์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์—ˆ๊ณ , ํŠธ๋žœ์žญ์…˜ 2๋Š” ์•„์ง ํ•ด๋‹น ์ž‘์—…์„ ๊ณ„์† ์ž‘์—… ์ค‘ (commit ์ „)์— ์žˆ์œผ๋ฏ€๋กœ ํŠธ๋žœ์žญ์…˜ 1์€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๊ณ„์†ํ•ด์„œ ์กฐํšŒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ์ž‘์—… ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ ์ž์ฒด๊ฐ€ ๋ฌธ์ œ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

Non-repeatable Read (๋ฐ˜๋ณต ๋ถˆ๊ฐ€๋Šฅ ์ฝ๊ธฐ)

ํŠธ๋žœ์žญ์…˜ 1์ด ํŠธ๋žœ์žญ์…˜ 2์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ

๊ทธ๋Ÿฐ๋ฐ ํŠธ๋žœ์žญ์…˜ 2์—์„œ ๊ฐ‘์ž๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๊ณ . ๊ทธ๋ฆฌ๊ณ  ์ด ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋ฐ‹ํ–ˆ์„ ๊ฒฝ์šฐ. (์œ„์˜ Dirty Read ์ƒํ™ฉ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํŠธ๋žœ์žญ์…˜ 2์—์„œ ์ž‘์—…์„ ๋๋‚ด๊ณ  commit์„ ํ–ˆ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.)

ํ•˜์ง€๋งŒ ํŠธ๋žœ์žญ์…˜ 1์€ ์•„์ง commit ํ•˜์ง€ ์•Š์€ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ž‘์—…์ค‘์ธ ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค. 

ํŠธ๋žœ์žญ์…˜ 1์€ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ updateํ•˜๊ธฐ ์ „ ๋ฐ์ดํ„ฐ, updateํ•œ ํ›„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์กฐํšŒํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ํ˜ผ๋ž€์ด ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ Non-repeatable Read๋ผ๊ณ  ํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜ 1์€ ์›๋ž˜ ์ˆ˜์ • ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ์ƒํƒœ์—์„œ, ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์ˆ˜์ •ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ฝ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

Phantom Read (์œ ๋ น ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ)

ํŠธ๋žœ์žญ์…˜ 1์ด ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์ž‘์—…ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฝ์—ˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ

๊ทธ๋Ÿฐ๋ฐ ํŠธ๋žœ์žญ์…˜ 2์—์„œ ์ถ”๊ฐ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ insertํ•˜๊ณ , ์ด ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋ฐ‹ํ–ˆ์Šต๋‹ˆ๋‹ค.

(์œ„์˜ Non-repeatable Read ์ƒํ™ฉ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ insert ์ž‘์—…์„ ํ–ˆ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.)

ํ•˜์ง€๋งŒ ํŠธ๋žœ์žญ์…˜ 1์€ ์•„์ง commit ํ•˜์ง€ ์•Š์€ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ž‘์—…์ค‘์ธ ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค. 

ํŠธ๋žœ์žญ์…˜ 1์€ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ Insert๋œ ์œ ๋ น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ Phantom Read๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ 1์€ ์›๋ž˜ ์กด์žฌํ•˜์ง€ ์•Š์•˜๋˜, ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์ถ”๊ฐ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


@Transactional ์–ด๋…ธํ…Œ์ด์…˜

์Šคํ”„๋ง์˜ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ rollback์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฑฑ์ •๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

  Level Dirty Read Non-repeatable Read Phantom Read
READ UNCOMMITED 0 O O O
READ COMMITED 1 X O O
REPEATABLE READ 2 X X O
SERIALIZABLE 3 X X X

ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•ด์ค„ ๋•Œ, ์ฝ๊ธฐ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜๋Š” ๊ณต์œ ๋ฝ๊ณผ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜๋Š” ๋ฐฐํƒ€๋ฝ์„ ์ด์šฉํ•˜์—ฌ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. 

 

READ UNCOMMITED

- ๊ณ ๋ฆฝ ์ˆ˜์ค€์ด Level 0์œผ๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ ๋ช…๋ น์–ด๋กœ, ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ์•„๋ฌด๋Ÿฐ ๊ณต์œ ๋ฝ์„ ๊ฑธ์ง€ ์•Š๋Š”๋‹ค.

 

READ UNCOMMITTED๋Š” ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ์•„๋ฌด๋Ÿฐ ๊ณต์œ ๋ฝ๋„ ๊ฑธ์ง€ ์•Š์ง€๋งŒ ๋ฐฐํƒ€๋ฝ์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐฑ์‹ ์†์‹ค ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ฑธ์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๊ณต์œ ๋ฝ๊ณผ ๋ฐฐํƒ€๋ฝ์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ฝ์Šต๋‹ˆ๋‹ค. SELECT ๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” Level์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ A๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ B๋ผ๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” B๋ผ๋Š” ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ(์˜ค์† ๋ฐ์ดํ„ฐ) B๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹จ์ˆœํžˆ @Transactional ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋ถ™์—ฌ์ฃผ๋ฉด ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ ๋ ˆ๋ฒจ์€ jdbc ๊ธฐ๋ณธ isolation level์„ ๋”ฐ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ MYSQL์„ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด defalut transaction isolation level์€ 2, ORACLE์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด 1, MariaDB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด 2๊ฐ€ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ฆฝ ๋ ˆ๋ฒจ์ด ๋†’๋‹ค๊ณ  ํ•ด์„œ ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ,

๊ณ ๋ฆฝ์„ฑ์ด ๋†’์•„์ง€๋Š” (๋™์‹œ์„ฑ์ด ๋‚ฎ์•„์ง€๋Š”) ๋งŒํผ ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€๊ณ , ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ œํ•œ๋˜๋Š” ์ ์ด ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


@Transactional(readOnly = true)

@Transactional(readOnly = true)
public List<RoomDto> showRooms() {
    return roomDao.findAll();
}

 

๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ˆœ ์ฝ๊ธฐ ์ž‘์—…๋งŒ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์ด๋ผ๋ฉด transaction์˜ readOnly ๊ฐ’์„ true๋กœ ์„ค์ •ํ•ด๋‘๋ฉด ์„ฑ๋Šฅ์„ ๋” ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

readOnly๋กœ ์„ค์ •ํ•ด๋‘๊ฒŒ ๋˜๋ฉด SELECT ๋ฌธ๋งŒ ์ง€์›ํ•˜๊ฒŒ ๋˜๋ฉฐ, UPDATE, INSERT, DELETE ์ฟผ๋ฆฌ๋ฌธ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถˆํ•„์š”ํ•œ ์ง€์›์„ ๋ง‰์•„์ฃผ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์—ฌ ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ํƒ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ฝ๊ธฐ ์ž‘์—…๋งŒ ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž„์„ ๋ฐ”๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

 

ref) https://mangkyu.tistory.com/30

๋Œ“๊ธ€