Summary

  • 2026년 11월 2일 갱신된 CoRE 발행 구독 초안 22판은 장시간 접속이 끊기는 CoAP 단말을 위한 브로커를 제안한다. 발행자는 토픽 데이터 자원에 PUT하고, 구독자는 Observe로 갱신을 받거나 GET으로 최신 표현을 읽는다. 문서는 아직 IESG 평가 중이다.
  • 3.3절의 조회 계약은 가장 최근 표현까지다. 이전 표현을 조회하는 방법과 몇 개를 저장할지는 앞으로의 작업으로 남겼다.
  • 토픽 존재, 발행 수락, 구독 성공, 알림 도착은 각각 확인해야 한다. 응답에 Observe 옵션이 없으면 성공 코드만으로 구독이 성립하지 않는다.

가상의 공장 온도 센서를 떠올려 보자. 점심에 경보 수치를 보낸 뒤 한 시간 후 정상 수치를 보냈다. 그동안 정비 단말은 오프라인이었다. 돌아온 단말이 최신 값을 요청하자 브로커는 정상 수치를 준다. 지금의 온도를 알려 주는 데는 쓸모 있다. 그 한 시간에 무슨 일이 있었는지에는 답하지 못한다. 초안이 실제 공장 사고를 보고한 것은 아니다. 이 장면은 프로토콜이 어디까지 책임지는지 묻기 위한 시험이다.

IETF CoRE 초안에서 브로커는 토픽 모음, 토픽 설정 자원, 별도의 토픽 데이터 자원을 맡는다. 발행자는 데이터 자원의 URI로 PUT을 보낸다. 구독자는 RFC 7641의 Observe 방식에 따라 Observe: 0을 붙인 GET으로 상태 변화를 받는다. 유지 구독 없이 단순 GET으로 현재 데이터를 읽을 수도 있다. 토픽 설정 URI와 데이터 URI의 경로 모양이 같을 필요는 없다. topic-data 속성을 읽어 데이터 주소를 찾는다. 서로 동시에 깨어 있지 않은 단말을 이어 주는 구조다.

최신 값이 설명하는 시간은 짧다

토픽을 만들면 데이터 자원도 생기지만 첫 발행 전에는 표현이 없다. 이때 초안은 제안 단계의 2.06 No Content를 사용한다. 자원 자체가 없다면 보통 4.04 Not Found다. 값이 발행됐다면 GET은 최신 표현을 돌려준다. 운영 화면이 셋을 모두 “경보 없음”으로 표시하면 빈 토픽, 삭제된 토픽, 현재 값이 있는 토픽의 차이를 지운다.

3.3절은 이전 값에 대해 더 분명하다. 이 문서는 최신 표현의 조회만 정의한다. 과거 표현을 조회하고 브로커가 몇 개나 남길지 정하는 일은 미래 규격의 예로 제시된다. 브로커가 경보와 정상 복귀라는 두 번의 PUT을 받았다고 해서, 돌아온 단말이 두 값의 시간 순서를 다시 요청할 수 있는 것은 아니다. 사고 경과가 필요하다면 별도의 지속 로그를 설계하고, 중요한 발행이 그 로그에 실제로 들어가는지 검증해야 한다.

구독 성립도 응답 코드를 넘어 확인한다. 데이터가 있을 때 Observe: 0 요청에 2.05 Content와 Observe 옵션이 함께 오면 현재 값을 받고 구독한 것이다. 데이터가 아직 없을 때는 2.06 No Content에 Observe가 붙고 첫 발행이 나중에 알림으로 올 수 있다. 옵션이 빠지면 2.05나 2.06이더라도 구독은 실패다. 설정된 max-subscribers 한도에 도달한 브로커는 Observe를 넣지 않는다. 성공 코드만 보는 프로그램은 감시 명단에서 빠진 사실을 숨긴다.

토픽은 삭제되거나 만료될 수도 있다. 삭제하면 설정 자원과 데이터 자원이 함께 없어지고 관찰자에게 마지막 4.04가 간다. 선택적인 만료일이 같은 결과를 부를 수 있다. 알림이 끊긴 이유가 단말의 잠, 구독 거절, 아직 비어 있는 데이터 자원, 토픽 삭제 중 무엇인지 따로 살펴야 한다. 마지막 온도 값 하나로는 구분할 수 없다.

브로커의 수락증은 현장의 조치 기록이 아니다

발행 PUT이 성공하면 대개 2.04 Changed가 돌아온다. RFC 7252의 CoAP 요청 응답 체계에서 브로커가 갱신을 받았다는 뜻이다. 모든 구독자에게 도착했거나 정비 앱이 경보를 띄웠다는 뜻은 아니다. 발행이 너무 빠르면 브로커는 4.29 Too Many Requests를 돌려줄 수 있고, Max-Age가 재시도까지의 대기 시간을 정한다. 센서가 보냈다는 기록과 브로커가 받아들였다는 기록도 분리해야 한다.

초안은 각 단말과 브로커 사이의 통신 보호를 요구한다. 발행 내용에는 구독자가 출처를 확인할 수 있도록 종단 간 보호와 출처 인증도 권고한다. 브로커까지 안전한 연결을 맺었다고 센서가 낸 값의 출처 검증까지 끝난 것은 아니다. 출처를 확인한 뒤에도 알림 전달과 응용 프로그램의 판단, 현장의 조치는 별도 단계다.

브로커의 이익은 분명하다. 오래 잠든 기기가 돌아와 최신 상태를 얻는다. 초안에는 모든 중간 사건을 보존한다는 보장이나 실제 구축의 손실률이 없다. 운영 결정을 바꿀 자료는 오프라인 시간 동안 어떤 발행이 수락됐고 누구에게 전달됐으며 무엇이 실행됐는지를 시간순으로 적은 기록이다. 그 기록이 없으면 정상 수치는 현재에 대한 답이고 사라진 한 시간에 대한 답은 아니다.

CoRE 초안 · RFC 7641 · RFC 7252