데이터베이스에서 동시성 제어를 관리하기 위해 데이터 항목에 잠금(Lock)을 적용하는 것을 말한다. 이는 여러 트랜잭션이 동시에 같은 데이터에 접근할 때 발생할 수 있는 충돌과 데이터 무결성 문제를 방지하기 위해 사용된다.
DB에서 물리적인 Lock을 사용할 때, 트랜잭션이 비정상 종료되어 잠금이 해제되지 않는 문제가 발생할 수 있다. 이를 위한 대응 방법은 다음과 같다:
트랜잭션 로그: 대부분의 데이터베이스 관리 시스템은 트랜잭션 로그를 사용하여 수행 중인 모든 변경 사항을 기록한다. 시스템이 비정상적으로 종료된 경우, 이 로그를 사용하여 아직 완료되지 않은 트랜잭션을 롤백하고, 잠금을 해제한다.
Lock Timeout: 일정 시간 동안 잠금이 해제되지 않으면 자동으로 잠금을 해제하는 기능을 설정할 수 있다. 이는 데드락을 방지하고 시스템 자원의 무한 대기 상태를 예방한다.
Keep-alive 신호: 일부 시스템은 클라이언트가 주기적으로 서버에 신호를 보내 활성 상태를 확인하도록 한다. 클라이언트의 연결이 끊어진 것을 감지하면 자동으로 트랜잭션을 종료하고 잠금을 해제한다.
위의 방법 외에도, 데이터베이스 설계 시 충돌 감지 및 복구 메커니즘을 적절히 구현하여 이러한 문제에 대응할 수 있다. 데이터베이스의 견고성과 효율성을 유지하기 위해서는 올바른 잠금 전략과 예외 처리 로직이 필수적이다.
썸네일이 개킹받네요