////

Optimistic vs Pessimistic Locking — 동시성 제어 선택 기준

낙관적 락(Optimistic)은 충돌이 드물 때 version 컬럼으로 커밋 시점에 충돌을 감지하고, 비관적 락(Pessimistic)은 충돌이 잦을 때 SELECT FOR UPDATE로 사전에 잠근다.

////

Summary#

낙관적 락(Optimistic)은 충돌이 드물 때 version 컬럼으로 커밋 시점에 충돌을 감지하고, 비관적 락(Pessimistic)은 충돌이 잦을 때 SELECT FOR UPDATE로 사전에 잠근다.

Outcome#

낙관적 락 — version 컬럼 패턴:

-- 읽기 (락 없음)
SELECT id, name, version FROM products WHERE id = 1;
-- 업데이트 (version 일치 시만)
UPDATE products
SET name = '새이름', version = version + 1
WHERE id = 1 AND version = 3;  -- version 불일치 시 0 rows → 충돌 감지

비관적 락 — SELECT FOR UPDATE:

BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;  -- 다른 트랜잭션 블록
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;

SKIP LOCKED (큐 처리):

SELECT * FROM jobs WHERE status = 'pending'
LIMIT 1 FOR UPDATE SKIP LOCKED;  -- 다른 워커가 처리 중인 행 건너뜀

Key Points#

  • 낙관적: 충돌 드문 읽기 다수 워크로드 (e-커머스 조회, CMS) — 락 없이 고처리량
  • 비관적: 충돌 빈번하거나 트랜잭션이 긴 워크로드 (금융 이체, 재고 차감)
  • FOR UPDATE SKIP LOCKED: 작업 큐에서 워커 간 경합 없이 분산 처리
  • FOR SHARE: 읽기는 공유, 쓰기만 차단 — 상호 읽기 OK

Caveats#

낙관적 락 충돌 시 애플리케이션이 retry 로직 구현 필요. 비관적 락은 긴 락 보유 시 데드락 위험 — 락 순서 일관성 유지. Django ORM select_for_update(), SQLAlchemy with_for_update() 지원.

Sagwan Revalidation 2026-04-15T10:55:33Z#

  • verdict: ok
  • note: 버전 기반·FOR UPDATE·SKIP LOCKED 패턴 정확, 워크로드별 선택 기준 현행 최적 사례.

Sagwan Revalidation 2026-04-16T11:08:55Z#

  • verdict: ok
  • note: 낙관적/비관적 락 기본 원리와 SQL 문법(FOR UPDATE, SKIP LOCKED) 정확, 워크로드별 선택 기준 현행 최적.

Sagwan Revalidation 2026-04-17T11:20:06Z#

  • verdict: ok
  • note: 낙관적·비관적 락, FOR UPDATE, SKIP LOCKED 패턴과 워크로드별 선택 기준이 정확하고 현행 최적 사례.

Sagwan Revalidation 2026-04-18T11:32:45Z#

  • verdict: ok
  • note: 낙관적·비관적 락 개념, FOR UPDATE/SKIP LOCKED 문법, 워크로드별 선택 기준이 정확하고 현재도 표준 practice입니다.

Sagwan Revalidation 2026-04-19T11:39:22Z#

  • verdict: ok
  • note: 낙관적·비관적 락 개념, FOR UPDATE/SKIP LOCKED 문법, 워크로드별 선택 기준이 정확하고 현재도 표준 practice입니다.

Sagwan Revalidation 2026-04-20T12:08:37Z#

  • verdict: ok
  • note: LLM unavailable: [CLI 오류 1] SessionEnd hook [node "/home/insu/.pixel-agents/hooks/claude-hook.js"] failed: node:internal/modules/cjs/load

Sagwan Revalidation 2026-04-21T12:31:58Z#

  • verdict: ok
  • note: LLM unavailable: [CLI 오류 1] SessionEnd hook [node "/home/insu/.pixel-agents/hooks/claude-hook.js"] failed: node:internal/modules/cjs/load

Sagwan Revalidation 2026-04-22T12:58:01Z#

  • verdict: ok
  • note: LLM unavailable: [CLI 오류 1] SessionEnd hook [node "/home/insu/.pixel-agents/hooks/claude-hook.js"] failed: node:internal/modules/cjs/load

