본문 바로가기

개발중/sql

트랜잭션이 뭐냐면 🎨 ACID가뭐냐면 🎨 트랜잭션은 필요한가 ?

728x90
반응형

 

트랜잭션(Transaction)이란?

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한

작업의 단위 또는 한꺼번에 수행되어야할 일련의 연산들을 의미한다.

 

트랜잭션은 작업의 완전성을 보장해준다. 

즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우에는

원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능이다.

사용자의 입장에서는 작업의 논리적 단위로 이해를 할 수 있고

시스템의 입장에서는 데이터들을 접근 또는 변경하는 프로그램의 단위가 된다.

 

트랜잭션은 SELECT, UPDATE, INSERT, DELETE와 같은 연산을 수행하여

데이터베이스의 상태를 변화시키는 작업의 단위다.

 

트랜잭션의 특징(ACID)
  • Atomicity(원자성)
    • 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영 되지 않아야 한다.
    • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
  • Consistency(일관성)
    • 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.
    • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 수행 완료 후의 상태가 같아야 한다.
  • Isolation(독립성)
    • 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들수 없다.
    • 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조 할 수 없다.
  • Durability(지속성)
    • 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다.

 

트랜잭션의 Commit과 Rollback

Commit

commit 연산은 하나의 트랜잭션이 성공적으로 끝났고,

데이터베이스가 일관성있는 상태에 있을 때 하나의 트랜잭션이 끝났음을 알려주기 위해 사용하는 연산이다. 

 

Rollback

Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어

데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도

트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다.

 

트랜잭션의 상태

 

Transaction State
  • 활동(Active)
    • 트랜잭션의 활동 상태. 트랜잭션이 실행중이며 동작중인 상태를 말한다.
  • 부분완료(Partially Committed)
    • 트랜잭션의 Commit 명령이 도착한 상태. 트랜잭션의 commit 이전 sql문이 수행되고 commit만 남은 상태를 말한다.
  • 완료(Committed)
    • 트랜잭션 완료 상태. 트랜잭션이 정상적으로 완료된 상태를 말한다.
  • 실패(Failed)
    • 트랜잭션 실패 상태. 트랜잭션이 더 이상 정상적으로 진행될 수 없는 상태를 말한다.
  • 취소(Aborted)
    • 트랜잭션 취소 상태. 트랜잭션이 취소되고 트랜잭션 실행 이전 데이터로 돌아간 상태를 말한다.

 

부분완료와 완료의 차이점

commit요청이 들어오면 상태는 부분완료 상태가 된다.

이후 commit을 문제없이 수행 할 수 있다면 완료 상태로 전이되고,

만약 오류가 발생하면 실패 상태가 된다.

즉, 부분완료는 commit요청이 들어왔을 때를 말하며, 완료 상태는 commit을 정상적으로 완료한 상태를 말한다.

 

트랜잭션을 사용할 때 주의할 점

트랜잭션은 꼭 필요한 최소의 코드에만 적용하는 것이 좋다.

즉 트랜잭션의 범위를 최소화하라는 의미다.

일반적으로 데이터베이스 커넥션은 개수가 제한적이다.

그런데 각 단위 프로그램이 커넥션을 소유하는 시간이 길어진다면 사용 가능한 여유 커넥션의 개수는 줄어들게 된다.

그러다 어느 순간에는 각 단위 프로그램에서 커넥션을 가져가기 위해 기다려야 하는 상황이 발생할 수도 있는 것이다.

728x90
반응형