5월 9일-DB Locking

Yullgiii·2024년 5월 9일
0
post-thumbnail

DB Locking에 대한 설명

DB Locking이란?

데이터베이스에서 동시성 제어를 관리하기 위해 데이터 항목에 잠금(Lock)을 적용하는 것을 말한다. 이는 여러 트랜잭션이 동시에 같은 데이터에 접근할 때 발생할 수 있는 충돌과 데이터 무결성 문제를 방지하기 위해 사용된다.

Optimistic Lock과 Pessimistic Lock

  • Optimistic Lock (낙관적 잠금): 데이터를 업데이트하거나 삭제하기 전에 데이터가 변경되었는지 확인하는 방식이다. 실제로 데이터를 업데이트할 때만 데이터가 변경되었는지 확인하며, 충돌이 감지되면 트랜잭션을 재시도하거나 실패 처리한다. 주로 데이터베이스 충돌이 드물게 발생하는 환경에서 사용된다.
  • Pessimistic Lock (비관적 잠금): 트랜잭션이 데이터에 접근하기 전에 미리 잠금을 걸어 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 막는 방식이다. 이 방법은 충돌이 자주 발생할 것으로 예상되는 환경에서 사용하여 충돌을 사전에 방지한다.

물리적인 Lock과 비정상 종료 시 대응

DB에서 물리적인 Lock을 사용할 때, 트랜잭션이 비정상 종료되어 잠금이 해제되지 않는 문제가 발생할 수 있다. 이를 위한 대응 방법은 다음과 같다:

  • 트랜잭션 로그: 대부분의 데이터베이스 관리 시스템은 트랜잭션 로그를 사용하여 수행 중인 모든 변경 사항을 기록한다. 시스템이 비정상적으로 종료된 경우, 이 로그를 사용하여 아직 완료되지 않은 트랜잭션을 롤백하고, 잠금을 해제한다.

  • Lock Timeout: 일정 시간 동안 잠금이 해제되지 않으면 자동으로 잠금을 해제하는 기능을 설정할 수 있다. 이는 데드락을 방지하고 시스템 자원의 무한 대기 상태를 예방한다.

  • Keep-alive 신호: 일부 시스템은 클라이언트가 주기적으로 서버에 신호를 보내 활성 상태를 확인하도록 한다. 클라이언트의 연결이 끊어진 것을 감지하면 자동으로 트랜잭션을 종료하고 잠금을 해제한다.

위의 방법 외에도, 데이터베이스 설계 시 충돌 감지 및 복구 메커니즘을 적절히 구현하여 이러한 문제에 대응할 수 있다. 데이터베이스의 견고성과 효율성을 유지하기 위해서는 올바른 잠금 전략과 예외 처리 로직이 필수적이다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

2개의 댓글

comment-user-thumbnail
2024년 5월 10일

썸네일이 개킹받네요

1개의 답글