Transaction in database

hwiba·2022년 9월 16일

Transaction in database

목록 보기
1/1
post-thumbnail

Transaction In database

트랜잭션에 대한 개념을 정리하는 글로서, 부족하거나 틀릴 수 있습니다.
정정할 사항이 있다면 댓글을 통해 알려주시면 감사하겠습니다.

갑자기 트랜잭션?

백엔드 개발자로서 ORM 이나 row Query를 이용해서 DB에 접근할 일이 많은데, DB에 접근할 때 하나의 트랜잭션 또는 여러개의 트랜잭션을 어떻게 관리해야될지 스스로 정리하기 위해 트랜잭션에대해 알아보겠습니다.

Transaction에 대한 개념

범용적으로는 데이터베이스 관리시스템 또는 유사한 시스템에서의 상호작용의 단위 이라하는데, 이부분은 잘 와닿지가 않아서 데이터베이스 관점에서의 Transaction을 말하자면 하나의 논리적 기능을 수행하기 위한 작업의 단위(LUW, Logical Units of Work)라고 이해하는 것이 실무에 더욱 도움이 될 것 같습니다.

예를 들어서 A은행계좌에서 100원을 B은행계좌로 이체하는A

  • A은행계좌에서 100원을 출금을 수행하는 작업 a
  • B은행계좌에서 100원을 입금을 수행하는 작업 b

a, b라는 작업 둘다 수행되어야 A 가 완수되는 것이고 A 가 하나의 트랜잭션이라 보는 것이죠.

ACID

트랜잭션의 성질로는 ACID가 있는데,
ACID(Atomic, Consistency, Isolation, Durability)는 트랜잭션이 성공과 실패가 분명하고, 믿을 수 있고, 안전하게 수행된다는 것을 보장하기 위한 성질 입니다.
위키 피디아 참조

Atomic(원자성)

"all or nothing"
트랜잭션과 관련된 일이 모두 수행되었거나 모두 수행되지 않음을 보장하는 특징입니다.

예를들어서,
위의 트랜잭션 Aab의 작업이 있는데 작업들 중 하나라도 실패하면 모두 실패해야함을 의미하는 것 입니다.

Consistency(일관성)

허용된 방식으로만 데이터를 변경해야함을 의미

여기서 허용된 방식이란, 일관성있는 데이터베이스를 유지하기 위해 정한 규칙 또는 조건입니다.

예를 들어서,
위의 트랜잭션에서 a라는 작업을 수행하기위해서는 a은행계좌에 이체할 수 있는 돈이 있어야 수행할 수 있다는 규칙 있고, 이 규칙을 지킴으로서 데이터베이스가 일관성을 유지시키는 것이죠.

Isolation(격리성)

트랜잭션 수행 시 각각의 트랜잭션이 끼어들지 못하게 보장하는 것입니다(각각의 트랜잭션은 독립적)

이때 격리성은 여러 격리 수준(Isolation Level)로 나뉘어 격리성을 보장합니다.

격리수준이 낮을수록(격리성이 낮을수록) 동시에 여러 사용자가 동일한 데이터에대한 접근 즉, 동시성과 성능이 높아지고 동시접근에 대한 문제현상이 나타납니다.
반대로 격리수준이 높을수록(격리성이 높을수록) 동시성과 성능이 낮아지고, 데이터무결성과 트랜잭션의 고립성이 높아집니다.

격리수준과 동시성에대한 자세한 내용은 다음 글에서 다뤄보겠습니다.

MySQL의 격리수준

참조 - https://hleee.medium.com/%EA%B2%A9%EB%A6%AC-%EC%88%98%EC%A4%80-3287d4bcc64d

Durability(영구성)

성공적으로 수행된 트랜잭션은 영구적으로 반영되어야함을 보장하는 특징입니다.

커밋된 트랜잭션이 영구적으로 보존되어야함을 의미 하는 것 입니다.

예를 들어서, 위의 트랜잭션 A가 커밋되어졌다면 컴퓨터가 꺼져도 해당 트랜잭션이 데이터베이스 반영되어야 함을 의미합니다.

Reference

profile
도전하는 사랑하는 개발자

0개의 댓글