본문으로 건너뛰기

도어락 제어 흐름

SSE + Redis Pub/Sub 기반 비동기 도어락 제어 시스템입니다.

V2 전체 흐름

인증 및 검증

doorlockKey 검증

  • 결제 완료 시 생성된 UUID
  • Pay 테이블에서 doorlockKey + status=DONE 조회
  • 지점(branch) 일치 확인

시간 검증

  • 예약 시작 2분 전부터 해제 가능
  • 예약 종료 2분 전까지 해제 가능
  • (DB endDateTime = 실제 종료 - 10분)

도어락 타입

타입대상설명
front출입문지점의 모든 front 도어 동시 해제
room객실문예약된 특정 룸만 해제

실패 시 Failover

도어락 해제 실패 시 PIN 코드를 fallback으로 제공합니다.

  1. HomeAssistant 콜백에서 FAILED 수신
  2. 해당 머신의 currentPin 조회
  3. 응답에 failoverKey(PIN 코드) 포함
  4. Slack 실패 알림 발송

Redis 키 구조

TTL용도
door:request:{requestId}30초요청 정보 + 콜백 누적
door:result:{requestId}30초최종 결과 (SSE 전 도착 대비)
door:result:{requestId} (채널)-Pub/Sub 결과 전달

V1 (Deprecated)

V1은 동기 방식으로, 클라이언트가 HomeAssistant 응답을 직접 대기합니다. 타임아웃 이슈로 V2로 전환되었습니다.

예외 처리

예외레벨설명
AsyncRequestNotUsableExceptionWARN클라이언트가 SSE 연결을 먼저 종료 (정상)
IOExceptionERRORSSE 전송 실패 (비정상)
AsyncRequestTimeoutExceptionINFOSSE 7초 타임아웃 (정상)