Admin 초기화 동시 실행을 막는 PostgreSQL advisory lock
0회 조회약 1분 읽기
Admin 초기화 동시 실행을 막는 PostgreSQL advisory lock
Codingstairs의 DB 초기화는 테이블 생성·스키마 보정·정적 시드·notes/courses 업서를 순서대로 묶습니다. 운영자가 버튼을 두 번 누르거나 Admin replica가 겹치면, 각 단계가 멱등이어도 두 파이프라인이 중간 상태를 서로 읽을 수 있습니다.
POST /api/db/init는 시작 전에 pg_try_advisory_lock을 획득합니다. 이미 다른 세션이 작업 중이면 DB를 더 건드리지 않고 409 INIT_IN_PROGRESS를 반환합니다. lock을 잡은 세션은 전체 callback 동안 유지하고, 성공·실패·예외 뒤 pg_advisory_unlock과 client release를 실행합니다.
UI 버튼 비활성화는 사용성 보조일 뿐 보안·동시성 계약이 아닙니다. 서버가 반환하는 상태를 role=status 영역에 보여 주고, 운영자는 409를 실패 데이터가 아니라 “현재 작업이 끝난 뒤 재시도할 상태”로 안내해야 합니다.
관련 강좌: Expand/Contract와 멱등 백필