← 질문 목록
#232깊이 0

낙관적 락과 비관적 락은 무엇으로 고르는가?

데이터베이스심화동시성

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

지켜야 할 업무 규칙, 충돌 가능성, 실패했을 때 다시 실행할 수 있는 범위로 고른다. 데이터 정확성은 두 방식 모두 만들 수 있다. 차이는 충돌을 언제 발견하고 누가 기다리거나 다시 시도하느냐다.

기준낙관적 방식비관적 방식
충돌 처리버전 조건이 맞지 않으면 갱신 실패읽기 전에 행을 잠그고 다른 작업을 대기시킴
잘 맞는 경우충돌이 드물고 작업 전체를 안전하게 재시도 가능충돌이 잦고 잠금을 짧게 잡아 결정을 끝낼 수 있음
주의할 비용재시도 폭증·사용자 입력 재실행대기 시간·교착 상태·긴 트랜잭션

낙관적 방식은 보통 버전을 함께 읽고 update ... where id = ? and version = ?처럼 갱신한다. 반영된 행이 없으면 중간에 다른 트랜잭션이 바꿨음을 안다. 이때 화면 전체를 다시 입력하게 할지, 멱등한 명령만 자동 재시도할지 정해야 한다.

비관적 방식은 select ... for update처럼 결정을 내리기 전에 충돌 행을 잠근다. PostgreSQL에서는 같은 행을 바꾸거나 다시 잠그려는 트랜잭션이 끝날 때까지 기다릴 수 있다. 잠금을 잡은 채 외부 API를 호출하면 대기와 교착 위험이 커진다.

낙관적 방식도 최종 UPDATE에서 데이터베이스 잠금을 쓰고 기다릴 수 있다. 반대로 재고나 결제라고 비관적 방식을 고정하지 않는다. 원자적 조건부 갱신, 고유 제약, 멱등 키가 업무 규칙을 더 작고 분명하게 지키는지 함께 비교한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

낙관적 락과 비관적 락은 무엇으로 고르는가?