티스토리 뷰
반응형
낙관적 락
- 동시성 문제가 일반적으로 발생하지 않을 것으로 보고(=낙관적), 락을 걸지 않고 시작한다.
- 별도의
Version
컬럼을 두고, 트랜잭션을 커밋할 시점에 동시성 문제가 발생했는지 검증한다. - 트랜잭션을 커밋할 때까지 동시성 문제가 발생함을 알 수 없으며, 발생한 경우 애플리케이션 로직으로 처리한다.
비관적 락
- 동시성 문제가 빈번히 발생할 것으로 보고(=비관적), 트랜잭션을 시작할 때 락을 걸고 시작한다.
select for update
와 같은 쿼리를 활용하며, 데이터베이스가 제공하는 락을 활용한다.
낙관 vs 비관
- 두 개념은 각각 다음과 같은 장단점을 가지므로, 상황에 맞게 무엇을 사용할지 결정해야 한다.
- 낙관적 락은 일반적인 상황에서 성능이 더 좋으나, 충돌 발생시 이를 처리하기 번거롭다.
- 비관적 락은 데드락이 발생할 수 있으나, 충돌이 자주 발생하는 환경에서의 처리가 쉽다.
둘 중 어떤 락이 항상 더 우월하고, 항상 더 안좋고 하지는 않다는 점에 주의하자!
'Dev. > persistence' 카테고리의 다른 글
[MySQL] 이모지가 포함된 컬럼에 UQ 제약조건 걸기 (0) | 2024.02.14 |
---|---|
[MySQL] 테이블, 컬럼 collation 확인하기 (0) | 2024.02.14 |
[DB] Database seeding이란? (0) | 2023.01.26 |
[Docker] PostgreSQL 도커로 올리기 (0) | 2023.01.07 |
[MySQL] 기존 테이블로부터 데이터를 복사하기 (0) | 2022.09.26 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AWS
- kotlin
- Linux
- Java
- etc
- RancherDesktop
- Gradle
- Puppeteer
- mysql
- react
- Database
- JPA
- eureka
- postgresql
- Git
- Spring Cloud Config
- pgloader
- IntelliJ
- terraform
- jQuery
- 코딩테스트
- hashicorp
- javascript
- shell
- Node.js
- AWS IoT
- Docker
- spring boot
- Vault
- JEST
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함