본문 바로가기

CS

[ DB - 2 ] 트랜잭션(Transaction): 데이터 무결성이란

반응형
💡 [DB] 관련 글 다시 보기 

[ DB - 3 ] 인덱싱(Indexing)이란? : 인덱싱을 하는 이유

[ DB -1 ] 관계형 데이터베이스(RDB)와 NoSQL의 차이점


 

📍 DB가 백엔드 개발자에게 중요한 이유

  • 백엔드 개발자는 WAS(Web Application Server)와 DB(Database)의 상호작용을 이해하고, 성능 이슈 및 오류를 처리할 수 있어야 한다.
  • WAS에서 발생하는 오류뿐만 아니라 DB의 응답성 저하 또한 시스템 성능에 영향을 미칠 수 있으므로, DB의 구조와 동작 원리를 이해하는 것이 중요하다.
  • 효율적인 데이터 처리와 관리, 최적화된 질의(Query) 작성 및 문제 상황의 원인 분석을 위해 DB 지식은 필수적이다.

 


📍 트랜잭션이란?

  • 트랜잭션(Transaction)이란 데이터베이스에서 논리적 작업 단위를 의미하며, 일련의 작업들이 모두 성공하거나 모두 실패하여  일관된 상태를 유지하도록 보장하는 것을 목표로 한다.
  • 예를 들어, 은행 계좌 이체 작업은 출금과 입금 작업이 모두 성공하거나 모두 취소되어야만 데이터의 무결성을 보장할 수 있다.

 

출처: https://itwiki.kr/w/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98#google_vignette

 


📍 트랜잭션의 ACID 특성

  • 트랜잭션은 다음과 같은 4가지 특성을 통해 데이터의 신뢰성을 보장한다:
  1. 원자성(Atomicity)
    • 트랜잭션 내 모든 작업이 성공하거나 실패하여 All or Nothing 원칙을 준수함.
    • 중간에 실패 시 모든 작업은 롤백(Rollback) 처리된다.
  2. 일관성(Consistency)
    • 트랜잭션 수행 전후의 데이터 상태가 일관성을 유지하도록 보장함.
    • 제약 조건, 규칙 등이 트랜잭션 수행 후에도 충족되어야 한다.
  3. 격리성(Isolation)
    • 여러 트랜잭션이 동시에 실행되더라도 서로의 작업에 영향을 미치지 않도록 보장함.
    • 격리 수준(Isolation Level)에 따라 동시성 문제를 관리한다.
  4. 지속성(Durability)
    • 트랜잭션이 커밋(Commit)되면 그 결과는 영구적으로 데이터베이스에 반영됨.

 


📍 트랜잭션 동시성 문제

트랜잭션이 동시에 실행될 때, 적절히 관리하지 않으면 다음과 같은 문제가 발생할 수 있다:

  1. 더티 리드(Dirty Read)
    • 트랜잭션 A가 아직 커밋되지 않은 데이터를 트랜잭션 B가 읽는 경우.
      (e.g., A에서 수정 후 커밋하지 않고 롤백하면 B는 잘못된 데이터를 참조함)
  2. 오버라이트(Lost Update)
    • 두 트랜잭션이 동일 데이터를 수정하면서 한 트랜잭션의 수정 내용이 덮어씌워지는 경우.
  3. Non-Repeatable Read
    • 트랜잭션 중간에 다른 트랜잭션이 데이터를 수정하여 처음 읽었던 결과와 나중에 읽은 결과가 달라지는 경우.
  4. 팬텀 리드(Phantom Read)
    • 트랜잭션 중간에 다른 트랜잭션이 데이터를 삽입하거나 삭제하여 쿼리 결과가 달라지는 경우.
  5. 로스트 업데이트(Lost Update)
    • 동시에 같은 데이터를 수정했을 때 한 트랜잭션의 변경 사항이 유실되는 현상.

 


📍 격리 수준(Isolation Level)

동시성 문제를 해결하기 위해 격리 수준을 설정한다. 아래는 SQL에서 정의하는 4가지 수준이다:

  1. Read Uncommitted
    • 커밋되지 않은 데이터를 읽을 수 있음(Dirty Read 허용).
    • 가장 낮은 격리 수준으로 성능은 좋지만 데이터 무결성을 보장하기 어려움.
  2. Read Committed
    • 커밋된 데이터만 읽을 수 있음(Dirty Read 방지).
  3. Repeatable Read
    • 트랜잭션이 완료될 때까지 동일 데이터를 반복적으로 읽어도 항상 같은 결과를 반환함(Non-Repeatable Read 방지).
  4. Serializable
    • 가장 엄격한 수준으로 트랜잭션이 완전히 직렬화되어 실행됨(Phantom Read 방지).
      성능은 저하될 수 있으나 데이터 무결성은 완벽히 보장됨.

 


📍 트랜잭션 관리의 중요성

  • 트랜잭션을 적절히 관리하지 않으면 데이터 무결성이 깨지거나 시스템 장애로 이어질 수 있다.
  • 개발자는 트랜잭션의 동작 원리를 이해하고, 적절한 격리 수준을 설정하여 동시성 문제를 해결해야 한다.
  • 트랜잭션 롤백과 커밋 처리, 로그 기록 등을 통해 시스템의 신뢰성과 안정성을 유지할 수 있다.
반응형