๐Ÿ’ป ์ฝ”๋”ฉ ์ผ๊ธฐ : [Spring] '@Transanction' ํŽธ

ybkยท2024๋…„ 4์›” 30์ผ

spring

๋ชฉ๋ก ๋ณด๊ธฐ
21/55
post-thumbnail

๐Ÿ”” '@Transanction'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!


๐Ÿ’Ÿ ํŠธ๋žœ์žญ์…˜

ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • START TRANSACTION : ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • COMMIT : ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์ž‘์—…์„ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • ROLLBACK : ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์ž‘์—… ์ทจ์†Œํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ ํ›„ ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  • SAVEPOINT : ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ํŠน์ • ์ง€์ ์— ์ €์žฅ์ ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋กค๋ฐฑํ•  ๋•Œ ํ•ด๋‹น ์ €์žฅ์ ๊นŒ์ง€ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
UPDATE bank
SET money = money - 500
WHERE name = '๊ฐ•์ธ';

UPDATE bank
SET money = money + 500
WHERE name = 'ํฅ๋ฏผ';

/*Transaction ์‹œ์ž‘*/
START TRANSACTION;
COMMIT; #๋ชจ๋‘ ์„ฑ๊ณต(๋ฐ˜์˜)

START TRANSACTION;
ROLLBACK ; # ๋ชจ๋‘ ์‹คํŒจ(๋ฐ˜์˜ํ•˜์ง€ ์•Š์Œ, ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์ „์œผ๋กœ ๋Œ๋ฆผ)
  • START TRANSACTION์„ ๋จผ์ € ์‹œ์ž‘ํ•˜๊ณ  UPDATE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  COMMIT์„ ํ•˜๋ฉด ๋ชจ๋‘ ๋ฐ˜์˜๋˜์–ด ๊ฐ•์ธ์ด๋Š” 500์ด ์ค„๊ณ  ํฅ๋ฏผ์ด๋Š” 500์›์ด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.
  • START TRANSACTION์„ ๋จผ์ € ์‹œ์ž‘ํ•˜๊ณ  UPDATE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ROLLBACK์„ ํ•˜๋ฉด ๋ชจ๋‘ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„ money ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’Ÿ @Transanction

๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋  ๊ฒฝ์šฐ ์ปค๋ฐ‹ํ•˜๊ณ  ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ๋กค๋ฐฑํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

@Transactional(rollbackFor = Exception.class) #์˜ˆ์™ธ ํด๋ž˜์Šค ๋ช…์‹œ์  ์ง€์ •
  • Spring์—์„œ๋Š” RuntimeException๊ณผ ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค๋“ค์— ๋Œ€ํ•ด์„œ๋งŒ ๋กค๋ฐฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Exception.class์„ ์ง€์ •ํ•จ์œผ๋กœ์จ ๋ชจ๋“  ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋กค๋ฐฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
@Service
@RequiredArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class Service03 {

    private final Mapper07 mapper;

	....
}
profile
๊ฐœ๋ฐœ์ž ์ค€๋น„์ƒ~

0๊ฐœ์˜ ๋Œ“๊ธ€