도어락 제어 흐름
SSE + Redis Pub/Sub 기반 비동기 도어락 제어 시스템입니다.
V2 전체 흐름
인증 및 검증
doorlockKey 검증
- 결제 완료 시 생성된 UUID
Pay테이블에서doorlockKey+status=DONE조회- 지점(branch) 일치 확인
시간 검증
- 예약 시작 2분 전부터 해제 가능
- 예약 종료 2분 전까지 해제 가능
- (DB endDateTime = 실제 종료 - 10분)
도어락 타입
| 타입 | 대상 | 설명 |
|---|---|---|
front | 출입문 | 지점의 모든 front 도어 동시 해제 |
room | 객실문 | 예약된 특정 룸만 해제 |
실패 시 Failover
도어락 해제 실패 시 PIN 코드를 fallback으로 제공합니다.
- HomeAssistant 콜백에서
FAILED수신 - 해당 머신의
currentPin조회 - 응답에
failoverKey(PIN 코드) 포함 - Slack 실 패 알림 발송
Redis 키 구조
| 키 | TTL | 용도 |
|---|---|---|
door:request:{requestId} | 30초 | 요청 정보 + 콜백 누적 |
door:result:{requestId} | 30초 | 최종 결과 (SSE 전 도착 대비) |
door:result:{requestId} (채널) | - | Pub/Sub 결과 전달 |
V1 (Deprecated)
V1은 동기 방식으로, 클라이언트가 HomeAssistant 응답을 직접 대기합니다. 타임아웃 이슈로 V2로 전환되었습니다.
예외 처리
| 예외 | 레벨 | 설명 |
|---|---|---|
AsyncRequestNotUsableException | WARN | 클라이언트가 SSE 연결을 먼저 종료 (정상) |
IOException | ERROR | SSE 전송 실패 (비정상) |
AsyncRequestTimeoutException | INFO | SSE 7초 타임아웃 (정상) |