2026-03-09

트랜잭션(Transaction)

트랜잭션이란

데이터베이스에서 하나의 논리적인 작업 단위

⇒ 여러 SQL 작업을 하나의 묶음으로 처리한다.

  • 예시

    계좌 A → 계좌 B 송금
    
    1. A 계좌 돈 차감
    2. B 계좌 돈 증가 둘 중 하나라도 실패하면 전체 작업을 취소 (Rollback)

트랜잭션 특징 (ACID)

  • Atomicity (원자성)

    작업은 모두 성공하거나 모두 실패 예시

    A 계좌 -10000
    B 계좌 +10000
    

    하나라도 실패하면 전체 rollback

  • Consistency (일관성)

    트랜잭션 전후 데이터 규칙 유지 예시

    잔액은 음수가 될 수 없음
    
  • Isolation (격리성)

    여러 트랜잭션이 서로 간섭하지 않도록 동시에 실행되는 트랜잭션 문제 발생 가능 예시

    • Dirty Read
    • Phantom Read
  • Durability (지속성)

    트랜잭션이 commit 되면 데이터는 영구 저장 서버 꺼져도 유지

트랜잭션 상태

image.png

Active
 → Commit
 → Failed
 → Rollback

트랜잭션 격리 수준 (Isolation Level)

수준 특징
Read Uncommitted 커밋 안된 데이터 읽음
Read Committed 커밋된 데이터만 읽음
Repeatable Read 같은 데이터 항상 동일
Serializable 완전 격리

격리 수준이 높을수록 동시성 낮아짐

트랜잭션 관련 문제

  • Dirty Read: 커밋되지 않은 데이터 읽음
  • Non-repeatable Read: 같은 데이터를 두 번 읽었는데 값이 바뀜
  • Phantom Read: 조회 결과 행이 갑자기 늘어남

Spring에서 트랜잭션

@Transactional
  • commit
  • rollback
  • 트랜잭션 관리

참고자료

  • https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction-%EC%9D%B4%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
  • https://innovation123.tistory.com/61
  • https://hstory0208.tistory.com/entry/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%B4%EB%9E%80-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%82%AC%EC%9A%A9%EB%B2%95%EC%97%90-%EB%8C%80%ED%95%B4-%EC%89%BD%EA%B2%8C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
  • https://velog.io/@onejaejae/Transaction-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC-1

results matching ""

    No results matching ""