🌐 νŠΈλžœμž­μ…˜(Transaction)μ΄λž€?

leejihyeonΒ·2026λ…„ 5μ›” 11일

1. νŠΈλžœμž­μ…˜μ΄ ν•„μš”ν•œ 이유

μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” μ„œλΉ„μŠ€λ“€μ€ λŒ€λΆ€λΆ„ λ°μ΄ν„°λ² μ΄μŠ€(DB)λ₯Ό μ‚¬μš©ν•œλ‹€.
예λ₯Ό λ“€μ–΄:

  • νšŒμ›κ°€μž…
  • μ£Όλ¬Έν•˜κΈ°
  • κ³„μ’Œμ΄μ²΄
  • κ²Œμ‹œκΈ€ μž‘μ„±

이런 κΈ°λŠ₯듀은 λ‹¨μˆœνžˆ ν•œ 번의 μž‘μ—…μœΌλ‘œ λλ‚˜μ§€ μ•ŠλŠ”λ‹€.
μ—¬λŸ¬ 개의 데이터 λ³€κ²½ μž‘μ—…μ΄ ν•¨κ»˜ μΌμ–΄λ‚œλ‹€.

λ¬Έμ œλŠ” 이 μž‘μ—…λ“€ 쀑 μΌλΆ€λ§Œ μ„±κ³΅ν•˜λ©΄ 데이터가 꼬일 수 μžˆλ‹€λŠ” 것이닀.

κ·Έλž˜μ„œ λ“±μž₯ν•œ κ°œλ…μ΄ λ°”λ‘œ νŠΈλžœμž­μ…˜(Transaction) 이닀.


2. νŠΈλžœμž­μ…˜(Transaction)μ΄λž€?

νŠΈλžœμž­μ…˜μ€: λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν•˜λ‚˜μ˜ 논리적인 μž‘μ—… λ‹¨μœ„μ΄λ‹€.

μ‰½κ²Œ λ§ν•˜λ©΄: "μ—¬λŸ¬ μž‘μ—…μ„ ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ„œ μ²˜λ¦¬ν•˜λŠ” 것"이닀.

νŠΈλžœμž­μ…˜ νŠΉμ§•:

  • λͺ¨λ‘ μ„±κ³΅ν•˜λ©΄ μ €μž₯
  • ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ μ „λΆ€ μ·¨μ†Œ

3. κ³„μ’Œμ΄μ²΄ μ˜ˆμ‹œλ‘œ μ΄ν•΄ν•˜κΈ°

μ² μˆ˜κ°€ μ˜ν¬μ—κ²Œ 10,000원을 μ†‘κΈˆν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

정상적인 흐름

1️⃣ 철수 κ³„μ’Œμ—μ„œ 10,000원 차감

UPDATE account SET money = money - 10000;

2️⃣ 영희 κ³„μ’Œμ— 10,000원 μΆ”κ°€

UPDATE account SET money = money + 10000;

두 μž‘μ—…μ΄ λͺ¨λ‘ μ„±κ³΅ν•˜λ©΄:

βœ… 이체 μ™„λ£Œ


4. λ§Œμ•½ 쀑간에 μ‹€νŒ¨ν•œλ‹€λ©΄?

  • μ˜ˆμ‹œ

    • 영희 κ³„μ’Œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ
    • μ„œλ²„ 였λ₯˜ λ°œμƒ
    • DB μ—°κ²° λŠκΉ€

이런 λ¬Έμ œκ°€ 생기면 μ–΄λ–»κ²Œ 될까?

❌ νŠΈλžœμž­μ…˜μ΄ μ—†λ‹€λ©΄

  • 철수 λˆμ€ λΉ μ Έλ‚˜κ°
  • 영희 λˆμ€ μ•ˆ 듀어감

πŸ‘‰ 데이터가 κΉ¨μ§„λ‹€.


5. κ·Έλž˜μ„œ νŠΈλžœμž­μ…˜μ΄ ν•„μš”ν•˜λ‹€

νŠΈλžœμž­μ…˜μ€ μž‘μ—…λ“€μ„ ν•˜λ‚˜λ‘œ λ¬ΆλŠ”λ‹€.

  • λ‘˜ λ‹€ μ„±κ³΅ν•˜λ©΄ μ €μž₯(Commit)
  • ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ 이전 μƒνƒœλ‘œ 볡ꡬ(Rollback)

