![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvEdjl%2FbtsiNbp75mz%2FlHa1VfKOmI4G6TZuTaLccK%2Fimg.png)
Chapter 7. Transactions
2023. 6. 6. 10:25
스터디/Designing Data-Intensive Applications
이번 장에서는 백엔드 개발자라면 매우 중요한 트랜잭션에 대해 소개합니다. 트랜잭션의 기본 개념과 더불어 다양한 DBMS에서 어떻게 트랜잭션을 구현하는지 살펴볼 수 있는 장이므로, 시간이 나실 때 읽을 것을 추천합니다. ACID Atomicity 원자성을 의미합니다. 트랜잭션 단위로 묶인 작업은 모두 성공하거나 모두 실패하는 트랜잭션의 속성입니다. MySQL은 트랜잭션의 원자성을 보장하기 위해 WAL(Write-Ahead Log)라는 로그성 파일을 활용합니다. 트랜잭션이 수행되는 과정에서 발생하는 데이터 변경을 로그로 WAL에 추가합니다(append). 만약 알 수 없는 이유로 시스템이 다운됐을 때, DBMS는 WAL를 참고해 반영되지 않은 트랜잭션의 작업을 디스크에 반영합니다. 트랜잭션이 WAL를 사용해..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNToir%2FbtrQ661ZbV9%2FaAe5liWICaQtvrTBIAp2Zk%2Fimg.png)
[Database] DBA급 개발자로 - #17 Timestamp Ordering Concurrency Control
2022. 11. 13. 11:25
Database/DBA급 개발자로
이전 포스팅에서는 2 phase locking을 통해 어떻게 concurrent transaction을 처리하는지 살펴봤습니다. 이번 포스팅에서는 timestamp를 통해 concurrent transaction을 처리하는 방법을 살펴보겠습니다. Timestamp Ordering Timestamp ordering 방식도 2 phase locking처럼 concurrent transaction을 처리하기 위한 프로토콜입니다. 주된 차이점은 2 phase locking의 경우 트랜잭션이 실행되는 과정에서 충돌이 발생하면 해당 트랜잭션을 롤백하지만 timestamp ordering의 경우 트랜잭션이 실행되기 전에 충돌 여부를 미리 확인합니다. 두 트랜잭션 Ti, Tj이 동시에 진행되고 트랜잭션이 시작된 시간이..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn8Pgo%2FbtrQyVGR92s%2Fw2ddxEnc2KxKREHvIKaHi1%2Fimg.png)
[Debezium] Debezium 이란?
2022. 11. 6. 20:59
Open Source/Debezium
Debezium은 database에서 발생하는 변경사항을 추적할 수 있는 일종의 Apache Kafka Connect의 source connector입니다. 각각의 connector은 해당 데이터베이스의 CDC(change data capture)와 관련된 기능을 활용해서 변경된 데이터에 대한 정보를 가져옵니다. 성공적으로 commit이 발생한 데이터에 대해서만 변경사항이 전파되기 때문에 실패한 트랜잭션은 고려할 필요가 없다고 합니다. Debezium은 변경사항을 디스크에 저장하기 때문에 데이터의 변경사항을 전달받아야 하는 애플리케이션이 다운되더라도 문제가 없습니다. Change Data Capture이란 데이터의 변경사항을 식별하고 추적할 수 있는 소프트웨어 디자인 패턴입니다. CDC의 목적은 데이터의..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpiCQi%2FbtrP8Xzdhrz%2FpeiAHEH0nokrXizkcgc3u1%2Fimg.png)
[Database] DBA급 개발자로 - #15 Concurrency Control
2022. 11. 1. 17:55
Database/DBA급 개발자로
이전 포스팅에 쿼리 처리 비용을 계산해서 최적의 쿼리를 선택하는 방법에 대해 살펴봤습니다. 그리고 DBMS에서 동시에 실행되는 트랜잭션을 어떻게 처리하는지 살펴보겠습니다. Transaction Concurrency Control 트랜잭션의 동시성 처리가 왜 중요할까요? 동시에 실행된 다수의 트랜잭션이 하나의 데이터를 수정할 때 어떻게 데이터의 일관성을 유지할 수 있을까요? 가장 단순한 방법은 한 시점에 하나의 트랜잭션만 데이터에 접근할 수 있도록 하는 방법입니다(예를 들면 데이터에 접근하는 트랜잭션을 순차적으로 실행하는 방식입니다). 하지만 트랜잭션을 순차적으로 실행하면 처리 속도가 줄고 DBMS의 응답 시간이 길어질 수 있습니다. 이를 해결하기 위해서는 데이터의 일관성을 유지하면서도 트랜잭션을 동시에 ..