본문으로 건너뛰기

시그널 태그

태그의 정의

시그널 태그(Tag)는 대상(target)과 제목(topic)을 알려주는 정보이며

  1. 구독할때
  2. 발행(송신)할때
  3. 수신자 메시지 처리기(이벤트 핸들러)에서 사용됩니다.

본 글에서는 시그널 태그의 구조와 여러 조합 형식에 대해 소개합니다.

태그의 구조

태그(Tag)는 타겟(Target)과 구분 문자(Delimiter), 그리고 토픽(Topic)으로 구성됩니다.

Tag = Target + Delimiter + Topic

Target = Channel or CID

Delimiter = ‘#’ for Channel, ‘@’ for CID시그널 태그(Signal Tag)의 구조

타겟(Target)의 의미와 두가지 유형

  • 시그널이 전송되어야 할 대상이 타겟(Target)입니다.
  • 타겟(Target)은 채널 또는 CID 입니다.
  • 타겟이 채널일 경우 모든 채널 구독자에게 전달됩니다. ( 1:N 멀티캐스트)
  • 타겟이 CID인 경우 해당 클라이언트에게만 전송됩니다. (1:1 유니캐스트)

토픽(Topic)은

  • 토픽은 시그널에 대한 부가 정보이며 사용하면 효과적이지만 생략할 수도 있습니다.
  • 가령 명사(Nouns)형인 경우 시그널의 종류나 이름을 표현할 수 있습니다.
  • 가령 동사(Verbs)형의 경우 요청(Request)을 표현하기도 합니다.
  • 참고로 MQTT 의 토픽 트리(Topic Tree)는 지원되지 않습니다.

구분 문자의 2가지 역활

  • 타겟이 CID인 경우 구분 문자는 ‘@‘ 이고
  • 타겟이 채널인 경우 구분 문자는 ‘#‘ 입니다.
  • 더불어 구분 문자는 태그에 포함된 타겟과 토픽을 분리해주는 역활도 합니다.

태그 조합 7가지 형태

태그는 기본적으로 타겟, 구분문자, 토픽으로 구성되는데 용법에 따라 토픽이나 타겟이 생략될 수 있습니다. 생략된 경우를 포함하면 아래 조합이 전부입니다. 더불어 태그 안에는 리테인($) 기호도 포함 될 수 있습니다.

“channel#topic” // 채널, 채널 구분문자(#), 토픽이 모두 포함된 태그

“channel” // 토픽 없는 채널의 경우 구분문자도 생략 가능

“#topic” // 채널이 생략되고 토픽만 있는 태그(홈채널)

“CID@topic” // CID, 유니캐스트 구분문자(@), 토픽이 모두 있는 태그

“CID@” // CID만 있는 태그 ( 주의. 유니캐스트의 경우 @문자는 생략될수 없습니다.)

“@” // CID와 토픽이 모두 생략된 태그

“@topic” // CID가 생략된 토픽만 있는 태그

리테인: 시그널 유지 기호 ‘$’ (Retain Symbol)

MQTT에서의 Retain기능은 마지막으로 발행된 메시지를 발행 이후에 구독한 구독자도 수신 할 수 있도록 보관 및 전달 해주는 기능입니다. 리모트 시그널에서는 리테인 기능을 매우 간단한 방식으로 지원합니다. 구독 및 발행(송신) 시그널 태그의 ‘@’ 또는 ‘#’ 구분문자 뒤에 ‘$’ 를 포함하면 됩니다. IO시그널의 리테인 시그널은 마지막 1개만 보전됩니다. 리테인 요청 문자($)는 구분문자 뒤에 포함합니다. ( 주의. #이나 @ 같은 명시적 구분문자가 없이 $로 시작되는 태그는 미지원됩니다.)

// $ 기호는 구분문자 뒤에 포함합니다.

channel#$topic

#$topic

CID@$topic

CID@$

@$topic

@$

// # 이나 @ 같은 구문문자가 없이 $로 시작되는 태그는 미지원

$channel // 미지원