티스토리 뷰
728x90
병행제어 기법은 여러 트랜잭션이 동시에 데이터베이스에 접근할 때 일관성과 무결성을 유지하기 위한 기술입니다. 병행 제어를 통해 데이터베이스의 상태가 손상되지 않도록 방지하며, 트랜잭션 간의 상호작용을 제어합니다. 병행 제어 기법은 교착 상태, 기아 상태, 갱신 손실, 모순된 결과 등의 문제를 해결하는 데 필수적입니다.
주요 병행제어 기법들:
1. 로킹(Locking) 기법
- 개념: 트랜잭션이 데이터에 접근할 때 락(Lock)을 설정하여 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 제어하는 기법입니다.
- 주요 종류:
- 공유 락 (Shared Lock): 데이터 읽기에만 적용되며, 여러 트랜잭션이 동시에 데이터를 읽을 수 있습니다.
- 배타 락 (Exclusive Lock): 데이터 쓰기에 사용되며, 다른 트랜잭션은 그 데이터에 접근할 수 없습니다.
- 장점: 간단하며 데이터의 일관성을 보장합니다.
- 단점: 교착 상태(Deadlock)가 발생할 수 있으며, 이를 해결하기 위해 교착 상태 회피 또는 예방 기법이 필요합니다.
2. 타임스탬프 순서 기법(Timestamp Ordering)
- 개념: 트랜잭션이 시작될 때 고유한 타임스탬프를 부여하여 그 순서에 따라 트랜잭션을 처리하는 기법입니다. 트랜잭션의 타임스탬프를 기준으로 먼저 온 트랜잭션이 먼저 처리됩니다.
- 특징:
- 트랜잭션 간 충돌이 발생할 경우, 타임스탬프에 따라 충돌이 해결됩니다.
- 나중에 도착한 트랜잭션이 먼저 도착한 트랜잭션을 침범하지 않도록 방지합니다.
- 장점: 교착 상태를 방지할 수 있습니다.
- 단점: 많은 충돌이 발생하면 트랜잭션이 자주 무효화될 수 있습니다.
3. 낙관적 병행 제어 기법(Optimistic Concurrency Control)
- 개념: 트랜잭션 실행 중에는 검사를 하지 않고, 커밋할 때 데이터의 충돌 여부를 확인하는 방식입니다. 트랜잭션 실행 중에는 자유롭게 연산을 하고, 완료 시점에서 검사를 통해 데이터 일관성을 확인합니다.
- 특징:
- 데이터 충돌이 발생하지 않으면 그대로 커밋되고, 충돌이 발생하면 롤백됩니다.
- 장점: 충돌 가능성이 낮은 환경에서 효율적입니다.
- 단점: 충돌이 자주 발생하는 환경에서는 롤백이 자주 일어나 비효율적일 수 있습니다.
4. 다중 버전 병행 제어(MVCC: Multi-Version Concurrency Control)
- 개념: 동일한 데이터에 대해 여러 버전을 유지하여, 읽기 트랜잭션과 쓰기 트랜잭션이 동시에 발생해도 일관성을 유지하는 방식입니다.
- 특징:
- 쓰기 트랜잭션은 새로운 버전을 생성하고, 읽기 트랜잭션은 기존 버전을 참조합니다.
- PostgreSQL, Oracle 등의 데이터베이스에서 많이 사용됩니다.
- 장점: 읽기와 쓰기가 충돌하지 않으므로 성능이 우수합니다.
- 단점: 데이터 버전 관리가 복잡해질 수 있으며, 저장 공간을 더 많이 사용할 수 있습니다.
5. 2단계 로킹 기법(2PL: Two-Phase Locking)
- 개념: 트랜잭션이 데이터에 락을 걸 때는 모든 락을 얻은 후에 작업을 시작하고, 작업이 끝난 후에 락을 모두 해제하는 기법입니다. 락을 설정하는 "확장 단계"와 락을 해제하는 "축소 단계"로 나뉩니다.
- 특징:
- 확장 단계: 트랜잭션이 필요한 모든 락을 설정하는 단계.
- 축소 단계: 락을 해제하는 단계.
- 트랜잭션이 락을 해제하면 이후 락을 설정할 수 없습니다.
- 장점: 트랜잭션의 일관성을 보장합니다.
- 단점: 교착 상태가 발생할 수 있습니다.
병행 제어 기법의 주요 문제점
- 교착 상태(Deadlock): 여러 트랜잭션이 서로 자원을 기다리며 무한히 대기하는 상태입니다. 이를 방지하기 위해서는 타임아웃, 교착상태 회피(Wait-Die, Wound-Wait), 탐지 및 복구 기법 등이 필요합니다.
- 갱신 손실(Lost Update): 두 트랜잭션이 동시에 데이터를 갱신하면서 한 트랜잭션의 갱신이 사라지는 문제.
- 모순된 데이터(Inconsistent Read): 트랜잭션 중간에 다른 트랜잭션이 데이터를 변경하여 읽어온 데이터가 모순되는 상황.
병행 제어의 목적
- 일관성 유지: 트랜잭션이 데이터베이스의 일관성을 유지하도록 보장.
- 동시성 제어: 여러 트랜잭션이 동시에 실행되더라도 데이터 무결성을 유지.
- 교착 상태 방지: 교착 상태와 같은 병목 현상을 예방하여 시스템이 멈추지 않도록 보장.
이러한 병행 제어 기법들은 각각의 환경과 요구 사항에 맞추어 선택할 수 있으며, 데이터베이스의 성능과 무결성, 일관성을 보장하는 데 중요한 역할을 합니다.
728x90
'Study > 정보처리기사' 카테고리의 다른 글
응집도(Cohesion)란? (0) | 2024.10.13 |
---|---|
패킷 교환 방식(Packet Switching)이란? (0) | 2024.10.13 |
럼바우 데이터 모델링(Rumbaugh Data Modeling)이란? (1) | 2024.10.13 |
정보 보호 기술의 핵심 개념 AAA란? (0) | 2024.10.13 |
DCL (Data Control Language)이란? (0) | 2024.10.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- javascript 필수 문법
- stdlib.h
- Collections
- 중첩 함수(nested function)
- math.h
- jackson 라이브러리
- structuredclone()
- mermaid-cli
- useEffect
- 소프트웨어 버전 관리
- ajax (asynchronous javascript and xml)
- Jest
- public vs assets
- x.y.z (메이저.마이너.패치)
- 쉽게 풀어쓴 C언어 Express
- inp
- chrome extension 자동 배포
- 원시값(primitive)
- 프로세스 강제 종료
- pwa(progressive web app)
- json.parse(json.stringify())
- react
- react router
- named export vs default export
- counter
- defaultdict
- styled-components
- 시맨틱 버전(semantic versioning
- core web vitals
- semver)
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함