락의 종류
데이터베이스가 데이터 자원을 어떻게 락을 거는지에 대한 구체적인 메커니즘
- 공유 락(Shared Locks): 여러 트랜잭션이 동시에 데이터를 읽을 수 있게 해주는 락입니다. 한 트랜잭션이 데이터에 공유 락을 걸고 있을 때, 다른 트랜잭션도 그 데이터를 읽을 수 있지만, 쓸 수는 없습니다.
- 배타 락(Exclusive Locks): 한 트랜잭션이 데이터에 배타 락을 걸면, 그 트랜잭션만이 데이터를 읽고 쓸 수 있으며, 다른 어떤 트랜잭션도 해당 데이터에 접근할 수 없습니다.
락 사용전략
데이터베이스의 자원에 접근할 때 발생할 수 있는 충돌을 관리하는 방식에 대한 전략
- 소극적 락(Pessimistic Locking): 이 전략에서는 충돌이 발생할 것을 예상하고, 데이터를 사용하기 전에 락을 걸어 다른 트랜잭션의 접근을 차단합니다. 즉, 데이터를 처음 읽을 때 락을 걸고 트랜잭션이 끝날 때까지 락을 유지하는 방법입니다. 소극적 락은 보통 배타 락을 사용하여 데이터의 수정이 예상되는 경우 사전에 다른 트랜잭션의 접근을 차단합니다.
- 적극적 락(Optimistic Locking): 충돌이 드물게 발생할 것으로 예상할 때 사용하는 전략입니다. 데이터를 실제로 수정할 때까지 락을 걸지 않고, 대신 데이터의 버전을 체크하여 업데이트 시점에 충돌을 감지합니다. 즉, 데이터에 버전 번호나 타임스탬프를 추가하여 데이터를 불러온 후 수정된 경우에만 업데이트가 발생하도록 하는 방법입니다. 적극적 락은 락을 사용하지 않는 상태에서 데이터의 일관성을 확인하는 방법으로, 공유 락과 배타 락의 전통적인 사용법과는 조금 다릅니다.
'DataBase > SQL' 카테고리의 다른 글
[ sql ] 동시성 이슈 및 해결책 (0) | 2024.07.06 |
---|---|
[ sql ] [ TypeORM ] Entity 의 constructor (0) | 2024.07.04 |
[sql][typeORM] N:M 관계에서 원하는 데이터찾기 (0) | 2024.06.22 |
[ SQL ] [ TypeORM ] @Query - 키워드가 포함되어 있는 게시물 검색 (1) | 2024.04.19 |
[ ORM ] Sequlize : Model synchronization (0) | 2024.01.12 |