6. Commitκ³Ό Rollback

βœ… Commit

μ΅œμ’… μ €μž₯

"λͺ¨λ“  μž‘μ—… 성곡 β†’ DB에 반영"

❌ Rollback

이전 μƒνƒœλ‘œ 되돌리기

"쀑간에 μ‹€νŒ¨ β†’ μž‘μ—… 전체 μ·¨μ†Œ"

ν•œ μ€„λ‘œ 정리

"λ°μ΄ν„°μ˜ μ•ˆμ „μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ μž‘μ—…μ„ ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 기술"


8. νŠΈλžœμž­μ…˜μ˜ νŠΉμ§• (ACID)

νŠΈλžœμž­μ…˜μ€ ACIDλΌλŠ” 4κ°€μ§€ νŠΉμ§•μ„ κ°€μ§„λ‹€.

1️⃣ Atomicity (μ›μžμ„±)

  • λͺ¨λ“  μž‘μ—…μ€ μ „λΆ€ μ„±κ³΅ν•˜κ±°λ‚˜ μ „λΆ€ μ‹€νŒ¨ν•΄μ•Ό ν•œλ‹€.
  • μ˜ˆμ‹œ
    • 좜금 성곡
    • μž…κΈˆ μ‹€νŒ¨

πŸ‘‰ 이런 상황은 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€.

2️⃣ Consistency (일관성)

  • νŠΈλžœμž­μ…˜ 전후에 λ°μ΄ν„°λŠ” 항상 정상 μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€.

  • μ˜ˆμ‹œ

    • κ³„μ’Œ 총 κΈˆμ•‘μ΄ 항상 동일해야 함

3️⃣ Isolation (격리성)

  • λ™μ‹œμ— μ—¬λŸ¬ μ‚¬μš©μžκ°€ μž‘μ—…ν•΄λ„ μ„œλ‘œ 영ν–₯을 μ΅œμ†Œν™”ν•΄μ•Ό ν•œλ‹€.
  • μ˜ˆμ‹œ
    • 두 λͺ…이 λ™μ‹œμ— 같은 κ³„μ’Œλ₯Ό μˆ˜μ •ν•˜λ”λΌλ„ 좩돌 λ°©μ§€

4️⃣ Durability (지속성)

  • μ„±κ³΅ν•œ λ°μ΄ν„°λŠ” 영ꡬ적으둜 μ €μž₯λ˜μ–΄μ•Ό ν•œλ‹€.
  • μ˜ˆμ‹œ
    • μ„œλ²„κ°€ 꺼져도 μ €μž₯된 λ°μ΄ν„°λŠ” μœ μ§€

9. Springμ—μ„œμ˜ νŠΈλžœμž­μ…˜

Springμ—μ„œλŠ” 보톡 @Transactional μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•œλ‹€.

@Transactional
public void transfer() {
    withdraw();
    deposit();
}

@Transactional : 이 λ©”μ„œλ“œ μ•ˆμ˜ μž‘μ—…λ“€μ„ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ λ¬ΆλŠ”λ‹€.


10. 핡심 정리

νŠΈλžœμž­μ…˜μ΄λž€?

  • μ—¬λŸ¬ μž‘μ—…μ„ ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 것

νŠΉμ§•

  • λͺ¨λ‘ 성곡 β†’ Commit
  • ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ β†’ Rollback

μ‚¬μš©ν•˜λŠ” 이유

  • 데이터 무결성과 μ•ˆμ •μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•΄

Springμ—μ„œλŠ”?

  • @Transactional μ‚¬μš©

#### πŸ”₯ 개인적으둜 μ΄ν•΄ν•˜κΈ° μ‰¬μ› λ˜ λΉ„μœ 

νŠΈλžœμž­μ…˜μ€ 마치 κ²Œμž„μ˜ μ €μž₯ μ‹œμŠ€ν…œκ³Ό λΉ„μŠ·ν•˜λ‹€.

  • 성곡 β†’ μ €μž₯
  • μ‹€νŒ¨ β†’ 이전 μ„Έμ΄λΈŒ 파일둜 볡ꡬ

즉:

Rollback = 되돌리기 λ²„νŠΌ
Commit = μ €μž₯ λ²„νŠΌ

처럼 μƒκ°ν•˜λ©΄ μ΄ν•΄ν•˜κΈ° 쉽닀.

0개의 λŒ“κΈ€