iknowDev
Blog Driven Development
iknowDev 🐘
/
  • μž‘μ„± κΈ€ λͺ©λ‘
  • Github
  • Category (30)
    • πŸ“• CS μŠ€ν„°λ”” (22)
      • λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ (0)
      • Java, Spring (5)
      • 도컀, μΏ λ²„λ„€ν‹°μŠ€, λ¦¬λˆ…μŠ€ (4)
      • λ„€νŠΈμ›Œν¬ (11)
      • λ°μ΄ν„°λ² μ΄μŠ€ (1)
      • λ””μžμΈ νŒ¨ν„΄ (1)
      • 자료 ꡬ쑰 (0)
    • πŸ“ μ•Œκ³ λ¦¬μ¦˜ μŠ€ν„°λ”” (4)
      • Java (3)
      • JavaScript (0)
      • Python3 (1)
    • πŸ’» 토이 ν”„λ‘œμ νŠΈ 개발기 (2)
    • πŸš€ κ²½ν—˜ (2)
      • μ—λŸ¬ λŒ€μ‘ (2)
      • 회고 (0)
      • 즐거운일 (0)

Popular

Tag

Netty   
λ°±μ€€   
java   
νŠΈλžœμž­μ…˜   
Spring   
κ³¨λ“œ   
Was   
μ—λŸ¬ λŒ€μ‘   
side Project   
μΏ λ²„λ„€ν‹°μŠ€   

Comment


Designed By hELLO
iknowDev

Blog Driven Development

πŸ“• CS μŠ€ν„°λ””/Java, Spring

[Spring] ↩️ @Transactional μ™œ μ‚¬μš©ν•˜λŠ” κ±°μ§€?

2023. 3. 2. 21:35

@Transactional μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš© μ΄μœ μ™€ μ‚¬μš© 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

 

 

πŸ“Œ @Transactional μ‚¬μš© 이유

ν•œλ²ˆμ— μˆ˜ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” 연산듀을 μ²˜λ¦¬ν•  λ•Œ κ·Έ 쀑 ν•˜λ‚˜κ°€ 였λ₯˜κ°€ λ‚œ 경우 κ·Έ 전에 μ‹€ν–‰λ˜μ—ˆλ˜ SQL 쿼리듀이 λ‹€ λ‘€λ°±λ˜μ–΄μ•Ό ν•˜κΈ°μ—

*λ‘€λ°±(Rollback): 둀백은 μž‘μ—… μ€‘ λ¬Έμ œκ°€ λ°œμƒλ˜μ–΄ νŠΈλžœμž­μ…˜μ˜ μ²˜λ¦¬κ³Όμ •μ—μ„œ λ°œμƒν•œ λ³€κ²½μ‚¬ν•­μ„ μ·¨μ†Œν•˜λŠ” λͺ…λ Ήμ–΄

 

μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λŠ”μ„ μ–Έμ  νŠΈλž™μž­μ…˜ (@Transactional)

  • 클래슀 λ ˆλ²¨μ— @Transactional 을 μ„ μ–Έν•˜λ©΄,
        ν•΄λ‹Ή 클래슀 λ‚΄ λͺ¨λ“  ν…ŒμŠ€νŠΈ λ©”μ„œλ“œμ— νŠΈλžœμž­μ…˜μ΄ 적용되고,
        각 ν…ŒμŠ€νŠΈ λ©”μ„œλ“œκ°€ μˆ˜ν–‰ μ™„λ£Œλœ ν›„ 둀백이 됨
  • λ©”μ„œλ“œ λ ˆλ²¨μ— @Transactional 을 μ„ μ–Έν•˜λ©΄,
        ν•΄λ‹Ή ν…ŒμŠ€νŠΈ λ©”μ„œλ“œμ— νŠΈλžœμž­μ…˜μ΄ μ μš©λ˜μ–΄ μˆ˜ν–‰ μ™„λ£Œ ν›„ 둀백이 됨

 

νŠΈλžœμž­μ…˜ κ΄€λ ¨ μ½”λ“œλ₯Ό 직접 μž‘μ„±ν•˜λŠ”  ν”„λ‘œκ·Έλž˜λ°μ  νŠΈλžœμž­μ…˜ (TransactionTemplate , TransactionManager)

 

 

 

 

πŸ“Œ @Transactional κΈ°λŠ₯

  1. begin, commit μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰
  2. λ§Œμ•½ μ˜ˆμ™Έκ°€ 생겼닀면 rollback 처리λ₯Ό μžλ™ μˆ˜ν–‰ν•΄μ€€λ‹€.

 

 

νŠΈλžœμž­μ…˜ 4κ°€μ§€ μ„±μ§ˆ(ACID)에 λŒ€ν•΄μ„œλŠ” μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬λ₯Ό μ€€λΉ„ν•œ μ‚¬λžŒμ΄λΌλ©΄ 듀어봀을 κ²ƒμž…λ‹ˆλ‹€.

 

