본문 바로가기
IT 실무/데이터베이스

데이터베이스 병행제어 실패 현상

by 아이들링 2019. 12. 29.

다수의 사람이 동시에 이용하는 데이터베이스에서 일관성을 유지하기 위해선 병행제어 기법이 필수이다. 하지만 수많은 경우의 수 속에서 완벽한 병행제어란 쉬운 것이 아닌데, 병행제어를 엄격하게 하려고 하면 할수록 병행성이 나빠진다. 그 말인 즉슨 속도가 느려지거나(지연시간이 길어짐) 불편해지게 되는 것이다.

그래서 흔히 사용되는 고신뢰 기업용 데이터베이스(Oracle 등)도 완벽한 병행제어를 제공하진 않는다. 옵션으로 제공하긴 하지만 대부분의 default 값은 조금 완화된 수준이다.

 

그렇다면 병행제어를 좀 덜 엄격하게 하면 발생되는 현상이 무엇일까? 예를 들면 한 트랜잭션 내에서 데이터를 여러번 읽는데 값이 바뀐다던가 하는 문제가 생길 수 있는데, 이런 현상들을 가리키는 말이 여러가지라는 것이 문제이다. 내가 예로 든 현상은 누군가는 Dirty Read라고 하고 누군가는 Uncommitted Dependency라고 하고 누군가는 Inconsistency라고 한다. 구글에 3가지로 모두 검색해도 같은(유사한) 내용이 나온다.

 

이런 혼란 속에서 우리는 '표준'을 참고할 수 있다. 이에 대해 정의된 대표적인 표준으로 ANSI/ISO SQL 92가 있다. 우리가 흔히 사용하는 SQL에 대한 표준인데, 여기서 '트랜잭션 고립화 수준(Transaction Isolation Level)'을 다룬다. 그리고 그 파트에 병행제어 실패 현상에 대해 아래 4가지로 정의하고 있다.

 

Dirty Write

Dirty Read

Non-Repeatable Read

Phantom Read

 

이 4가지에 대한 설명은 여기서 더 자세하게 확인할 수 있다.

나도 정말 여러가지 표현을 보았지만, 국제 표준은 괜히 국제 표준이 아니다. 저 4가지의 케이스면 병행제어 실패 현상이 거의 깔끔하게 설명이 된다. 그럼 이렇게 통일하면 되나~ 싶었는데 저 표준이 나온지 20년이 넘었음에도 여러 블로그나 DB교재 등에선 아직 다양한 표현들이 쓰인다.

 

대표적으로 국내 정보처리기사에선 

갱신 분실(Lost Update), 비완료 의존성(Uncommitted Dependency), 모순성(Inconsistency) 이라는 표현이 쓰이고

국내 정보관리기술사 교재에서는

갱신 분실, 현황파악오류, 모순성, 연쇄 복귀의 앞을자를 따 갱현모현이 거의 FM처럼 인용된다.

(누군가는 답안지에 국제 표준식 용어를 썼다가, 갱.현.모.현.으로 제대로 외우고 쓰라고 지적을 받았다는 이야기도 있다)

 

물론 어느 표현도 틀린 말은 아니지만, 표준화된 표현은 아닌거다. 각 수험 교재에서 쓰이는 말을 모아서 구글에 검색해보면 다 그렇게 모아서 표현한 내용은 어디에도 없다. 분명 시험 문제를 만드는 누군가가, 혹은 DB 교재를 작성한 누군가가 본인이 쓰는 용어를 어딘가에 표현했고 그게 인용되다 보니 굳어진 것이리라.

 

누가 어떤 표현을 쓰더라도 누가 뭐라 할 순 없다. ISO가 국제 표준이지만, 표준 하나 20만원씩 받고 사야 되는거 안지켰다고 누가 뭐라 하겠는가. 하지만 글로벌에서 소통을 해야 되는 한국 IT 인재들을 위해 좀 통일해보겠다고 하는 의지가 있었으면 하는 마음에 포스팅을 한다.

 

내가 파악한 바로는 아래와 같이 대응된다. 혹시 잘못된 파악한 내용이 있으면 댓글 부탁드립니다.

 

Dirty Write - Lost Update - 갱신 분실

Dirty Read - Uncommitted Dependency - 비완료 의존성

* 여기서 미완료 의존성은 Phantom Read를 포함하는 개념으로 볼 수도 있다.

Non-Repeatable Read - Inconsistency - 모순성

Phantom Read - 국내 교재에선 Phantom Read를 잘 따로 다루지 않는다.

 

그리고 아래는 국내 교재에 등장하는 말이지만, 트랜잭션 고립화 수준에선 다루지 않는 내용이다.

Cascade Rollback, Unrecoverable

이는 병행제어 수준의 기준이 되기 보단 Dirty Write의 후속 문제로 볼 수 있는 부분이기도 하다.

댓글0