키보드워리어

[databases] 동시성 제어 문제 해결 본문

개발 관련/Database

[databases] 동시성 제어 문제 해결

꽉 쥔 주먹속에 안경닦이 2023. 6. 23. 18:21
728x90

안녕하세요 【키보드 워리어】 블로그 방문자 여러분, 안경닦이입니다.

원티드 프리온 보딩 챌린지 백엔드 사전문제 1번 문제와 답안입니다!

 


[01] 동시에 같은 DB Table row 를 업데이트 하는 상황을 방어하기 위해 어떻게 개발하실 건지 설명해주세요.

 

 

트랜잭션의 특징 중에 하나인 일관성을 잘 지켜야합니다.(Consistency)

일관성을 잘 지킨다는 것은 트랜잭션 수행 전과 후의 상태가 같아야 하는 성질을 지켜야 한다는 것입니다.

동시에 같은 DB를 업데이트할때 일관성을 유지하는것을 예를 들면 은행 시스템에서 '서로 같은 계좌번호는 없다'라는 제약조건이 있다면,
어떠한 트랜잭션이 발생해도 항상 이 제약조건이 일관되게 존재해야 한다는 겁니다.

, 동일한 계좌번호가 없어야만 트랜잭션이 성공합니다.

이를 지키기 위해 무결성 제약조건과 동시성 제어 기법을 사용 합니다.
병행 제어 기법중에 로킹, 낙관적 검증, 타임 스탬프 순서, 다중 버전 동시성 제어(MVCC)가 있습니다.


### 로킹


하나의 트랜잭션이 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제(Mutual Exclusive) 기능을 제공하는 기법입니다.

- DB,파일,레코드 등이 모두 로킹 단위가 될 수 있습니다.
- 로킹 단위가 작아지면 DB 공유도가 증가함.
- 로킹 단위가 작아지면 로킹 오버헤드가 증가.
- 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함.


### 낙관적 검증


트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션
종료 시 검증을 수행하여 DB에 반영하는 기법


### 타임 스탬프 순서


트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에
타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법


### 다중 버전 동시성 제어(MVCC)


트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여
직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법




------------
##### 본문 서 트랜잭션이란 데이터 조장을 의미.

728x90