사용자A 가 Item을 조회(작업) 시점에 Occupy 레코드를 DB에 Insert 혹은 Update(종료된 Expired상태면 갱신).
다른 사용자B는 동일 Item에 대해 ExpireTime 이전까지 접근 불가.
사용자A가 창 종료 시(OK버튼 클릭 혹은 실제 창 닫힘) 점유 해제(Free).
ExpireTime 경과 시 자동 Expired 간주, 업데이트는 별도 프로세스 또는 조회 시 갱신.
UI 및 메뉴 명시 가능 (UINAME, MENUNAME).
사용자 이벤트 기록 (누가 언제 어떤 상태 변경했는지 기록)
2.2 상태(State)
Occupied: 정상 점유중
Free: 해제됨
Expired: 만료 처리됨(시간 초과)
2.3. 프로세스
2.3.1. 순차적
%%{init: {"theme": "dark"} }%%
sequenceDiagram
participant User as 사용자 및 화면
participant OccupyService as 점유서비스
participant OccupyControl as 점유관리(CT_OCCUPY_ITEM)
participant OccupyHistory as 점유이력(CT_OCCUPY_ITEM_HISTORY)
User->>OccupyService: 아이템 점유 요청(조회)
OccupyService->>OccupyControl: 점유상태 확인
alt 점유 정보 없음 or Expired 상태
OccupyService->>OccupyControl: 점유 정보 INSERT/업데이트(STATE=OCCUPIED)
OccupyService->>OccupyHistory: 점유 이벤트 이력 기록
OccupyService-->>User: 작업 허용 응답
else 이미 다른 사용자 점유 중(ExpireTime 미도래)
OccupyService-->>User: 접근 거부 응답 (작업 불가)
end
User->>OccupyService: 작업 진행 중 요청
OccupyService->>OccupyControl: 작업 상태 유지/검증
alt 작업 종료 (창 닫힘/OK)
User->>OccupyService: 점유 해제 요청
OccupyService->>OccupyControl: 점유 해제 처리(STATE=FREE)
OccupyControl->>OccupyHistory: 해제 이벤트 이력 기록
end
alt 점유 만료(ExpireTime 도래)
OccupyService->>OccupyControl: 점유 만료 처리(STATE=EXPIRED)
OccupyControl->>OccupyHistory: 만료 이벤트 이력 기록
end
2.3.2. 상태
%%{init: {"theme": "dark"}}%%
stateDiagram-v2
[*] --> FREE: 초기 상태 or 점유 해제
FREE --> OCCUPIED: 사용자 점유 시작(조회)
OCCUPIED --> FREE: 정상 해제(창 닫음/OK)
OCCUPIED --> EXPIRED: ExpireTime 도래(만료)
EXPIRED --> OCCUPIED: Expired 후 재점유(조회)
조회 시 데이터 존재 확인 없으면 Insert (STATE = ‘OCCUPIED’, START_TIME = 현재, EXPIRE_TIME = 현재 + TTL) 있으면 점유 만료시간(EXPIRE_TIME) 확인하여 만료되었으면 STATE=’EXPIRED’로 Update 후 신규 Insert or Update
다른 사용자의 조회 제한 조회 시 현재 점유 중인 사용자 아니라면, EXPIRE_TIME 이전까지 조회 불가 – 예외처리 및 안내 메시지 표출
창 닫힘 또는 OK 클릭 시 해제(STATE=’FREE’) 점유 해제 시점, 관련 컬럼(UPDT_USR_ID, UPDT_DT 등) 업데이트
점유 만료 처리 만료시 자동 Expired 상태 처리 (조회 시 갱신 혹은 별도 배치 처리)