1. 트랜잭션의 개념
트랜잭션이란 데이터베이스에서 하나 이상의 작업을 논리적으로 묶은 작업 단위를 의미합니다.
이러한 트랜잭션은 데이터의 무결성과 일관성을 유지하기 위해 반드시 안정적으로 수행되어야 합니다.
트랜잭션의 4가지 필수 특성
• 원자성(Atomicity): 트랜잭션 내의 모든 작업은 전부 실행되거나 전부 취소되어야 합니다. 중간에 일부 작업만 실행된 상태로 멈추는 일이 없어야 하며, 이를 위해 Commit과 Rollback 명령어가 사용됩니다.
• 일관성(Consistency): 트랜잭션 수행 전후로 데이터베이스는 항상 일관된 상태를 유지해야 합니다. 무결성 제약 조건을 위반하는 경우 트랜잭션은 중단됩니다.
• 고립성(Isolation): 하나의 트랜잭션이 수행 중일 때, 다른 트랜잭션이 그 데이터에 접근하거나 간섭하지 못하도록 보장해야 합니다.
• 지속성(Durability): 트랜잭션이 성공적으로 완료되면 그 결과는 시스템 장애가 발생해도 영구적으로 보존되어야 합니다.
2. 트랜잭션 연산
Commit과 Rollback
• Commit은 트랜잭션이 정상적으로 완료되었을 때 그 결과를 데이터베이스에 반영하는 연산입니다.
• Rollback은 트랜잭션 실행 도중 오류나 예외가 발생했을 때, 실행된 모든 작업을 취소하고 이전 상태로 되돌리는 연산입니다.
SAVEPOINT
• SAVEPOINT는 트랜잭션 내부에 설정할 수 있는 중간 지점입니다.
• 트랜잭션 중간에 SAVEPOINT를 설정해두면 전체를 되돌리지 않고 해당 지점까지만 되돌릴 수 있습니다.
• ROLLBACK TO SAVEPOINT 명령을 사용하여 부분적으로 Rollback이 가능합니다.
트랜잭션 오류의 예
• 무결성 제약 조건 위반 (예: 고유값 중복, 외래키 위배)
• 잠금 충돌 (여러 트랜잭션이 같은 데이터를 동시에 수정 시도)
• 데이터베이스 연결 오류 (네트워크 문제, 서버 다운 등)
• 잘못된 SQL 명령 실행
데이터 이동 연산
(1) 디스크와 메모리 간 이동
• input(X)은 디스크의 데이터를 메인 메모리로 불러오는 연산입니다.
• output(X)은 메인 메모리 데이터를 디스크에 저장하는 연산입니다.
(2) 메모리와 프로그램 변수 간 이동
• read(X)는 메모리에서 프로그램 변수로 데이터를 가져오는 연산입니다.
• write(X)는 변수 값을 메모리에 저장하는 연산입니다.
3. 트랜잭션 상태
트랜잭션은 다음과 같은 상태를 가질 수 있습니다.
• 활성화(Active): 트랜잭션이 실행 중인 상태
• 실패(Failed): 오류로 인해 실행이 중단된 상태
• 철회(Aborted): Rollback이 실행된 상태
• 부분 완료(Partially committed): 모든 작업이 끝나고 Commit 명령 직전 상태
• 완료(Committed): Commit이 수행되어 성공적으로 종료된 상태
4. 트랜잭션 격리 수준
트랜잭션 간의 간섭을 얼마나 허용할지를 정의하는 것이 격리 수준입니다. 격리 수준이 높을수록 데이터 무결성은 좋아지지만 동시성은 낮아지고 성능이 떨어질 수 있습니다.
• Read Uncommitted (레벨 0): 아직 Commit되지 않은 데이터를 읽는 것이 허용됨. 가장 낮은 수준으로 Dirty Read, Non-Repeatable Read, Phantom Read가 발생할 수 있음.
• Read Committed (레벨 1): Commit된 데이터만 읽을 수 있음. Dirty Read는 방지되지만 Non-Repeatable Read와 Phantom Read는 여전히 발생 가능.
• Repeatable Read (레벨 2): 트랜잭션 내에서 읽은 데이터는 항상 동일함을 보장. Non-Repeatable Read는 방지되지만 Phantom Read는 발생 가능.
• Serializable (레벨 3): 가장 엄격한 수준. 모든 트랜잭션이 완전히 고립되어 실행되며 Dirty Read, Non-Repeatable Read, Phantom Read 모두 방지됨.
5. 트랜잭션에서 발생하는 대표적인 문제
• Dirty Read: 아직 Commit되지 않은 데이터를 다른 트랜잭션이 읽는 현상
• Non-Repeatable Read: 같은 데이터를 두 번 읽었을 때 값이 달라지는 현상
• Phantom Read: 동일한 조건으로 데이터를 조회했을 때, 이전에는 없던 새로운 데이터가 생겨 조회 결과가 달라지는 현상
이 내용은 휴넷사회복지평생교육원의 데이터베이스 강의를 듣고 정리한 것입니다.
'CS > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 23. 병행 수행과 병행 제어 (0) | 2025.05.22 |
---|---|
[데이터베이스] 22. 트랜잭션과 회복(2) (0) | 2025.05.21 |
[데이터베이스] 20. 정규화 (2) (0) | 2025.05.20 |
[데이터베이스] 19. 정규화 (1) (0) | 2025.05.19 |
[데이터베이스] 18. 데이터베이스 설계 (2) (0) | 2025.05.09 |