Sagwan Revalidation 2026-04-23T13:29:30Z#

  • verdict: ok
  • note: LLM unavailable: [CLI 오류 1] SessionEnd hook [node "/home/insu/.pixel-agents/hooks/claude-hook.js"] failed: node:internal/modules/cjs/load

Sagwan Revalidation 2026-04-24T13:29:48Z#

  • verdict: ok
  • note: 낙관적·비관적 락 원리, FOR UPDATE/SKIP LOCKED 문법, 워크로드별 선택 기준이 2026년 현재도 표준 practice.

Sagwan Revalidation 2026-04-25T13:43:42Z#

  • verdict: ok
  • note: 낙관적·비관적 락 SQL 패턴, SKIP LOCKED, 워크로드별 선택 기준 모두 현행 표준이며 변경 불필요.

Sagwan Revalidation 2026-04-26T13:49:52Z#

  • verdict: ok
  • note: 낙관적·비관적 락 개념, FOR UPDATE/SKIP LOCKED 문법, 워크로드별 선택 기준이 2026년 현재도 표준 practice에 부합합니다.

Sagwan Revalidation 2026-04-27T14:00:05Z#

  • verdict: ok
  • note: LLM unavailable: [CLI 오류 1] SessionEnd hook [node "/home/insu/.pixel-agents/hooks/claude-hook.js"] failed: node:internal/modules/cjs/load

Sagwan Revalidation 2026-04-28T14:25:52Z#

  • verdict: ok
  • note: 낙관적·비관적 락 원리, FOR UPDATE/SKIP LOCKED 문법, 워크로드별 선택 기준이 현재도 표준 practice로 유효합니다.

Sagwan Revalidation 2026-04-29T14:44:41Z#

  • verdict: ok
  • note: 낙관적·비관적 락 개념, SQL 문법(FOR UPDATE/SKIP LOCKED), 워크로드별 선택 기준 모두 현행 표준과 일치합니다.

Sagwan Revalidation 2026-04-30T14:56:51Z#

  • verdict: ok
  • note: PostgreSQL·Django·SQLAlchemy 최신 문서와 일치해 그대로 재사용 가능.

Sagwan Revalidation 2026-05-01T15:06:06Z#

  • verdict: ok
  • note: PostgreSQL 18과 최신 ORM 문서 기준 문법과 선택 기준이 모두 현행이다.

Sagwan Revalidation 2026-05-02T15:06:59Z#

  • verdict: ok
  • note: PostgreSQL 락 구문과 version 체크 패턴, 선택 기준이 지금도 유효함

Sagwan Revalidation 2026-05-03T15:23:59Z#

  • verdict: ok
  • note: PostgreSQL 최신 문서와 일치하며 선택 기준·예시 SQL이 재사용 가능함.

Sagwan Revalidation 2026-05-04T15:53:29Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법, 선택 기준 모두 현재도 표준 practice입니다.

Sagwan Revalidation 2026-05-05T15:57:45Z#

  • verdict: ok
  • note: 락 패턴·SQL 문법·선택 기준 모두 현행 표준 practice로 유효.

Sagwan Revalidation 2026-05-06T16:27:13Z#

  • verdict: ok
  • note: 락 패턴·SQL 문법·선택 기준 모두 현재도 표준 practice입니다.
  • PostgreSQL 심화 가이드 Capsule
  • 데이터베이스 설계 실전 Capsule

Sagwan Revalidation 2026-05-07T16:47:35Z#

  • verdict: ok
  • note: 락 패턴과 선택 기준, ORM 지원 내용 모두 현재도 유효합니다.

Sagwan Revalidation 2026-05-08T17:20:25Z#

  • verdict: ok
  • note: 락 패턴·SQL 문법·워크로드별 선택 기준 모두 현재도 유효합니다.

Sagwan Revalidation 2026-05-09T17:45:23Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법, 선택 기준 모두 현재도 표준 practice입니다.

Sagwan Revalidation 2026-05-10T18:17:49Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법, 선택 기준 모두 현행 practice와 부합합니다.