μ›μžμ„±(Atomicity)

  • ν•œ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‹€ν–‰ν•œ μž‘μ—…λ“€μ€ ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•œλ‹€. 즉, λͺ¨λ‘ 성곡 λ˜λŠ” λͺ¨λ‘ μ‹€νŒ¨.

일관성(Consistency)

  • νŠΈλžœμž­μ…˜μ€ 일관성 μžˆλŠ” λ°μ΄νƒ€λ² μ΄μŠ€ μƒνƒœλ₯Ό μœ μ§€ν•œλ‹€. (data integrity 만쑱 λ“±.)

격리성(Isolation)

  • λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” νŠΈλžœμž­μ…˜λ“€μ΄ μ„œλ‘œ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šλ„λ‘ κ²©λ¦¬ν•΄μ•Όν•œλ‹€.

μ˜μ†μ„±(Durability)

  • νŠΈλžœμž­μ…˜μ„ μ„±κ³΅μ μœΌλ‘œ 마치면 κ²°κ³Όκ°€ 항상 μ €μž₯λ˜μ–΄μ•Ό ν•œλ‹€.

 

 

 

 

 

πŸ“Œ @Transactional μ˜΅μ…˜

 

propagation (νŠΈλžœμž­μ…˜ λ™μž‘ 도쀑 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ„ ν˜ΈμΆœν•  λ•Œ, μ–΄λ–»κ²Œ ν•  것인지 μ§€μ •ν•˜λŠ” μ˜΅μ…˜)

ex. propagation = Propagation.REQUIRED

  λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ΄ μ‘΄μž¬ λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ΄ μ‘΄μž¬ X
Propagation.REQUIRED μžμ‹ νŠΈλžœμž­μ…˜μ€ λΆ€λͺ¨μ—κ²Œ 포함 (μžμ‹ νŠΈλžœμž­μ…˜μ΄ μ‹€νŒ¨ν•˜λ©΄ λΆ€λͺ¨λ„ λ‘€λ°±) μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ„ 생성 (μžμ‹μ΄ λΆ€λͺ¨κ°€ 됨)
Propagation.REQUIRES_NEW μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ„ μƒμ„± μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ„ μƒμ„±
Propagation.NESTED λΆ€λͺ¨ νŠΈλžœμž­μ…˜ μ•ˆμ— μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ„ 생성  
Propagation.MANDATORY λΆ€λͺ¨μ— ν¬ν•¨ μ˜ˆμ™Έ λ°œμƒ
Propagation.SUPPORTS λΆ€λͺ¨μ— 포함 νŠΈλžœμž­μ…˜ 없이 λ™μž‘
Propagation.NOT_SUPPORTED λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ„ λ³΄λ₯˜ν•˜κ³ , νŠΈλžœμž­μ…˜ μ—†μ΄ λ™μž‘ νŠΈλžœμž­μ…˜ μ—†μ΄ λ™μž‘
Propagation.NEVER μ˜ˆμ™Έ λ°œμƒ νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ κ°•μ œ

 

isolation (μΌκ΄€μ„±μ—†λŠ” 데이터 ν—ˆμš© μˆ˜μ€€μ„ μ„€μ •)

ex. isolation = Isolation.DEFAULT

 

rollbackFor (νŠΉμ • μ˜ˆμ™Έ λ°œμƒ μ‹œ rollback 함)

ex. rollbackFor = Exception.class

 

noRollbackFor (νŠΉμ • μ˜ˆμ™Έ λ°œμƒ μ‹œ rollback μ•ˆ 함)

ex. rollbackFor = Exception.class

 

readOnly (읽기 μ „μš©μœΌλ‘œ μ„€μ •)

ex. readOnly = true

timeout (μ§€μ •ν•œ μ‹œκ°„ 내에 λ©”μ†Œλ“œ μˆ˜ν–‰μ΄ μ™„λ£Œλ˜μ§€ μ•ŠμœΌλ©΄ rollback)

 

    'πŸ“• CS μŠ€ν„°λ””/Java, Spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • πŸ€” JDBC / DBCP / JNDI κ°œλ…μ μœΌλ‘œ μ΄ν•΄ν•˜κΈ°
    • 🐟🍞 λΆ•μ–΄λΉ΅μœΌλ‘œ μ΄ν•΄ν•˜λŠ” 객체지ν–₯
    • [Spring] ⌚ Quartz 라이브러리 Scheduling
    • [Spring] πŸƒ μ™œ Spring ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”κ°€?
    iknowDev
    iknowDev
    iknowDev 개발 λΈ”λ‘œκ·Έ SSAFY 8κΈ° Java

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”