์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Spring] @Transactional

๐Ÿ˜Ž ์ง€์‹ in Action/Spring ๐ŸŒฑ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2024. 12. 13. 17:35

๋ณธ๋ฌธ

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ (Isolation Level)

DEFAULT : ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€
READ_UNCOMMITED : ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Œ

READ_COMMITED : Dirty Read๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Commit๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Œ

REPEATABLE READํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์กฐํšŒํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— shared lock์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์€ ๊ทธ ์˜์—ญ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Œ

SERIALIZABLE : ์—„๊ฒฉํ•œ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€, ์™„๋ฒฝํ•œ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ ๋ชจ๋“œ ์ œ๊ณต, PHANTOM READ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ
 

ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒ ์˜ต์…˜ (Propagation)

์–ด๋–ค ํŠธ๋žœ์žญ์…˜์ด ๋™์ž‘์ค‘์ธ ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€


REQUIRED
 : ์ด๋ฏธ ์‹œ์ž‘๋œ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ์ฐธ์—ฌํ•˜๊ณ , ์—†์œผ๋ฉด ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘

SUPPORTS : ์ด๋ฏธ ์‹œ์ž‘๋œ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ์ฐธ์—ฌํ•˜๊ณ , ์—†์œผ๋ฉด ํŠธ๋žœ์žญ์…˜ ์—†์ด ์ฒ˜๋ฆฌ

REQUIRED_NEW : ํ•ญ์ƒ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘, ์ด๋ฏธ ์ง„ํ–‰์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋‹ค๋ฉด ์ž ์‹œ ๋ณด๋ฅ˜

MANDATORY : ์ด๋ฏธ ์‹œ์ž‘๋œ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ์ฐธ์—ฌํ•˜๊ณ , ์—†์œผ๋ฉด ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ๋Œ€์‹  ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด. ํ˜ผ์ž์„œ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

NOT_SUPPORTED : ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•จ. ์ด๋ฏธ ์ง„ํ–‰์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋‹ค๋ฉด ์ž ์‹œ ๋ณด๋ฅ˜

NEVER : ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ฐ•์ œํ•จ. ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜ ๋˜ํ•œ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์žˆ๋‹ค๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ด

NESTED : ์ด๋ฏธ ์‹คํ–‰์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋‹ค๋ฉด ์ค‘์ฒฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ง„ํ–‰ํ•จ. ๋ถ€๋ชจ ํŠธ๋žœ์žญ์…˜์€ ์ค‘์ฒฉ ํŠธ๋žœ์žญ์…˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€๋งŒ ์ค‘์ฒฉ ํŠธ๋žœ์žญ์…˜์€ ๋ถ€๋ชจ ํŠธ๋žœ์žญ์…˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ
 

readOnly ์˜ต์…˜

์ฝ๊ธฐ ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜์–ด๋„ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ Flushํ•˜์ง€ ์•Š์Œ
ํ”Œ๋Ÿฌ์‹œํ•  ๋•Œ ์ˆ˜ํ–‰๋˜๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ์Šค๋ƒ…์ƒท ๋น„๊ต ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
 
 
 
 
 


 
https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html#transaction-declarative-annotations-method-visibility

Using @Transactional :: Spring Framework

The @Transactional annotation is metadata that specifies that an interface, class, or method must have transactional semantics (for example, "start a brand new read-only transaction when this method is invoked, suspending any existing transaction"). The de

docs.spring.io

 


https://github.com/Eundms/learn-spring

GitHub - Eundms/learn-spring

Contribute to Eundms/learn-spring development by creating an account on GitHub.

github.com

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