일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문제풀이
- 소프티어
- 코딩봉사
- 정보처리산업기사
- python
- 백준알고리즘
- SW봉사
- 파이썬
- CJ UNIT
- C++
- 프로그래머스
- 데이터베이스
- SQL
- java
- BFS
- 공부일지
- programmers
- 알고리즘
- 회고
- 백준
- 1과목
- 스프링
- 코딩교육봉사
- 자바
- MYSQL
- 시나공
- kotlin
- 백준 알고리즘
- 코틀린
- softeer
- Today
- Total
JIE0025
비관적 락은 무엇이고 왜/언제 사용할까? 본문
✅ 비관적 락 ?
DB관리에서 사용하는 기술 중 하나이다.
충돌이 발생할 것 같으니 <미리> 조치를 취하자.
간단하게 설명하면
어떤 이용자 A 가 데이터를 Read/Write할 때,
미리 락(Lock)을 걸어서
다른 사용자들은 데이터를 동시에 수정 할 수 없게 만드는 것이다.
- 모든 트랜잭션은 충돌이 발생한다는 것을 가정하고, 우선 락을 거는 방법
- DB의 Lock 기능을 이용한다.
- 트랜잭션을 커밋하기 전, 데이터 수정 시점에 트랙잭션 충돌을 감지할 수 있다.
- Lock획득까지 트랜잭션이 대기하기 때문에 Timeout을 설정할 수 있다.
✅ 언제 비관적 락을 사용하는가?
- 같은 요청에 대한 충돌 가능성이 높을 때 사용한다.
- 데이터의 무결성이 중요할때 사용한다.
✍️ Example 01
은행의 계좌 이체 시스템을 생각해보자.
두명의 사용자가 동시에 같은 계좌에서 돈을 출금하려고 한다.
이때 계좌의 잔액이 잘못 계산될 수 있는데
비관적 락을 사용하면?
첫번째 사용자가 계좌 잔액울 확인/ 출금하는 동안
두번째 사용자는 아예 계좌에 접근할 수 없게 된다.
✍️ Example 02
콘서트 좌석 예약 시스템
방탄소년단 콘서트 좌석은 총 5000개가 있다.
이때 3만명의 사용자가 몰렸다고 가정해보자.
이때 앞자리를 사수하기 위해 사용자들이 동일한 좌석을 클릭하게 되는데....
비관적락을 사용하지 않는다면 ?
데이터에 여러명이 접근할 수 있게 되면서
최종 결제한 사람을 제외하고는 모조리 실패하게 되기 때문에 사용자 경험이 안 좋아질 것이다.
비관적 락을 사용하면?
첫번째 사용자가 좌석을 잡았을떄
두번째 사용자는 아예 좌석에 접근할 수 없게 된다.
예약좌석을 가장 먼저 선택한 사람만이 결제할 수 있다면
사람들은 <결제완료>까지의 속도에 대한 경쟁을 안해도 된다.
오히려 다른 좌석이 남은게 없는지 빠르게 더 찾아보게 될 것
✅ 왜 비관적 락을 사용하는가?
위의 예를 보면 왜 사용하는지 분명하게 알 수 있다. 😎
- 비관적 락은 데이터의 무결성을 보장한다.
- 거의 완료된 것에 대해 마무리가 안되면 사용자는 실망할 수 있다.
비관적 락을 사용하면 애초에 자원을 확보하거나, 못하거나 둘중 하나라서 사용자 경험이 개선될 수 있다.
✅ 비관적 락의 단점은?
모든 트랜잭션에 Lock을 사용하기 떄문에 락이 필요하지 않는 상황에서도 무조건 락을 건다
> 성능상 문제가 발생할 수 있다 (특히 읽기가 많이 이루어지면)
오늘은 바빠서 평소 글보다 간단하게 적어봤다.
✅ 다음글
SpringBoot와 JPA를 이용한 실습!!!
https://jie0025.tistory.com/604
'CS' 카테고리의 다른 글
[Network] 포트(Port) 란 무엇이고 왜 있는걸까? (1) | 2024.12.06 |
---|