β˜• Backend/Spring, Spring Boot

[Spring] @Transactional

devCloud 2026. 3. 31. 16:50
728x90

🌱 Spring @Transactional λ™μž‘ 원리 및 핡심 μ»΄ν¬λ„ŒνŠΈ

1. νŠΈλžœμž­μ…˜ 기초 및 μˆ˜λ™ μ œμ–΄

νŠΈλžœμž­μ…˜μ€ DB μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 μž‘μ—… λ‹¨μœ„λ‘œ, μ›μžμ„±(All or Nothing)을 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

⚠️ μˆ˜λ™ μ œμ–΄μ˜ 문제점

connection.setAutoCommit(false); 
try { 
    // λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
    connection.commit(); 
} catch (Exception e) { 
    connection.rollback(); 
}

핡심 λ‘œμ§μ— νŠΈλžœμž­μ…˜ μ½”λ“œκ°€ μ„žμ—¬ 가독성이 λ–¨μ–΄μ§€κ³  쀑볡 μ½”λ“œκ°€ λ°œμƒν•©λ‹ˆλ‹€.


2. @Transactional λ™μž‘ 원리

μŠ€ν”„λ§μ€ 선언적 νŠΈλžœμž­μ…˜ 방식을 μ‚¬μš©ν•˜λ©°, λ‚΄λΆ€μ μœΌλ‘œλŠ” AOP와 ν”„λ‘μ‹œ νŒ¨ν„΄μ„ 톡해 λ™μž‘ν•©λ‹ˆλ‹€.

  • ν”„λ‘μ‹œ 객체: νƒ€κ²Ÿ λ©”μ„œλ“œλ₯Ό κ°μ‹Έμ„œ μ‹€ν–‰ν•˜λ©°, νŠΈλžœμž­μ…˜ μ‹œμž‘κ³Ό μ’…λ£Œ(commit/rollback)λ₯Ό λŒ€μ‹  μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • 빈 ν›„μ²˜λ¦¬κΈ°(BeanPostProcessor): μŠ€ν”„λ§ 빈 생성 μ‹œμ μ— @Transactional이 뢙은 클래슀λ₯Ό ν”„λ‘μ‹œ 객체둜 κ΅μ²΄ν•˜μ—¬ λ“±λ‘ν•©λ‹ˆλ‹€.

3. 핡심 μ»΄ν¬λ„ŒνŠΈ

Transaction Manager

ν”Œλž«νΌλ³„(JPA, JDBC λ“±) νŠΈλžœμž­μ…˜ 처리λ₯Ό μΆ”μƒν™”ν•œ μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€. 기술이 λ°”λ€Œμ–΄λ„ μ„œλΉ„μŠ€ λ‘œμ§μ€ μˆ˜μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

Transaction Synchronization Manager

νŠΈλžœμž­μ…˜ λ™μ•ˆ λ™μΌν•œ 컀λ„₯μ…˜μ„ μœ μ§€ν•˜λ„λ‘ κ΄€λ¦¬ν•˜λŠ” λ³΄κ΄€μ†Œμž…λ‹ˆλ‹€. 같은 νŠΈλžœμž­μ…˜ λ‚΄μ˜ μ—¬λŸ¬ λ©”μ„œλ“œκ°€ μ•ˆμ „ν•˜κ²Œ 컀λ„₯μ…˜μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

Weaving (μœ„λΉ™)

ν”„λ‘μ‹œλ₯Ό 톡해 λΆ€κ°€ κΈ°λŠ₯(νŠΈλžœμž­μ…˜)을 μ‹€μ œ νƒ€κ²Ÿ λ‘œμ§μ— μ—°κ²°ν•˜λŠ” 핡심 λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€.


4. 전체 μ‹€ν–‰ 흐름도

@Transactional μ„ μ–Έ
  ↓
빈 ν›„μ²˜λ¦¬κΈ°κ°€ ν”„λ‘μ‹œ 생성
  ↓
ν΄λΌμ΄μ–ΈνŠΈ → ν”„λ‘μ‹œ 호좜
  ↓
ν”„λ‘μ‹œ: Transaction Managerμ—κ²Œ νŠΈλžœμž­μ…˜ μ‹œμž‘ μš”μ²­
  ↓
Synchronization Manager: 컀λ„₯μ…˜ 보관
  ↓
μ‹€μ œ λ©”μ„œλ“œ μ‹€ν–‰
  ↓
성곡 → commit / μ‹€νŒ¨ → rollback

핡심 μš”μ•½ πŸ’‘

@Transactional은 λ‹¨μˆœν•œ μ–΄λ…Έν…Œμ΄μ…˜μ„ λ„˜μ–΄, μŠ€ν”„λ§μ˜ AOP와 좔상화 기술(Manager)이 μ§‘μ•½λœ κΈ°λŠ₯μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” 데이터 μ •ν•©μ„± κ±±μ • 없이 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—λ§Œ μ˜¨μ „νžˆ 집쀑할 수 μžˆμŠ΅λ‹ˆλ‹€.

728x90