Transaction이란?
데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.
출처.
https://ko.wikipedia.org/wiki/데이터베이스_트랜잭션
풀어서 이야기 하자면 시스템과 시스템의 통신간에 발생하는 전달방식이며 해당 통신으로 전달되는 데이터는 0 혹은 1
즉, 실패해서 데이터를 전송하지 못하거나 성공해서 데이터를 전송한다는 것을 의미 합니다.
이러한 통신을 Transaction이라고 칭하며 개발에서 Transaction이라는 용어는 Database와 서버간의 통신을 할 때에 가장 많이 사용하고 예제로도 많이 사용됩니다.
예시로 Database에 조회와 동시에 데이터를 insert/update/delete 등의 작업이 요청이 발생한다고 생각해보면 조회하는 작업을 멈추고 다른 작업이 실행된다면 cpu는 이 작업을 memory에 어떻게 넣을지 상상해 보면 분명 cpu는 작업에 대한 프로세스가 정확하게 동작하지 못하였지만 간혹가다 정상동작처럼 보이게 실행을 해줄수 있지만 이러한 오동작이 겹치다 보면 cpu는 자신을 보호하기위해 요청한 프로세스가 죽어버리는 상황도 상상할 수 있습니다.
ACID (Atomicity, Consistency, Isolation, Durability)
우리가 개발을 하고 서비스 혹은 프로세스가 다운된다면 가장 기피하고 싶은 상황이 아닐지 싶습니다.
이런 상황을 이미 타파하기 위해 우리 선배들은 모 아니면 도지만 저장되는 데이터의 정확도 즉 신뢰도를 높이기 위해 끊임없이 고민한 결과가 Transaction이며 해당 개념에서 말하는 ACID 성질에 대해서 알아보겠습니다.
- 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
- 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
- 독립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.
- 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
출처.
https://ko.wikipedia.org/wiki/ACID
이러한 개념은 요청간의 lock을 유발하여 속도면에서 단점이 될 수 있습니다.
그래서 대안으로 나온 개념이 MVCC라는 개념이 있습니다.
MVCC (multiversion concurrency control, MCC, MVCC)
MVCC는 Multiversion Concurrency Control의 약자로 동시성, 일관성을 유지 하기 위한 중요한 기술이라고 이야기합니다.
이유는 우리가 보통 RDB를 사용할때 가장 많이 하는 말이 가장 안정적이고 요청간에 데이터 소실의 위험성이 거의 없는 안정된 Database여서라고 대답하는 근거라고 합니다.
하지만 데이터베이스마다 해당 개념을 어떻게 적용하는지에 따라 다른 결과를 내기도 합니다.
Mysql은 좀 더 안정적인 데이터 저장 및 트랜젝션 처리를 위해 기본적인 개념과 여러 스토리지 엔진 등을 통해 유연한 데이터 처리를 제공합니다.
반면에 Postgresql은 자신들만의 특별한 트랜젝션을 만들어 빠른 읽기와 복잡한 쿼리 연산등에 더 빠른 속도를 제공하지만 그로인해 Vacuum과 같은 개념을 통해 테이블을 청소하지 않으면 오히려 성능 저하를 불러올수 있는 단점이 있어 각각 용도에 맞는 데이터 베이스를 선택하는게 중요하다고 하네요.
- vacuum에 대해 더 알고 싶다면 : https://techblog.woowahan.com/9478/
'개발 개념 정리' 카테고리의 다른 글
[Database] 현업에서 주로 사용하는 데이터 베이스 특징 정리 (0) | 2022.08.12 |
---|