이 글을 쓰게 된 계기
트랜잭션이라는 용어를 많이 들었고 본인은 단순히 데이터베이스의 연산이 잘못되면 롤백을 하고 , 성공하면 커밋을 한다고만 알고 있었습니다. 하지만 공부를 해보니 더욱 깊은 개념이 있었으며
앞으로의 개발자 생활에 매우 중요한 개념이라고 생각하여 다시 한번 개념을 상기시키기위해 이 포스팅을 합니다.
트랜잭션의 개념 및 필요성
트랜잭션은 하나 이상의 데이터베이스 연산이 묶여 하나의 작업 단위로 처리하는 행위를 의미합니다.
이를 통해 데이터의 무결성과 일관을 유지할수있습니다.
트랜잭션의 ACID 속성
트랜잭션의 ACID 속성은 데이터베이스의 신뢰성을 보장하는 핵심 요소입니다
원자성 (Atomicity) | 트랜잭션 내의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함을 의미합니다. 이는 트랜잭션이 부분적으로만 실행되는 것을 방지합니다. |
일관성 (Consistency) |
트랜잭션이 실행되기 전과 후에 데이터베이스가 일관된 상태를 유지해야 함을 의미합니다. 즉, 트랜잭션은 데이터베이스의 모든 제약 조건을 만족시켜야 합니다. |
고립성 (Isolation) |
동시에 실행되는 여러 트랜잭션이 서로 영향을 주지 않도록 격리되어야 함을 의미합니다. 이는 동시성 제어를 통해 구현됩니다. |
지속성 (Durability) |
트랜잭션이 성공적으로 커밋된 후에는, 시스템에 장애가 발생하더라도 해당 트랜잭션의 결과가 영구적으로 반영되어야 함을 의미합니다. ACID 속성을 통해 데이터베이스 시스템은 다양한 오류 상황에서도 데이터의 안정성과 일관성을 유지할 수 있습니다. |
트랜잭션의 관리와 최적화
트랜잭션을 효율적으로 관리하기 위해서는 트랜잭션의 크기와 실행 시간을 적절히 조절하여 데드락을 최소화하는 것이 중요합니다. 또한, 격리 수준을 조정하여 고립성과 성능 사이의 균형을 맞출 수 있습니다. 격리 수준을 낮추면 동시성은 증가하지만 데이터의 일관성이 저하되며, 격리 수준을 높이면 동시성은 감소하지만 데이터의 일관성이 상승합니다.
트랜잭션의 흐름
1. Active(활성) : 트랜잭션이 시작됩니다. 가장 초기 상태입니다
2. Partially Committed(부분적 커밋) : 트랜잭션이 최종 작업을 실행할 때 부분적으로 커밋된 상태입니다.
성공 시 --
3. Committed(커밋): 트랜잭션이 모든 작업을 성공적으로 실행하면 커밋되었다고 합니다. 데이터베이스에 영구히 저장됩니다.
실패 시--
3. Failed(실패) : 연산중 하나의 연산이라도 실패하면 더 이상 진행되지 않습니다.
4. Aborted: 연산중 하나라도 실패 시 데이터베이스의 모든 쓰기 작업을 롤백하며 데이터베이스의 트랜잭션 실행 전의 상태로 원상 복구합니다.
트랜잭션의 최신 트렌드와 대안
트랜잭션은 애플리케이션에서 동시 접근이 빈번한 상황에서 데이터의 무결성을 유지하기 위한 중요한 개념입니다. 하지만 트랜잭션은 고비용의 잠금 객체로 인하여 성능 저하가 생기기 마련이며, 이에 따라 최신 트렌드는 상황에 맞게 최적화를 하는 방법이 있습니다.
트랜잭션의 무결성이냐 , 성능이냐 이 두 가지의 트레이드오프가 있습니다.
데이터베이스의 성능이 중요한 경우 트랜잭션을 제거(최소화)하거나 NoSQL을 사용하는 방법이 있습니다.
NoSQL 데이터베이스는 전통적인 관계형 데이터베이스(RDBMS)와는 다른 접근 방식을 취합니다.
RDBMS의 고정된 스키마와 달리 NoSQL은 스키마가 유연하여 데이터 모델링에 자유도가 높습니다.
NoSQL은 수평적 확장성(Horizontal Scalability)을 제공하여 데이터 증가에 유연하게 대응할 수 있습니다. 또한 RDBMS보다 고성능이며 읽기/쓰기 작업이 빠릅니다.
느낀 점
트랜잭션의 대한 개념을 한층 더 학습할 수 있는 포스팅이었습니다.
다음글은 낙관적락, 비관적락, 트랜잭션 격리 수준에 대해 포스팅해 보겠습니다.
'mysql' 카테고리의 다른 글
동시성문제의 필요성 (0) | 2024.07.19 |
---|---|
트랜잭션의 격리수준(Transaction Isolation Level) [2편-1] (0) | 2024.07.17 |
jdbc PreparedStatement (0) | 2023.08.01 |
tool을 이용하여 E-R다이어그램 설계방법 (0) | 2023.07.25 |
MYSQL 로컬에서 작업내용 -> 다른 로컬로 옮기기! (0) | 2023.07.24 |