Sagwan Revalidation 2026-05-11T18:28:24Z#

  • verdict: ok
  • note: 핵심 패턴과 PostgreSQL 락 문법·선택 기준이 여전히 현행입니다.

Sagwan Revalidation 2026-05-12T19:03:22Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법, 선택 기준 모두 현행 practice와 부합.

Sagwan Revalidation 2026-05-13T19:27:32Z#

  • verdict: ok
  • note: 락 패턴·SQL 문법·선택 기준 모두 현재도 표준 practice입니다.

Sagwan Revalidation 2026-05-14T19:58:30Z#

  • verdict: ok
  • note: 락 패턴과 선택 기준, PostgreSQL 문법 모두 현행 practice와 부합합니다.

Sagwan Revalidation 2026-05-15T20:30:52Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법·선택 기준이 현행 practice와 부합합니다.

Sagwan Revalidation 2026-05-16T20:42:32Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법, 선택 기준 모두 현재도 표준 practice입니다.

Sagwan Revalidation 2026-05-17T21:08:48Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법·선택 기준 모두 현재도 표준 practice입니다.

Sagwan Revalidation 2026-05-18T21:32:46Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법·선택 기준이 여전히 현행 practice입니다.

Sagwan Revalidation 2026-05-19T21:54:03Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법·선택 기준이 여전히 정확하고 현행입니다.

Sagwan Revalidation 2026-05-20T22:31:05Z#

  • verdict: ok
  • note: 락 패턴과 선택 기준, PostgreSQL 문법 모두 현재도 유효합니다.

Sagwan Revalidation 2026-05-21T22:54:45Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법, 선택 기준 모두 현재도 유효합니다.

Sagwan Revalidation 2026-05-22T23:04:32Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법·선택 기준 모두 현재도 표준적입니다.

Sagwan Revalidation 2026-05-23T23:05:52Z#

  • verdict: ok
  • note: 핵심 패턴과 PostgreSQL 락 문법, 선택 기준 모두 현재도 유효합니다.

Sagwan Revalidation 2026-05-24T23:17:27Z#

  • verdict: ok
  • note: 락 패턴과 ORM 지원, 워크로드별 선택 기준 모두 현행 practice와 부합.

Sagwan Revalidation 2026-05-25T23:43:29Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법·선택 기준 모두 현행 practice로 유효합니다.

Sagwan Revalidation 2026-05-27T00:13:57Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법·선택 기준이 현재도 표준 practice입니다.

Sagwan Revalidation 2026-05-28T00:21:07Z#

  • verdict: ok
  • note: 락 패턴과 PostgreSQL 문법, 선택 기준 모두 현재도 표준 practice입니다.

Sagwan Revalidation 2026-05-29T00:56:59Z#

  • verdict: ok
  • note: 락 패턴·SQL 문법·선택 기준 모두 현행 practice와 일치합니다.

Sagwan Revalidation 2026-05-30T01:16:49Z#

  • verdict: ok
  • note: 락 패턴과 선택 기준, PostgreSQL 문법 모두 현재도 유효합니다.

Sagwan Revalidation 2026-05-31T01:32:18Z#

  • verdict: ok
  • note: 락 패턴과 SQL 문법, 선택 기준 모두 현재도 표준 practice입니다.

Sagwan Revalidation 2026-06-01T05:59:51Z#

  • verdict: ok
  • note: 락 패턴과 SQL 문법, 선택 기준이 현재도 표준 practice입니다.

Sagwan Revalidation 2026-06-02T06:55:03Z#

  • verdict: ok
  • note: 핵심 패턴과 PostgreSQL 락 문법·선택 기준 모두 여전히 유효합니다.

Sagwan Revalidation 2026-06-03T07:36:34Z#

  • verdict: ok
  • note: 핵심 패턴과 PostgreSQL 락 문법·선택 기준이 현재도 유효합니다.

Sagwan Revalidation 2026-06-04T08:07:09Z#

  • verdict: ok
  • note: 핵심 패턴과 PostgreSQL 락 문법·선택 기준이 현재도 유효합니다.

Sagwan Revalidation 2026-06-05T08:28:21Z#

  • verdict: ok
  • note: 락 패턴과 선택 기준, PostgreSQL 문법 모두 현행 practice와 부합합니다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1