비관적 락과 낙관적 락에서 임계 영역 질문 있습니다.
안녕하세요 강의 잘 보고 있습니다.
해당 강의에서 비관적 락과 낙관적에서 '임계 영역'의 길이가 해당 락을 선택하는 기준이 될 수 있다고 말씀하셨습니다.
근데 여기서 말씀하시는 임계 영역이라는게 잘 이해가 안되는데, 설명좀 부탁드립니다.
Câu trả lời 2
0
안녕하세요, yangang561님!
여기서 말한 임계 영역은 여러 요청이 동시에 실행될 때, 하나의 공유 데이터를 안전하게 읽고 변경하기 위해 동시 접근을 제어해야 하는 코드 구간을 의미합니다.
예를 들어 재고를 차감하는 로직이 다음과 같다고 가정해 보겠습니다.
재고 조회 → 재고가 충분한지 확인 → 재고 차감 → 저장여러 요청이 이 과정을 동시에 수행하면 같은 재고를 읽은 뒤 각각 차감하여 데이터가 잘못될 수 있습니다. 따라서 이 구간이 동시성 관점에서 보호해야 할 임계 영역이 됩니다.
강의에서는 이해를 돕기 위해 이 임계 영역을 트랜잭션의 길이와 거의 동일한 개념으로 단순화하여 설명했습니다. 다만 엄밀히 말하면 트랜잭션 전체가 항상 임계 영역인 것은 아닙니다. 트랜잭션 안에서도 실제로 동일한 데이터를 읽고 변경하여 다른 요청과 충돌할 수 있는 구간이 핵심적인 임계 영역입니다.
비관적 락은 일반적으로 해당 데이터를 조회할 때부터 락을 획득하고 트랜잭션이 끝날 때까지 유지합니다. 따라서 트랜잭션 안에서 외부 API 호출이나 복잡한 연산을 수행하면 다른 트랜잭션이 오래 기다릴 수 있습니다.
반면 낙관적 락은 데이터를 읽는 동안에는 락을 점유하지 않고, 수정 시점에 버전을 검사하여 충돌 여부를 확인합니다. 임계 영역이 길더라도 실제 충돌이 드물다면 다른 요청을 오래 대기시키지 않는다는 장점이 있습니다.
따라서 강의에서 말한 기준은 다음과 같이 이해해 주시면 좋습니다.
충돌 가능성이 높고 보호해야 할 구간이 짧다면 비관적 락을 고려할 수 있습니다.
처리 시간이 길거나 충돌 가능성이 낮다면 낙관적 락을 고려할 수 있습니다.
다만 실제 선택에서는 임계 영역의 길이뿐 아니라 충돌 빈도, 재시도 비용, 락 대기 시간도 함께 고려해야 합니다.
정리하면, 강의에서의 임계 영역은 공유 데이터를 읽고 변경하는 트랜잭션 구간을 뜻하며, 설명을 단순화하기 위해 트랜잭션 전체의 길이로 표현했다고 봐주시면 됩니다!
0
안녕하세요, 인프런 AI 인턴입니다. yangang561님!
비관적 락과 낙관적 락에서 말씀하신 ‘임계 영역’에 대해 설명드리겠습니다.
임계 영역(Critical Section): 멀티스레드 환경에서는 여러 스레드가 공유 자원에 접근할 때 충돌을 피하기 위해 특정 코드를 보호해야 합니다. 이 보호가 필요한 코드 블록이 바로 임계 영역입니다. 쉽게 말하면, 여러 프로세스나 스레드가 동시에 접근해서는 안 되는 공유 자원의 부분입니다.
비관적 락(Pessimistic Lock): 이 락은 데이터에 대한 충돌이 빈번하거나 임계 영역이 길어서 자주 업데이트되는 경우에 주로 사용합니다. 락을 걸어 다른 트랜잭션이 해당 데이터를 수정하는 것을 방지하고, 안전하게 데이터를 처리합니다. 비관적 락을 사용하면, 임계 영역 동안 다른 작업이 그 데이터를 건드리지 못하게 하여 데이터의 일관성을 보장합니다.
낙관적 락(Optimistic Lock): 반면에 이 락은 충돌이 드물다고 판단되고, 임계 영역이 짧아 상대적으로 여러 스레드가 동시에 작업해도 큰 문제가 없을 때 사용합니다. 낙관적 락은 데이터 충돌이 발생하지 않을 것이라는 가정 하에 진행되며, 충돌이 발생하면 롤백하고 다시 시도합니다.
여기서 ‘임계 영역의 길이’라는 것은 코드 블록이 수행되는 시간과 함께, 데이터 업데이트의 빈도를 의미합니다. 만약 임계 영역이 길고 자주 업데이트된다면, 비관적 락이 적합할 수 있습니다. 반대로 임계 영역이 짧고 드문 업데이트라면, 낙관적 락이 효율적일 수 있습니다.
비관적 락과 낙관적 락에 대한 깊은 이해는 정확하고 일관된 데이터 처리를 위한 중요한 요소입니다. 관련된 좋은 통찰을 주는 비관적 락과 낙관적 락의 적용 사례 설명 를 참고하시면 더욱 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
마스터패스...
0
12
1
SubStack 신청 완료했습니다!
0
12
2
노드
0
16
1
아무도 모르게 책 내시면 모르실 줄 알고!!
1
41
2
리뷰
0
37
2
수동으로 계산하기 부분에서 질문
0
32
1
upload_file_id가 1,3,4 순서인 건에 대해
0
33
1
샘플데이터 요청
1
33
2
ALU 강의에서 질문
0
37
2
p.created_at vs u.name 인덱스 문의
0
42
2
이진 트리 노드
0
43
1
조인의 특징
0
42
2
통계정보 갱신 질문
0
62
2
PK 관련하여 궁금한 점이 있어서 질문 드립니다.
0
68
2
탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.
0
71
2
컬럼 크기가 대용량인 경우 DB 버퍼 풀에 전부 올라오는지 궁금합니다
0
63
2
실습데이터 ORDERS 생성 시간 질문요...
0
92
3
MySQL 서버구조 쿼리파서 질문 있습니다 !
0
67
1
상태 기반 데이터관리에서 특정 시점에 대한 정보는 어떻게 관리할 수 있나요?
0
39
1
Postgresql 아키텍처 업데이트
1
84
2
76강 2분33초 내용 오류
0
55
2
인덱스 강의 혹은 해당 강의 전 듣어야 하는 사전강의 문의
0
55
2
MySql
1
84
2
팬텀리드 해결 예시 질문
1
94
1

