코딩일기/자격증

[정보처리기사] 데이터베이스 병행제어 기법 : 트랜잭션 충돌을 방지하는 방법 | 정보처리기사 실기 기출문제

jhy_2023 2025. 1. 11. 21:10
728x90
반응형

📌 병행제어(Concurrency Control)의 개념

병행제어(Concurrency Control)는 데이터베이스에서 여러 트랜잭션이 동시에 실행될 때 발생할 수 있는 문제를 방지하고, 데이터의 일관성을 유지하기 위한 기법입니다.
병행 제어를 통해 다수의 사용자가 동시에 데이터에 접근하더라도 올바른 결과를 얻을 수 있습니다.


📌 병행제어를 하지 않았을 때의 문제점

병행제어가 없으면 다음과 같은 문제가 발생할 수 있습니다:

1️⃣ 갱신분실(Lost Update)

  • 두 개 이상의 트랜잭션이 동일한 데이터를 동시에 갱신하여, 하나의 트랜잭션의 변경 내용이 손실되는 문제입니다.
  • 예: 두 사용자가 같은 상품의 재고를 동시에 변경하면 하나의 변경만 반영됩니다.

2️⃣비완료 의존성(Temporary Update or Dirty Read)

  • 한 트랜잭션이 완료되지 않은 상태에서 다른 트랜잭션이 해당 데이터를 읽는 문제입니다.
  • 예: 아직 완료되지 않은 트랜잭션의 값을 읽고 계산한 결과가 잘못될 수 있습니다.

3️⃣모순성(Inconsistency)

  • 여러 트랜잭션이 동시 실행되어 데이터 간 불일치가 발생하는 문제입니다.
  • 예: 은행 계좌의 잔액이 다르게 표시되는 경우.

4️⃣연쇄 복귀(Cascading Rollback)

  • 하나의 트랜잭션이 실패하여 롤백될 때, 해당 트랜잭션과 연관된 다른 트랜잭션들도 연쇄적으로 롤백되는 문제입니다.
  • 예: 트랜잭션 T1이 데이터 X를 수정한 후 실패하여 롤백되면, T1의 결과를 읽은 트랜잭션 T2와 이를 의존한 T3도 연쇄적으로 롤백되는 상황이 발생합니다.
반응형

📌 병행제어 기법

병행제어를 구현하기 위해 다양한 기법이 사용됩니다. 대표적인 기법은 다음과 같습니다:

1️⃣로킹(Locking)

  • 하나의 트랜잭션이 데이터에 접근할 때, 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 잠금을 설정하는 기법입니다.
  • 공유 잠금(Shared Lock): 읽기 작업에서만 사용 가능. 데이터 읽기 시 다른 트랜잭션이 읽기는 가능하지만, 쓰기는 불가능합니다.
  • 배타 잠금(Exclusive Lock): 읽기와 쓰기 모두 독점적으로 사용.
  • 예 : 트랜잭션 T1이 데이터 X에 배타 잠금을 설정한 경우, 다른 트랜잭션 T2는 X를 읽거나 쓸 수 없습니다.

2️⃣ 2단계 로킹(Two-Phase Locking)

  • 트랜잭션이 데이터를 액세스할 때 두 단계(확장 단계, 축소 단계)로 잠금을 관리하는 방식입니다.
  • 데이터의 일관성을 보장하지만 교착 상태(Deadlock)가 발생할 수 있습니다.
  • 예 : 트랜잭션 T1이 잠금을 설정(확장 단계)하고 데이터 X를 읽은 뒤, 모든 작업이 완료된 후 잠금을 해제(축소 단계)합니다.

3️⃣ 타임스탬프(Time-Stamp)

  • 각 트랜잭션에 고유한 타임스탬프를 부여하여, 트랜잭션의 실행 순서를 결정하는 기법입니다.
  • 타임스탬프를 기준으로 충돌을 방지합니다.
  • 예 : 트랜잭션 T1(타임스탬프 10)과 T2(타임스탬프 15)가 데이터 X를 동시에 수정하려 하면, 더 이른 타임스탬프를 가진 T1이 우선권을 갖습니다.

4️⃣ 낙관적 병행제어(Optimistic Concurrency Control)

  • 충돌이 적게 발생할 것으로 가정하고, 트랜잭션을 실행한 후에 검증 단계에서 문제가 있는지 확인하는 기법입니다.
  • 충돌이 없으면 커밋, 있으면 롤백 처리합니다.
  • 예 : 트랜잭션 T1이 데이터를 수정한 뒤, 다른 트랜잭션과의 충돌이 없는지 확인 후 커밋합니다. 만약 충돌이 발견되면 작업이 롤백됩니다.

5️⃣ 다중 버전 병행제어(Multi-Version Concurrency Control, MVCC)

  • 데이터의 여러 버전을 유지하여 트랜잭션 간 충돌을 방지하는 기법입니다.
  • 읽기 작업은 최신 버전이 아닌, 트랜잭션 시작 시점의 데이터 버전을 읽습니다.
  • 예 : 트랜잭션 T1이 데이터 X의 값을 50에서 100으로 변경하는 동안, 트랜잭션 T2는 기존의 값 50을 읽어 처리할 수 있습니다.

2021년 2회 정보처리기사 실기 기출문제

문제

다음 설명에 해당하는 병행제어기법을 쓰시오.

- 접근한 데이터에 대한 연산을 모두 마칠때까지 상호배제하는 병행제어기법
- 하나의 트랜젝션이 데이터를 엑세스하는 동안 다른 트랜젝션이 그 데이터 항목을 엑세스할 수 없도록 하는 병행 제어 기법

정답

로킹(Locking)

728x90

해설

로킹은 트랜잭션이 데이터에 접근할 때, 해당 데이터에 잠금(Lock)을 설정하여 다른 트랜잭션이 동시에 접근하지 못하도록 상호 배제를 보장하는 병행제어 기법입니다.
이 기법은 데이터의 무결성과 일관성을 유지하는 데 효과적이며, 공유 잠금(Shared Lock)과 배타 잠금(Exclusive Lock)이라는 두 가지 형태로 나뉩니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형