Skip to main content

개요

Subscription Service는 VPMS 클러스터의 실시간 데이터 구독 및 알림 시스템을 담당하는 서비스입니다. GraphQL Subscription을 통해 숙박시설 관련 이벤트를 실시간으로 전달하며, 키오스크 및 대시보드 간의 실시간 통신을 지원합니다.

주요 기능

실시간 알림

숙박시설 이벤트 실시간 구독 및 알림

키오스크 통신

키오스크 시스템 상태 및 명령 실시간 전달

이벤트 발행

숙박시설 및 키오스크 알림 발행

데이터 스트림

객실 상태, 인증 요청 등 실시간 데이터 스트림

API 도메인

알림 관리 (Notification)

실시간 알림 구독 및 발행 기능을 제공합니다.
  • 알림 API: 숙박시설 알림, 키오스크 시스템 알림, 데이터 구독

기술 스택

  • API 타입: GraphQL (Apollo Federation) + WebSocket
  • 프레임워크: Fastify + TypeScript
  • 데이터베이스: PostgreSQL + Prisma ORM
  • 실시간 통신: GraphQL Subscription (PubSub)
  • 이벤트 소싱: EventStore

GraphQL Endpoint

HTTP Endpoint

WebSocket Endpoint (Subscription)

GraphQL 공통 설정 및 인증 방법은 GraphQL 설정 가이드를 참고하세요.
Subscription Service는 Apollo Federation의 서브그래프로 동작하며, API Gateway를 통해 통합된 스키마로 접근할 수 있습니다.

실시간 구독 흐름

1

WebSocket 연결

GraphQL Subscription을 위한 WebSocket 연결 수립
2

구독 시작

accommodationSubscription 또는 dataSubscription으로 실시간 구독 시작
3

이벤트 수신

서버에서 발생하는 이벤트를 실시간으로 수신
4

알림 처리

수신된 알림을 UI에 표시하거나 후속 처리 수행

예제: 실시간 알림 구독

알림 타입

Subscription Service는 다양한 유형의 알림을 지원합니다:

숙박시설 알림 (AccommodationNotification)

  • 체크인 알림: 고객 체크인 완료 시
  • 긴급 알림: 예약 누락, 시스템 오류 등
  • 인증 요청: 키오스크 인증 요청
  • 객실 상태 변경: 청소 완료, 정비 필요 등

키오스크 시스템 알림 (KioskSystemNotification)

  • 시스템 명령: 키오스크 제어 명령
  • 상태 업데이트: 연결 상태, 동작 상태

데이터 이벤트 (DataEvent)

  • 객실 상태: 실시간 객실 상태 변경
  • 인증 이벤트: 인증 요청 및 처리 상태

우선순위 시스템

알림은 우선순위(priority)에 따라 분류됩니다:

알림 템플릿

자주 사용되는 알림 템플릿:
  • ROOM_CHECKED_IN: 객실 체크인 완료
  • RESERVATION_MISSED_HANDLED: 예약 누락 처리 완료
  • AUTH_REQUESTED: 키오스크 인증 요청
  • AUTH_REQUEST_CHECKIN: 체크인 인증 요청
  • AUTH_REQUEST_CHECKOUT: 체크아웃 인증 요청

보안 및 권한

숙박시설 알림 구독

  • 권한: MAID 이상 (청소 담당자 권한)
  • 해당 숙박시설에 대한 관리 권한 필요

키오스크 시스템 구독

  • 권한: 키오스크 자체 인증 필요
  • 해당 키오스크 ID와 토큰 일치 확인

데이터 구독

  • 권한: MAID 이상
  • 해당 숙박시설에 대한 관리 권한 필요

연결 상태 관리

Subscription Service는 키오스크의 연결 상태를 자동으로 관리합니다:
  • 연결 시: 키오스크 연결 상태 connected로 업데이트
  • 구독 활성화: WebSocket 연결 유지 중 실시간 알림 수신
  • 연결 해제 시: 자동으로 연결 상태 업데이트
WebSocket 연결이 끊어지면 자동으로 재연결하는 로직을 클라이언트에 구현해야 합니다.

관련 서비스

지원

문의사항이 있으시면 support@vendit.io로 연락주세요.