동시성 제어
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
동시성 제어는 데이터베이스에서 트랜잭션이 데이터 무결성을 유지하면서 안전하게 실행되도록 보장하는 기술이다. 이는 데이터베이스 관리 시스템(DBMS)에 적용되어 ACID 원칙을 준수하도록 하며, 직렬화 가능성과 복구 가능성을 보장해야 한다. 동시성 제어는 갱신 손실, dirty read, 잘못된 요약과 같은 문제를 방지하며, 락, 직렬 가능성 그래프 검사, 타임스탬프 순서, 다중 버전 동시성 제어, 인덱스 로킹, 커밋 순서 등의 방법을 사용한다. 또한, 낙관적, 비관적, 준낙관적 동시성 제어 분류가 있으며, 분산 환경과 운영체제에서도 중요한 역할을 한다. 분산 환경에서는 분산 직렬 가능성과 커밋 순서화가 중요하며, 운영체제에서는 멀티태스킹 환경에서 자원 공유로 인한 문제를 해결하는 데 기여한다.
더 읽어볼만한 페이지
- 동시성 제어 - 세마포어
세마포어는 데이크스트라가 고안한 정수 변수로, P/V 연산을 통해 자원 접근을 제어하고 동기화 문제를 해결하며, 계수 세마포어와 이진 세마포어로 나뉘어 멀티스레드 환경에서 자원 관리 및 스레드 동기화에 기여한다. - 동시성 제어 - 모니터 (동기화)
모니터는 공유 자원 접근을 제어하여 프로세스 간 동기화를 구현하는 프로그래밍 구조로, 뮤텍스 락, 조건 변수 등으로 구성되어 경쟁 상태를 방지하며 여러 프로그래밍 언어에서 지원된다. - 트랜잭션 처리 - 2단계 커밋 프로토콜
2단계 커밋 프로토콜은 분산 컴퓨팅 환경에서 트랜잭션의 원자성을 보장하는 분산 알고리즘으로, 조정자와 참가자로 구성되어 모든 참가자가 트랜잭션을 완료하거나 아무도 완료하지 못하도록 하며, 커밋 요청 및 커밋 단계를 거쳐 모든 참가자의 동의를 얻어야 커밋된다. - 트랜잭션 처리 - 온라인 트랜잭션 처리
온라인 트랜잭션 처리(OLTP)는 실시간 데이터베이스 트랜잭션 처리 방식으로, 가용성, 속도, 동시성, 내구성을 목표로 은행, 항공사, 전자 상거래 등에서 활용된다. - 데이터베이스 - 지식 베이스
지식 베이스는 특정 주제 정보를 체계적으로 저장 및 관리하며 규칙 기반 추론으로 새로운 지식 도출에 활용되고, 웹 콘텐츠 관리 및 지식 관리 시스템으로 확장되어 온톨로지를 이용, 인공지능 기술과 결합하여 문제 해결책을 제시하고 경험을 통해 학습하는 시스템이다. - 데이터베이스 - 화이트리스트
화이트리스트는 특정 대상만 허용하고 나머지는 차단하는 접근 제어 목록으로, 정보보안, 무역, 금융 등 다양한 분야에서 활용되지만, 목록 선정 기준의 불명확성, 사회적 문제점 등의 위험성으로 투명하고 엄격한 관리가 필요하다.
동시성 제어 |
---|
2. 역사적 배경
데이터베이스 관리 시스템(DBMS)과 그리드 컴퓨팅, 클라우드 컴퓨팅 등 관련 분산 애플리케이션 환경에서 동시성 제어는 데이터베이스 트랜잭션이 데이터베이스의 데이터 무결성을 위반하지 않고 동시에 실행되도록 보장한다.
1970년대 초, 데이터베이스 시스템이 등장하면서 관련 연구가 활발히 진행되었다. 직렬 가능성 이론은 데이터베이스 시스템을 위한 대표적인 동시성 제어 이론으로, 동시성 제어 방법 및 메커니즘을 효과적으로 설계하고 분석하는 데 사용된다.[8][5]
DBMS는 일반적으로 직렬 가능성 트랜잭션 스케줄을 생성하여 정확성을 보장한다. 다만, 애플리케이션에서 정확성을 엄격하게 요구하지 않는 경우에는 성능 향상을 위해 직렬 가능성을 의도적으로 완화하기도 한다.
2. 1. 초기 역사
데이터베이스 시스템 초기에는 데이터베이스 관리 시스템(DBMS)을 포함한 모든 트랜잭션 시스템에서 데이터 무결성을 보장하기 위해 데이터베이스 트랜잭션이 동시에 실행될 수 있도록 하는 동시성 제어가 중요했다. 1970년대 초부터 데이터베이스 시스템을 위한 직렬 가능성 이론이 확립되었으며[8][5], 이는 동시성 제어 방법 및 메커니즘을 효과적으로 설계하고 분석할 수 있도록 한다.일반적으로 DBMS는 직렬 가능성 트랜잭션 스케줄을 생성하도록 보장하지만, 성능 향상을 위해 의도적으로 직렬 가능성을 완화하는 경우도 있다. 또한, 실패한 트랜잭션의 경우에도 정확성을 유지하기 위해 복구 가능성 속성을 가져야 하며, ACID 규칙으로 요약되는 트랜잭션 특성을 보장한다.
2. 2. 발전 과정
데이터베이스 관리 시스템(DBMS)을 비롯한 여러 트랜잭션 시스템과 그리드 컴퓨팅, 클라우드 컴퓨팅 등 관련 분산 애플리케이션에서 동시성 제어는 데이터베이스 트랜잭션이 데이터베이스의 데이터 무결성을 위반하지 않고 동시에 실행되도록 보장한다.[8][5] 1970년대 초 데이터베이스 시스템 등장 이후 관련 연구가 광범위하게 축적되어 직렬 가능성 이론과 같은 동시성 제어 이론이 확립되었다.[8][5]일반적으로 DBMS는 직렬 가능성 트랜잭션 스케줄만 생성하도록 보장하지만, 애플리케이션의 정확성을 크게 해치지 않는 경우 성능 향상을 위해 의도적으로 직렬 가능성을 완화하기도 한다. 또한, 실패한(중단된) 트랜잭션의 경우에도 정확성을 유지하기 위해 스케줄은 복구 가능성 속성을 가져야 한다. DBMS는 ACID 규칙에 따라 ''커밋된'' 트랜잭션의 효과는 보존하고 ''중단된'' 트랜잭션의 효과는 제거한다.
1990년대 초 연합 데이터베이스와 현재의 클라우드 컴퓨팅처럼 데이터베이스가 분산 데이터베이스가 되거나 분산 환경에서 협력해야 함에 따라 동시성 제어 메커니즘의 효율적인 배포가 중요해졌다.
3. 주요 특징
동시성 제어는 개별 트랜잭션이 무결성 규칙을 따르도록 하여 결과적으로 시스템 전체가 무결성을 유지하도록 하는 것을 목표로 한다. 정확성을 유지하면서 가능한 한 성능을 향상시키는 것이 목표이다. 프로세스, 컴퓨터, 컴퓨터 네트워크 그룹에서 트랜잭션이 분산 트랜잭션되는 경우가 많아짐에 따라, 동시성 제어의 필요성은 증대하고 있다. 동시성 제어는 데이터 복구와 복제에도 영향을 받는다.[8][5]
3. 1. 데이터베이스 트랜잭션과 ACID 규칙
데이터베이스 트랜잭션은 데이터베이스의 일관성을 유지하기 위해 ACID 규칙을 따른다. ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 머리글자이다.- 원자성 (Atomicity): 트랜잭션의 모든 연산은 모두 성공적으로 완료되거나, 아니면 전혀 수행되지 않아야 한다. 즉, 트랜잭션은 '전부 아니면 전무(all or nothing)' 방식으로 처리된다. 외부에서 볼 때 커밋된 트랜잭션은 분할할 수 없는 것처럼 보이며(원자적), 중단된 트랜잭션은 데이터베이스에 아무런 영향을 미치지 않는다.[8][5]
- 일관성 (Consistency): 모든 트랜잭션은 데이터베이스를 항상 일관된 상태로 유지해야 한다. 이는 데이터베이스에 미리 정의된 무결성 규칙(데이터베이스 객체에 대한 제약 조건)을 위반하지 않도록 보장한다. 트랜잭션은 데이터베이스를 하나의 일관된 상태에서 다른 일관된 상태로 변경하며, 데이터베이스는 일반적으로 트랜잭션을 통해서만 변경될 수 있으므로 모든 데이터베이스 상태는 일관성을 유지한다.[8][5]
- 격리성 (Isolation): 트랜잭션은 서로 간섭하지 않으며, 다른 트랜잭션에 영향을 주지 않는다. 즉, 한 트랜잭션이 실행 중일 때 다른 트랜잭션이 그 중간 결과에 접근할 수 없다. 격리성을 제공하는 것이 동시성 제어의 주요 목표이다.[8][5]
- 지속성 (Durability): 성공적으로 완료된(커밋된) 트랜잭션의 결과는 시스템 오류(크래시) 발생 시에도 영구적으로 유지된다. 일반적으로 트랜잭션의 영향과 커밋 이벤트를 비휘발성 메모리에 기록하여 이를 보장한다.[8][5]
3. 2. 동시성 제어의 필요성
동시성 제어는 여러 트랜잭션이 동시에 데이터베이스에 접근할 때 데이터의 무결성을 보장하기 위해 필수적이다. 동시성 제어가 없으면 다음과 같은 문제가 발생할 수 있다.[8][5]- 갱신 손실 문제: 두 개의 트랜잭션이 동시에 같은 데이터를 업데이트할 때, 하나의 트랜잭션이 다른 트랜잭션의 업데이트를 덮어쓰게 되어 갱신 내용이 손실되는 문제이다.
- dirty read 문제: 하나의 트랜잭션이 아직 완료되지 않은 (커밋되지 않은) 다른 트랜잭션의 중간 데이터를 읽는 문제이다. 만약 읽은 데이터를 쓴 트랜잭션이 롤백되면, 읽은 데이터는 유효하지 않은 값이 된다.
- 잘못된 요약 문제: 하나의 트랜잭션이 데이터를 읽어 요약하는 동안, 다른 트랜잭션이 데이터를 변경하면 요약 결과가 정확하지 않게 되는 문제이다.
이러한 문제들은 데이터베이스의 데이터 무결성을 훼손하며, 특히 여러 사용자가 동시에 데이터베이스를 사용하는 환경에서는 심각한 문제를 야기할 수 있다. 따라서 대부분의 고성능 트랜잭션 시스템은 성능 요구 사항을 충족하기 위해 트랜잭션을 동시에 실행해야 하므로 동시성 제어를 통해 데이터베이스의 정확성과 일관성을 유지한다.[8][5]
동시성 제어 메커니즘은 트랜잭션이 동시에 실행되는 동안 각 트랜잭션의 무결성 규칙을 유지하여 전체 트랜잭션 시스템의 무결성을 보장한다. 또한, 가능한 한 좋은 성능을 달성하고, 트랜잭션이 분산되어 여러 프로세스, 컴퓨터, 컴퓨터 네트워크를 통해 실행될 때 효과적으로 작동해야 한다.
3. 3. 동시성 제어 메커니즘
데이터베이스 관리 시스템(DBMS)을 포함한 모든 트랜잭션 시스템에서 동시성 제어는 데이터베이스 트랜잭션이 데이터 무결성을 위반하지 않고 동시에 실행되도록 보장한다. 이는 여러 트랜잭션이 시간적으로 겹쳐서 동일한 데이터에 접근할 때 정확성을 유지하기 위한 필수 요소이다.동시성 제어 메커니즘은 크게 다음과 같이 나눌 수 있다.
- '''낙관적 동시성 제어''': 트랜잭션이 작업을 차단하지 않고 진행하도록 허용하며, 커밋 시점에 직렬 가능성 등의 규칙 위반 여부를 확인한다. 위반이 있으면 트랜잭션을 중단하고 다시 시작한다.
- '''비관적 동시성 제어''': 규칙 위반 가능성이 사라질 때까지 트랜잭션의 작업을 차단한다.
- '''준낙관적 동시성 제어''': 위반 유형에 따라 비관적 또는 낙관적으로 응답한다.
각각의 방법은 트랜잭션 유형, 병렬 처리 수준 등에 따라 다른 성능을 제공한다.
둘 이상의 트랜잭션이 상호 차단되는 교착 상태가 발생하면, 관련된 트랜잭션이 완료될 수 없다. 대부분의 비낙관적 메커니즘은 교착 상태가 발생하기 쉬우며, 이 경우 트랜잭션을 중단하고 재시작해야 한다.
주요 동시성 제어 기법에는 2단계 로킹(2PL), 타임스탬프 순서(TO), 다중 버전 동시성 제어(MVCC) 등이 있다.
3. 3. 1. 분류
데이터베이스 관리 시스템(DBMS) 등에서 사용되는 동시성 제어 기법은 크게 다음과 같이 분류할 수 있다.[8][5]- '''낙관적 방법''': 트랜잭션 간의 충돌이 드물다고 가정한다. 트랜잭션이 (읽기, 쓰기) 작업을 차단하지 않고 진행하도록 허용하며, 각 트랜잭션의 커밋 시점에 직렬 가능성 및 복구 가능성과 같은 규칙 위반 여부를 확인한다. 위반이 감지되면 트랜잭션을 중단하고 다시 시작한다. 이 방식은 트랜잭션이 거의 중단되지 않을 때 매우 효율적이다.
- '''비관적 방법''': 트랜잭션 간의 충돌을 예상하고, 미리 잠금(lock) 등의 메커니즘을 사용하여 충돌을 방지한다. 규칙 위반 가능성이 사라질 때까지 트랜잭션의 작업을 차단한다. 작업 차단은 일반적으로 성능 저하를 수반한다.
- '''준낙관적 방법''': 위반 유형과 이를 감지할 수 있는 속도에 따라 비관적 또는 낙관적 방법을 선택적으로 사용한다.
각 방법은 트랜잭션 유형 혼합, 컴퓨팅 병렬 처리 수준 등에 따라 서로 다른 성능(평균 트랜잭션 완료율, 즉 처리량)을 보인다. 최적의 성능을 위해 이러한 요소들을 고려하여 적절한 방법을 선택해야 한다.
두 개 이상의 트랜잭션이 상호 차단(각 트랜잭션이 다른 트랜잭션을 차단)하는 경우 교착 상태가 발생하여 관련된 트랜잭션이 완료될 수 없다. 대부분의 비낙관적 메커니즘은 교착 상태가 발생하기 쉬우며, 이 경우 중단된 트랜잭션을 의도적으로 중단(해당 교착 상태에서 다른 트랜잭션을 해제)하고 즉시 재시작 및 재실행하여 해결한다. 교착 상태는 일반적으로 자주 발생하지 않는다.
차단, 교착 상태, 중단은 모두 성능 저하를 유발하므로, 어떤 방법을 선택할지는 성능 상의 장단점을 고려해야 한다.
3. 3. 2. 방법
- '''2단계 로킹 (Two-Phase Locking, 2PL)''': 데이터에 할당된 락으로 데이터에 대한 접근을 제어한다. 다른 트랜잭션에 의해 락이 걸린 데이터 항목(데이터베이스 객체)에 대한 트랜잭션의 접근은 락이 해제될 때까지 차단될 수 있다(락 유형 및 접근 연산 유형에 따라 다름).[1] 2단계 로킹은 트랜잭션을 확장 단계와 축소 단계로 나누어 잠금을 획득하고 해제한다.
- '''직렬 가능성 그래프 검사''' (직렬 가능성, 충돌, 또는 선행 그래프 검사라고도 함): 스케줄의 사이클을 그래프에서 확인하고 중단하여 제거한다.[1] 트랜잭션 간의 종속성을 그래프로 표현하고, 사이클 발생 여부를 검사하여 직렬 가능성을 보장한다.
- '''타임스탬프 순서''' (Timestamp Ordering, TO): 트랜잭션에 타임스탬프를 할당하고, 타임스탬프 순서에 따라 데이터에 대한 접근을 제어하거나 확인한다.[1]
- '''다중 버전 동시성 제어''' (MVCC): 객체가 쓰여질 때마다 데이터베이스 객체의 새 버전을 생성하고 스케줄링 방법에 따라 트랜잭션의 여러 마지막 관련 버전(각 객체의) 읽기 연산을 허용하여 동시성 및 성능을 향상시킨다.[1]
- '''인덱스 동시성 제어''': 사용자 데이터가 아닌 인덱스에 대한 접근 연산을 동기화한다. 특수화된 방법은 상당한 성능 향상을 제공한다.[1]
- '''커밋 순서 (Commit Ordering, CO)''': 트랜잭션을 커밋 사건의 순서로 제어 또는 검사한다.
4. 현대적 응용
현대적 응용 분야에서 동시성 제어는 다양한 시스템과 환경에서 중요한 역할을 한다.
데이터베이스 관리 시스템(DBMS)을 비롯하여 트랜잭션을 수행하는 모든 시스템은 분산 데이터베이스, 클라우드 컴퓨팅 등 분산 환경에서 동시성 제어 문제가 발생한다. 분산 환경에서는 여러 프로세스, 컴퓨터, 컴퓨터 네트워크에 걸쳐 트랜잭션이 실행되므로, 동시성 제어는 더욱 복잡해진다. 분산 시스템에서 직렬 가능성을 효율적으로 달성하기 위해서는 로컬 환경을 고려하여 설계된 방식으로는 불가능하며, 특수한 기술이 필요하다. 널리 알려진 분산 동시성 제어 기술은 커밋 순서화(Commit ordering, CO)이다[11]. CO는 트랜잭션의 커밋 이벤트 순서를 시간 순서대로 정렬하며, 동시성 제어 정보를 분산할 필요가 없다[4].
실시간 운영체제에서의 멀티태스킹은 운영체제 상에서 실행되는 모든 작업이 동시에 실행되는 것처럼 보이게 한다. 그러나 여러 작업이 동일한 자원을 사용하려 하거나, 작업을 통해 정보를 공유하려 할 때는 혼란과 불일치가 발생할 수 있는데, 이러한 문제를 해결하는 것이 병행 컴퓨팅의 과제이다.
4. 1. 분산 환경에서의 동시성 제어
데이터베이스 관리 시스템(DBMS)을 비롯하여 트랜잭션을 수행하는 모든 시스템은 분산 데이터베이스, 클라우드 컴퓨팅 등 분산 환경에서 동시성 제어 문제가 발생한다. 분산 환경에서는 여러 프로세스, 컴퓨터, 컴퓨터 네트워크에 걸쳐 트랜잭션이 실행되므로, 동시성 제어는 더욱 복잡해진다.; 분산 직렬 가능성과 커밋 순서화
분산 시스템에서 직렬 가능성을 효율적으로 달성하기 위해서는 로컬 환경을 고려하여 설계된 방식으로는 불가능하며, 특수한 기술이 필요하다. 분산 환경에서는 네트워크 레이턴시 등으로 인해 동시성 제어 정보를 분산하는 데 비용이 많이 들기 때문이다.
널리 알려진 분산 동시성 제어 기술은 커밋 순서화(Commit ordering, CO)이다[11]. CO는 트랜잭션의 커밋 이벤트 순서를 시간 순서대로 정렬한다. CO는 동시성 제어 정보를 분산할 필요가 없으며, 서로 다른 동시성 제어 기법을 사용하는 시스템으로 구성된 이종 환경에서도 사용할 수 있다[4]. CO는 커밋 이벤트 순서만 결정하며, 구체적인 구현 방식에는 관여하지 않는다. CO는 분산 데드락 상태를 자동적으로 해소하는 부작용도 가지고 있다.
SS2PL은 CO의 특수한 경우로 볼 수 있으며, 분산 환경에서 효율적으로 직렬 가능성을 달성할 수 있다. SS2PL은 분산 데드락을 자동으로 해소하며, 정확성과 직렬 가능성을 모두 보장한다. 이러한 특징과 록 구현 방식으로 인해 SS2PL은 1980년대에 등장한 이후 널리 사용되고 있으며, 업계 표준이 되었다. 그러나 SS2PL은 블로킹하는 성질의 비관적 방식이므로, 제약이 더 완화된 낙관적 CO를 사용하여 성능을 향상시키기도 한다.
분산 충돌 상태의 직렬 가능성은 효율적이고 범용적으로 대처하기 어렵다. "분산 CO"에서는 각 로컬 컴포넌트가 CO를 가지며, 전체를 2단계 커밋(2PC)에 의한 투표 전략으로 제어한다. 각 로컬 컴포넌트가 SS2PL을 사용하면, 분산 CO의 특수한 경우인 "분산 SS2PL"이 된다. 이 경우 2단계 커밋에 의존하지 않고도 자동적으로 투표 전략이 실행된다[6][7].
; 분산 복구 가능성
분산 복구 가능성은 커밋 순서화와 매우 유사한 방식으로 달성할 수 있다. 각 데이터베이스는 로컬에 적용하며, 2단계 커밋(2PC) 전략을 사용한다[10].
분산 정확성(복구 가능성)과 분산 커밋 순서화(직렬 가능성)을 포함하는 분산 SS2PL은 자동적으로 투표 전략을 가지며, 모든 로컬 동시성 제어 기구로 SS2PL을 채택하면 전체적으로 분산 SS2PL이 구현된다[11].
4. 2. 운영체제에서의 동시성 제어
실시간 운영체제에서의 멀티태스킹은 운영체제 상에서 실행되는 모든 작업이 동시에 실행되는 것처럼 보이게 해야 한다. 이는 운영체제가 실행되는 하드웨어의 제약으로 인해 실제로 주어진 순간에는 몇몇 작업만 실행되기 때문이다. 이러한 멀티태스킹은 모든 작업이 서로 독립적일 때는 비교적 간단하다. 그러나 여러 작업이 동일한 자원을 사용하려 하거나, 작업을 통해 정보를 공유하려 할 때는 혼란과 불일치가 발생할 수 있다. 이러한 문제를 해결하는 것이 병행 컴퓨팅의 과제이다. 일부 해결책은 데이터베이스에서 사용되는 잠금과 유사한 "락(lock)"을 포함하지만, 이러한 락은 교착 상태와 같은 자체적인 문제를 야기할 위험이 있다. 다른 해결책으로는 논블로킹 알고리즘과 읽기-복사-수정이 있다.참조
[1]
서적
Principles of Transaction Processing, 2nd Edition
http://www.elsevierd[...]
Morgan Kaufmann (Elsevier)
2009-06-01
[2]
간행물
The dangers of replication and a solution
ftp://ftp.research.m[...]
[3]
문서
[4]
서적
Principles of Transaction Processing, 2nd Edition
http://www.elsevierd[...]
Morgan Kaufmann (Elsevier)
2009-06-01
[5]
문서
[6]
문서
[7]
문서
[8]
문서
[9]
문서
[10]
문서
[11]
문서
[12]
간행물
The dangers of replication and a solution
ftp://ftp.research.m[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com