DataBase/STUDY

[DataBase] 트랜잭션(Transaction)이란?

코맹 2024. 7. 16. 16:42

 

📌 트랙잭션이란?

트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다.

 

💡여기서 작업의 단위는 질의어 한 문장이 아닌 질의어 명령문들을 사람이 정하는 기준에 따라 정해진 것!!

 

우리가 MySQL에서 입력하는 모든 쿼리 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다.

 

INSERT, DELETE, UPDATE, SELECT 등의 SQL 명령문을 통해 데이터 상태를 바꿀 때마다 내부에서 자동적으로 Commit을 실행하여 변경된 내역을 데이터베이스에 반영하는 것이다.

 

 

 

📌 트랜잭션의 특징

트랜잭션의 특징은 크게 4가지로 구분된다.
  • 원자성(Atomicity)
  • 일관성(Consistency)
  • 독립성(Isolation)
  • 지속성(Durability)

 

원자성(Automicity)이란?
  • all or nothing
  • 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것이다.
  • 트랜잭션은 사람이 설계한 논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어져야 사람이 다루는 데 문제가 없다.
  • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

 

일관성(Consistency)
  • 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
  • 트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행된다.
  • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 수행 완료 후의 상태가 같아야 한다.
    (기본키, 외래키 제약과 같은 명시적인 무결성 제약 조건뿐만 아니라, 두 계좌의 잔고의 합은 이체 전후가 같아야 한다는 사항 같은 비명시적 일관성 조건도 있다.)

 

독립성(Isolation)
  • 독립성은 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다.
  • 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.

 

지속성(Durability)
  • 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다

 

📌 트랜잭션 연산

Commit 연산
  • Commit 연산은 한 개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고, 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

 

Rollback 연산
  • Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다.

 

📌 트랜잭션 상태

 

 

활동(Active)

트랜잭션이 실행중인 상태

 

실패(Failed)

트랜잭션 실행에 오류가 발생하여 중단된 상태

 

철회(Aborted)

트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

 

부분 완료(Partially Commited)

트랜잭션의 마지막 연산까지 실행하고 Commit 연산이 실행되기 직전의 상태

 

완료(Committed)

트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

 

💡 부분완료(Partially Commited) vs 완료(Committed)
- commit 요청이 들어오면 상태는 부분 완료 상태가 된다.
- 이후 commit을 문제없이 수행할 수 있다면 완료 상태로 전이되고, 만약 오류가 발생하면 실패 상태가 된다.
- 즉, 부분완료는 commit 요청이 들어왔을 때를 의미하고,
- 완료 상태는 commit을 정상적으로 완료한 상태를 의미한다.

 

 

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

  • 트랜잭션은 꼭 필요한 최소의 코드에만 적용하는 것이 좋다.
  • 즉, 여러 개의 트랜잭션으로 쪼개서 트랜잭션의 범위를 최소화하라는 의미이다.
더보기

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

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

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

 

❓ 데이터베이스 커넥션이란?

- 애플리케이션과 데이터베이스 연결을 뜻한다.

- 애플리케이션에서 데이터베이스에 접속하고 접속을 종료하는 일련의 과정을 의미한다.

 

 

 

 

 

 

 

💡 참고자료

 

트랜잭션이란

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.트랜잭션은 데이터베이스 시스

velog.io

 

 

[MYSQL] 📚 트랜잭션(Transaction) 개념 & 사용 💯 완벽 정리

트랜잭션(Transaction) 이란? 트랜잭션(Transaction)의 사전적 의미는 거래이고, 컴퓨터 과학 분야에서의 트랜잭션(Transaction)은 "더이상 분할이 불가능한 업무처리의 단위"를 의미한다. 이것은 하나의

inpa.tistory.com