개요
Subscription 서비스의 알림 도메인은 숙박시설 및 키오스크의 실시간 이벤트를 구독하고 발행하는 기능을 제공합니다. GraphQL Subscription을 통해 WebSocket 기반 실시간 통신을 지원하며, 다양한 우선순위와 타입의 알림을 처리할 수 있습니다.타입 정의
AccommodationNotification
숙박시설 알림 객체입니다.필드 설명
ID!
required
알림 고유 식별자 (ULID)
ID
알림이 속한 숙박시설 ID
String
알림 유형 (예:
"emergency", "info", "warning")String
알림 관련 데이터 (JSON 문자열)
- 객실 정보, 고객 정보 등 알림 상세 내용 포함
Date
알림 생성 시각
Int
알림 우선순위
1: 일반 (초록)2: 경고 (노랑)3+: 긴급 (빨강)
ID
관련 객실 유형 ID
String
알림 설명 또는 키오스크 ID
String
알림 템플릿 식별자
ROOM_CHECKED_IN: 체크인 완료RESERVATION_MISSED_HANDLED: 예약 누락 처리AUTH_REQUESTED: 인증 요청AUTH_REQUEST_CHECKIN: 체크인 인증 요청AUTH_REQUEST_CHECKOUT: 체크아웃 인증 요청
String
알림 대상 또는 목적 (예:
"checkin", "checkout")String
관련 엔티티 (예: 객실 ID, 예약 ID)
String
우선순위 기반 표시 타입 (계산된 필드)
"success": priority = 1"warning": priority = 2"error": priority >= 3"disabled": priority = null
KioskSystemNotification
키오스크 시스템 알림 객체입니다.ID!
required
시스템 알림 고유 식별자
ID!
required
알림을 받을 키오스크 ID
String!
required
시스템 알림 유형
String!
required
시스템 알림 데이터 (JSON 문자열)
Date!
required
알림 생성 시각
DataEvent
데이터 이벤트 객체입니다.String!
required
이벤트 타입
RoomState: 객실 상태 변경AuthRequest: 인증 요청AuthRequestCheckin: 체크인 인증 요청AuthRequestCheckout: 체크아웃 인증 요청
String!
required
이벤트 데이터 (JSON 문자열)
Queries
getAccommodationNotifications
숙박시설의 알림 목록을 페이지네이션하여 조회합니다.GraphQL Signature
파라미터
ID!
required
조회할 숙박시설 ID
Int
처음부터 가져올 항목 수 (forward pagination)
Int
끝에서부터 가져올 항목 수 (backward pagination)
String
이 커서 이후의 항목들을 가져옴
String
이 커서 이전의 항목들을 가져옴
AccommodationNotificationQueryFilter
필터 조건:
type: 알림 유형dateFrom: 시작 날짜dateTo: 종료 날짜objective: 목적relative: 관련 엔티티roomTypeId: 객실 유형 IDroomId: 객실 IDsortKey: 정렬 키sortDirection: 정렬 방향 ("asc"또는"desc")
응답
[AccommodationNotificationEdge]!
required
알림 엣지 배열
PageInfo!
required
페이지네이션 정보
Int!
required
전체 알림 수
권한
- 필수 권한:
MAID이상 - 해당 숙박시설에 대한 관리 권한 필요
예제
Mutations
publishAccommodationNotification
숙박시설 알림을 생성하고 실시간으로 구독자들에게 전송합니다.GraphQL Signature
파라미터
AddAccommodationNotificationInput!
required
알림 생성 입력:
accommodationId(ID!, required): 숙박시설 IDtype(String!, required): 알림 유형priority(Int): 우선순위 (1-3+)data(String): 알림 데이터 (JSON)objective(String): 목적relative(String): 관련 엔티티template(String): 템플릿 식별자description(String): 설명roomTypeId(ID): 객실 유형 ID
응답
AccommodationNotification!
required
생성된 알림 객체
권한
- 필수 권한: 해당 숙박시설에 대한 관리 권한
- 알림 발행 후 자동으로 구독자들에게 실시간 전송
예제
동작
- EventStore에 알림 이벤트 생성
- Saga 처리를 통해 데이터베이스에 저장
- PubSub을 통해 실시간 구독자들에게 전송
- 템플릿이
AUTH_REQUESTED인 경우 카카오톡 알림톡 자동 발송
publishKioskSystemNoficiation
키오스크 시스템 알림을 발행합니다.함수명에 오타가 있습니다 (
Noficiation → Notification). 호환성 유지를 위해 현재 이름 사용 중입니다.GraphQL Signature
파라미터
AddKioskSystemNotificationInput!
required
키오스크 시스템 알림 입력:
kioskId(ID!, required): 키오스크 IDtype(String): 알림 유형data(String): 알림 데이터 (JSON)createdAt(Date): 생성 시각
응답
Boolean!
required
알림 발행 성공 여부
권한
- 필수 권한:
ADMIN(관리자만 시스템 알림 발행 가능)
예제
handleEmergencyNotification
긴급 알림을 처리하고 상태를 업데이트합니다.GraphQL Signature
파라미터
HandleEmergencyNotificationInput!
required
긴급 알림 처리 입력:
accommodationId(ID!, required): 숙박시설 IDnotificationId(ID!, required): 알림 ID
응답
Boolean!
required
처리 성공 여부
권한
- 필수 권한: 해당 숙박시설에 대한 관리 권한
동작
- 해당 알림을 조회
- 템플릿을
RESERVATION_MISSED_HANDLED로 변경 - 우선순위를 1(일반)로 낮춤
- 구독자들에게 업데이트된 알림 전송
예제
Subscriptions
accommodationSubscription
숙박시설의 실시간 알림을 구독합니다.GraphQL Signature
파라미터
ID!
required
구독할 숙박시설 ID
응답
AccommodationNotification!
required
실시간으로 수신되는 알림 객체
권한
- 필수 권한:
MAID이상 - 해당 숙박시설에 대한 관리 권한 필요
예제
수신 이벤트 예시
dataSubscription
숙박시설의 실시간 데이터 이벤트를 구독합니다.GraphQL Signature
파라미터
ID!
required
구독할 숙박시설 ID
응답
DataEvent!
required
실시간으로 수신되는 데이터 이벤트
권한
- 필수 권한:
MAID이상 - 해당 숙박시설에 대한 관리 권한 필요
이벤트 타입
예제
수신 이벤트 예시
kioskSystemSubscription
키오스크 시스템 알림을 구독합니다.GraphQL Signature
파라미터
ID!
required
구독할 키오스크 ID
응답
KioskSystemNotification!
required
실시간으로 수신되는 키오스크 시스템 알림
권한
- 필수 권한: 키오스크 자체 인증
- 해당 키오스크 ID와 토큰 일치 확인
동작
- 구독 시작 시 키오스크 연결 상태를
connected로 업데이트 - WebSocket 연결 유지 중 시스템 알림 수신
- 연결 해제 시 자동으로 연결 상태 업데이트
예제
사용 시나리오
시나리오 1: 대시보드 실시간 알림
대시보드에서 숙박시설의 모든 이벤트를 실시간으로 모니터링합니다.시나리오 2: 키오스크 인증 요청 처리
키오스크에서 인증 요청을 보내고 대시보드에서 처리합니다.시나리오 3: 긴급 알림 처리
예약 누락과 같은 긴급 상황을 처리합니다.에러 처리
권한 부족
존재하지 않는 알림
WebSocket 연결 실패
클라이언트에서 재연결 로직을 구현해야 합니다:성능 최적화
필터링 활용
불필요한 알림을 필터링하여 네트워크 트래픽을 줄입니다:구독 최적화
필요한 필드만 요청하여 데이터 전송량을 최소화합니다:관련 API
- Core Service - 예약 API - 예약 관련 이벤트 생성
- User Service - 사용자 권한 관리