실시예의 측면들은 무상태 프로토콜(stateless protocol)을 사용하는 디바이스들 간의 통신에 관한 것이다. 일반적으로 무상태 프로토콜은 통신이 요청 및 응답의 독립적인 쌍으로 구성되도록, 각 요청을 어떠한 이전 요청과도 관련되지 않는 독립적인 트랜잭션으로 처리하는 통신 프로토콜이다. 무상태 프로토콜은 서버 또는 응답 엔티티가 복수의 요청 기간동안 각 통신 파트너에 대한 세션 정보 또는 상태를 유지할 것을 요구하지 않는다. 설명을 용이하게 하기 위해, IoTivity 프로토콜 및 RESTful 아키텍처의 맥락에서 다양한 예들이 여기에 설명된다. 그러나 실시예의 원리는 다양한 다른 상황 또는 애플리케이션, 특히 무상태 통신 패러다임을 이용하는 상황이나 애플리케이션에 적용 가능할 수 있음을 이해할 것이다.
실시예의 일부 측면에 따르면, 이 경우 각 트랜잭션은, 특정 결과를 얻기 위해 엔티티들 간에 교환되는 일련의 메시지들을 가리키는데, 이 각각의 트랜잭션은 통신될 메시지들의 시퀀스를 포함할 수 있다. 따라서, 개시 엔티티, 응답 엔티티 또는 이들 모두에 의해 상이한 상태가 유지될 수 있다. 동작 시퀀스와 관련된, 비제한적인 사용 사례의 예로는 키 교환 프로토콜, 프로비저닝, 셋업 및 관리가능성, 키 및 인증서 관리, 액세스 정책 프로비저닝, 온보드(on-boarding) 등이 있다.
종래의 RESTful 패러다임에서, 다중 상태 트랜잭션은 다양한 문제를 일으킨다. 하나는 각 개시자와 응답자 사이에 효과적인 조정(cordination)이 존재하지 않는다는 것이다. 프로토콜이 의도한 대로 진행된다는 보장이 없으며 프로토콜이 중단되는 경우 데이터 클린업을 위한 프로비전이 없다.
이러한 트랜잭션의 관리를 용이하게 하도록, 트랜잭션 자원은 다수의 RESTful 메시지 교환을 조정하는 각각의 트랜잭션에 대해 인스턴스화된다. 트랜잭션 자원은 다른 디바이스에 의해 검색될 수 있고, 따라서 이들 디바이스는 자원과 상호 작용하여 효과적으로 트랜잭션을 호출할 수 있다.
일부 예에서, 주어진 트랜잭션에 관련된 다양한 메시지 교환은 다양한 RESTful 메시지가 적용될 수 있는 시퀀스를 지정하는 자원 특성 상태 머신을 사용하여 모델링된다. RESTful 커맨드(예: GET, PUT, POST 등)가 정보 교환을 수행하는 데 적용될 수 있도록 메시지 내용 또는 프로토콜 데이터 유닛(PDU)이 자원으로 정의된다. 트랜잭션 자원의 상태 속성에 OBSERVE를 적용하면 통신하는 두 엔티티가 (연결이 끊어지거나 다시 연결되는 경우에도) 다음 단계로 계속되는 것이 적절한 경우 또는 트랜잭션이 예를 들면 중단되거나 커밋된 경우에 클린업을 수행하는 것이 적절한 경우를 결정할 수 있다 .
유리하게는, 트랜잭션 자원의 사용은 IoT 애플리케이션이 (OCF/IoTivity와 같은) 선언적 객체 모델을 사용하여 디바이스 프로비저닝, 키 교환, 다중-단계 커밋 등과 같은 트랜잭션 상호 작용 프로토콜을 구현할 수 있게 한다.
다양한 예에서, 트랜잭션 자원은 IoT 프레임워크 층이 MQTT(MQ Telemetry Transport), XMPP(Extensible Messaging and Presence Protocol), XML(Extensible Markup Language), COAP(Constrained Application Protocol), DDS(Data Distribution Service)를 사용하는 임의의 이용가능한 메시징 기법(예, pub/sub, req/resp, event/notify 등)을 사용하여 메시지 전달을 최적화하도록 하며, 다른 메시징 기법도 프레임워크 계층에서 사용될 수 있다.
도 1은 IoT 디바이스에 통합될 수 있는 다양한 유형의 컴퓨팅 플랫폼의 일부 예를 예시하는 하이 레벨 다이어그램이다. 컴퓨팅 플랫폼은 PC(102), 랩탑(104), 스마트폰/태블릿(106) 등과 같은 퍼스널 컴퓨터 또는 서버를 포함한다. 스위치, 라우터, 액세스 포인트 등을 나타내는 네트워킹 어플라이언스(108)와 같은 다른 유형의 정보 디바이스 또한 고려되는 컴퓨팅 플랫폼이다. 제어 시스템, 자동화된 툴링(automated tooling), 모터/로봇 제어, 프로그램가능 로직 제어기와 같은 산업 장비(110)도 또한, 실시예의 측면이 구현될 수 있는 컴퓨팅 플랫폼의 유형이다. 또한, 컴퓨팅 플랫폼은 스마트 안경(112), 스마트 워치(114), 디지털 카메라(116), 도시된 셋톱 박스, 오디오 재생 시스템 등과 같은 미디어 디바이스(118)와 같은 소비자 전자 디바이스로서 구현될 수 있다. 어플라이언스(120)는 예를 들어, IoT(Internet-of-Things) 노드와 같은 컴퓨팅 시스템을 포함할 수 있다. 의료 디바이스(122)는 임베디드 컴퓨팅 플랫폼을 포함할 수 있다. 마찬가지로 차량(124)은 하나 이상의 컴퓨팅 플랫폼을 포함할 수도 있다. 각각의 컴퓨팅 플랫폼은 프로세서 기반 시스템, 예를 들어, 자신에 의해 취해질 동작을 지정하는 (순차적인 또는 그 밖의) 명령어를 실행할 수 있는 머신을 포함할 수 있다.
도 2는 범용 머신의 예시적인 형태의 컴퓨터 시스템(200)을 예시하는 블록도이다. 특정 실시예에서, 하나 이상의 특정 알고리즘에 따라 컴퓨터 시스템(200)을 프로그래밍하면 그 프로그래밍의 실행시 특수 목적 머신으로 기능한다. 네트워크 배치에서, 컴퓨터 시스템은 서버-클라이언트 네트워크 환경에서 서버 또는 클라이언트 머신의 자격으로 작동하거나 피어-투-피어(또는 분산) 네트워크 환경에서 피어 머신으로서 동작할 수 있다. 아래의 일부 예에서 설명하는 것처럼 디바이스는, 자신이 트랜잭션 또는 메시지에 대해 개시자인지 또는 응답자인지에 따라, 클라이언트 모드 또는 서버 모드에서 교대로 동작할 수 있다.
예시적인 컴퓨터 시스템(200)은 적어도 하나의 프로세서(202)(예, 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU) 또는 둘 모두, 프로세서 코어, 연산 노드 등), 주 메모리(204) 및 정적 메모리(206)를 포함하며, 이들은 링크(208)(예를 들어, 버스)를 통해 서로 통신한다. 컴퓨터 시스템(200)은 비디오 디스플레이 유닛(210), 문자-숫자형 입력 디바이스(212)(예를 들어, 키보드) 및 사용자 인터페이스(UI) 내비게이션 디바이스(214)(예를 들어, 마우스)를 더 포함할 수 있다. 다양한 실시예에 따른 비디오 디스플레이 유닛은 복잡한 사용자-대화형 디스플레이, 또는 간단한 숫자형 또는 문자-숫자형 디스플레이를 포함할 수 있다. 일 실시예에서, 비디오 디스플레이 유닛(210), 입력 디바이스(212) 및 UI 내비게이션 디바이스(214)는 터치 스크린 디스플레이에 통합된다. 컴퓨터 시스템(200)은 저장 디바이스(216)(예를 들어, 구동 유닛), 신호 발생 디바이스(218)(예를 들어, 스피커), 네트워크 인터페이스 디바이스(NID)(220) 및 GPS(global positioning system) 센서, 나침반, 가속도계 또는 다른 센서와 같은 하나 이상의 센서(도시되지 않음)를 포함할 수 있다.
저장 디바이스(216)는 여기에 설명된 임의의 하나 이상의 기법 또는 기능에 의해 구현되거나 이용되는 데이터 구조 및 명령어들(224)(예를 들어, 소프트웨어)의 하나 이상의 세트가 저장되는 머신 판독가능 매체(222)를 포함한다. 명령어들(224)은 또한 컴퓨터 시스템(200)에 의한 실행 동안 주 메모리(204), 정적 메모리(206) 및/또는 프로세서(202) 내에 완전히 또는 적어도 부분적으로 내장되어 있을 수 있고, 주 메모리(204), 정적 메모리(206) 및 프로세서(202)는 또한 머신 판독가능 매체를 구성한다.
머신 판독가능 매체(222)가 단일 매체인 것으로 예시적인 실시예에 도시되어 있지만, "머신 판독가능 매체"라는 용어는 하나 이상의 명령어(224)를 저장하는 단일 매체 또는 복수 매체(예를 들어, 중앙 집중형 또는 분산형 데이터베이스, 및/또는 연관된 캐시 및 서버)를 포함할 수 있다. "머신 판독가능 매체"라는 용어는 또한 머신에 의해 실행되고 머신으로 하여금 본 개시의 임의의 하나 이상의 기법을 수행하게 하는 명령어들을 저장, 인코딩 또는 운반할 수 있거나, 그러한 명령어들과 연관되거나 그에 의해 이용되는 데이터 구조를 저장, 인코딩 또는 운반할 수 있는 유형의 매체는 어떠한 것이든 포함하도록 해석되어야 한다. 따라서 "머신 판독가능 매체"라는 용어는 솔리드 스테이트 메모리, 광학 및 자기 매체를 포함하되 이에 국한되지는 않는다. 머신 판독가능 매체의 특정 예는 비휘발성 메모리(예를 들어, 반도체 메모리 디바이스(예, 전기적으로 프로그램가능한 판독 전용 메모리(EPROM), 전기적으로 소거 가능한 프로그램가능 판독 전용 메모리(EEPROM)) 및 플래시 메모리 디바이스들)를 포함하나 이에 한정되는 것은 아님); 내장 하드 디스크 및 이동식 디스크와 같은 자기 디스크; 광 자기 디스크; 및 CD-ROM 및 DVD-ROM 디스크를 포함한다.
다양한 실시예에 따른 NID(220)는 임의의 적합한 폼 팩터를 취할 수 있다. 이러한 일 실시예에서, NID(220)는 링크(208)를 통해 프로세서(202)와 인터페이스하는 네트워크 인터페이스 카드(NIC)의 형태이다. 일례에서, 링크(208)는 PCI 익스프레스(PCIe) 버스를 포함하고, 이는 NIC 폼 팩터가 제거 가능하게 결합될 수 있는 슬롯을 포함한다. 다른 실시예에서, NID(220)는 로컬 링크 회로, 프로세서 인터페이스 회로, 다른 입력/출력 회로, 메모리 회로, 저장 디바이스 및 주변 제어기 회로 등과 함께 마더보드 상에 레이아웃된 네트워크 인터페이스 회로이다. 다른 실시예에서, NID(220)는 범용 직렬 버스(USB) 포트와 같은 주변 입력/출력 포트를 통해 링크(208)와 인터페이스하는 주변장치이다. NID(220)는 유선 또는 무선(예를 들어, 무선 주파수, 적외선 또는 가시 광선 스펙트럼 등)이거나, 광섬유 등일 수 있는 전송 매체(226)를 통해 데이터를 송신 및 수신한다.
도 3a는 도 2에 도시된 것과 같은 컴퓨팅 디바이스의 예시적인 하드웨어 및 소프트웨어 아키텍처를 도시하는 다이어그램으로서, 하드웨어 구성요소와 소프트웨어 구성요소 사이에 다양한 인터페이스가 도시되어 있다. HW로 표시된 하드웨어 구성요소는 분할 선 아래에 표시되는 반면, SW로 표시된 소프트웨어 구성요소는 분할 선 위에 있다. 하드웨어 측면에서, 각각 하나 이상의 프로세서 코어를 갖는 하나 이상의 마이크로프로세서, 디지털 신호 프로세서 등을 포함할 수 있는 프로세싱 디바이스(302)는 메모리 관리 디바이스(304) 및 시스템 상호접속부(306)과 인터페이스된다. 메모리 관리 디바이스(304)는 실행 중인 프로세스에 의해 사용되는 가상 메모리와 물리적 메모리 사이의 매핑을 제공한다. 또한, 메모리 관리 디바이스(304)는 프로세싱 디바이스(302)를 포함하는 중앙 처리 장치의 통합 부분일 수 있다.
상호접속부(interconnect)(306)는 PCI, USB 등의 입력/출력 디바이스와의 인터페이스뿐만 아니라 메모리, 데이터 및 제어 라인과 같은 백플레인을 포함한다. 메모리(308)(예를 들어, 동적 랜덤 액세스 메모리 - DRAM) 및 플래시 메모리(예를 들어, EEPROM, NAND 플래시, NOR 플래시 등)와 같은 비휘발성 메모리(309)는 메모리 제어기(310)를 통해 메모리 관리 디바이스(304) 및 상호접속부(306)와 인터페이스한다. 이러한 아키텍처는 일부 실시예에서 주변장치에 의한 직접 메모리 액세스(DMA)를 지원할 수 있다. 비디오 및 오디오 어댑터, 비휘발성 스토리지, USB 및 블루투스 등과 같은 외부 주변장치 링크, Wi-Fi 또는 LTE 제품군 인터페이스를 통해 통신하는 것들과 같은 네트워크 인터페이스 디바이스를 포함하는 I/O 디바이스들이 I/O 디바이스 및 네트워킹(312)으로서 집합적으로 표현되며, 이는 대응하는 I/O 제어기(314)를 통해 상호접속부(306)와 인터페이스한다.
소프트웨어 측에서는, 초기 시스템 시동시 실행되고 운영 체제를 부팅할 역할을 하는 사전 운영 체제(pre-OS) 환경(316)을 포함한다. 사전 OS 환경(316)의 하나의 전형적인 예는 시스템 BIOS(basic input/output system)이다. 현재 시스템에서는 통합된 확장가능 펌웨어 인터페이스(UEFI)가 구현된다. 사전 OS 환경(316)은 운영 체제의 론칭을 시작할 역할을 담당하지만, 또한 본 발명의 소정 측면에 따라 내장된 애플리케이션을 위한 실행 환경을 제공하기도 한다.
운영 체제(OS)(318)는 하드웨어 디바이스를 제어하고, 메모리 내의 프로그램에 대한 메모리 액세스를 관리하며, 작업을 조정하고, 멀티태스킹을 용이하게 하는 커널을 제공하고; 저장될 데이터를 구성하며; 메모리 공간 및 기타 자원을 메모리에 할당하고; 프로그램 바이너리 코드를 메모리에 로딩하며; 사용자 및 하드웨어 디바이스와 상호 작용하는 애플리케이션 프로그램의 실행을 시작하고; 다양한 정의된 인터럽트를 검출 및 응답한다. 또한, 운영 체제(318)는 디바이스 드라이버를 제공하고, 주변장치 및 네트워킹과의 인터페이스를 용이하게 하는 것들과 같은 다양한 공통 서비스를 제공하는데, 이러한 서비스는 애플리케이션이 이러한 공통 동작의 세부 사항을 처리해야 할 필요가 없도록 애플리케이션 프로그램에 대한 추상화를 제공한다. 운영 체제(318)는 추가적으로 모니터, 키보드, 마우스, 마이크로폰, 비디오 카메라, 터치 스크린 등과 같은 주변 디바이스를 통한 사용자와의 상호 작용을 용이하게 하는 그래픽 사용자 인터페이스(GUI)를 제공한다.
런타임 시스템(320)은 기능 호출(function call) 이전에 스택 상에 파라미터를 두는 것과 같은 동작, 디스크 입력/출력(I/O)의 거동 및 병렬 실행 관련 거동을 포함하는 실행 모델의 일부를 구현한다. 런타임 시스템(320)은 또한 유형 체킹, 디버깅, 또는 코드 생성 및 최적화와 같은 지원 서비스를 수행할 수 있다.
라이브러리(322)는 애플리케이션 프로그램에 대한 추가 추상화를 제공하는 프로그램 기능들의 집합을 포함한다. 여기에는 예를 들어, 공유된 라이브러리, DLL(dynamic linked library) 등이 포함된다. 라이브러리(322)는 운영 체제(318), 런타임 시스템(320)에 통합될 수 있거나, 애드 온(added-on) 특징일 수도 있으며, 심지어 원격으로 호스팅될 수도 있다. 라이브러리(322)는 운영 체제(318)에 의해 제공되는 서비스를 호출하기 위해 애플리케이션 프로그램(324)에 의한 다양한 기능 호출이 이루어질 수 있게 하는 API(application interface program)를 정의한다. 애플리케이션 프로그램(324)은 컴퓨팅 디바이스 자체의 기본 운용성(basis operability)을 조정하는 하위 레벨 시스템 프로그램에 의해 수행되는 작업을 넘어 사용자에게 유용한 작업을 수행하는 프로그램이다.
도 3b는 일부 실시예에 따른 프로세싱 디바이스들(302)을 나타내는 블록도이다. 일 실시예에서, 나타낸 프로세싱 디바이스들(302) 중 2 이상은 공통 반도체 기판 상에 형성된다. CPU(340)는 하나 이상의 프로세싱 코어(342)를 포함할 수 있고, 이들 각각은 하나 이상의 산술 논리 유닛(ALU), 명령어 페치 유닛, 명령어 디코드 유닛, 제어 유닛, 레지스터, 데이터 스택 포인터, 프로그램 카운터 및 프로세서의 특정 아키텍처에 따른 다른 필수 컴포넌트를 각각 갖는다. 실례로서, CPU(340)는 x86 형 프로세서일 수 있다. 프로세싱 디바이스들(302)는 또한, 그래픽 프로세싱 장치(GPU)(344)를 포함할 수 있다. 이들 실시예에서, GPU(344)는 소정 계산 집약적 동작, 특히 그래픽 렌더링과 관련된 동작을 CPU(340)로부터 오프로드하는 특수 코 프로세서일 수 있다. 특히, CPU(340) 및 GPU(344)는 일반적으로 메모리 자원, I/O 채널 등에 대한 액세스를 공유하면서 협력적으로 동작한다.
프로세싱 디바이스들(302)는 또한 일부 실시예에서 관리 프로세서(caretaker)(346)를 포함할 수 있다. 관리 프로세서(346)는 일반적으로 CPU(340) 및 GPU(344)가 수행하는 소프트웨어 코드를 수행하기 위한 프로세싱 작업에 참여하지 않는다. 일부 실시예에서, 관리 프로세서(346)는 CPU(340) 및 GPU(344)와 메모리 공간을 공유하지 않으므로, 운영 체제 또는 애플리케이션 프로그램을 실행하도록 구성되지 않는다. 대신, 관리 프로세서(346)는 CPU(340), GPU(344) 및 컴퓨터 시스템의 다른 구성요소의 기술적 작업을 지원하는 전용 펌웨어를 실행할 수 있다. 일부 실시예에서, 관리 프로세서는 마이크로컨트롤러 디바이스로서 구현되며, 이는 CPU(340)와 동일한 집적 회로 다이 상에 물리적으로 존재할 수 있거나, 별개의 집적 회로 다이 상에 존재할 수 있다. 또한, 관리 프로세서(346)는 외부 엔티티와 통신할 수 있게 하는 전용 I/O 설비 세트를 포함할 수 있다. 한 유형의 실시예에서, 관리 프로세서(346)는 ME(manageability engine) 또는 PSP(platform security processor)를 사용하여 구현된다. 입력/출력(I/O) 제어기(348)는 시스템 상호접속부과 같은 외부 회로뿐만 아니라 다양한 프로세싱 디바이스(340, 344, 346) 간의 정보 흐름을 조정한다.
도 3c는 다양한 실시예에 따른 CPU(340)의 예시적인 컴포넌트를 나타내는 블록도이다. 도시된 바와 같이, CPU(340)는 하나 이상의 코어(352), 캐시(354) 및 CPU 제어기(340)를 포함하고, 이들은 코어(들)(352)의 상호 동작(interoperation) 및 태스킹을 조정하며, 또한 CPU의 다양한 내부 컴포넌트들 간의 데이터 흐름 및 메모리 버스 또는 시스템 상호접속부와 같은 외부 구성요소와의 데이터 흐름을 용이하게 하는 인터페이스를 제공하는 것을 조정한다. 일 실시예에서, CPU(340)의 모든 예시적인 구성요소는 공통의 반도체 기판 상에 형성된다.
CPU(340)는 초기화 엔진 및 마이크로 코드와 같은 기초 코드의 특정 부분을 저장하기 위한 비휘발성 메모리(358)(예를 들어, 플래시, EEPROM 등)를 포함한다. 또한, CPU(340)는 시스템 BIOS 또는 UEFI 코드와 같은 초기화 엔진에 의해 개시되는 기본 코드(foundational code)를 저장하는 외부(예컨대, 별개의 IC 상에 형성된) 비휘발성 메모리 디바이스(360)와 인터페이스할 수 있다.
여기에 기술된 예들은 일관성을 위해 엔진이라 불리는 로직 또는 다수의 컴포넌트, 회로, 모듈 또는 엔진 상에서 동작하거나, 이들을 포함할 수 있으나, 이들 용어는 상호교환적으로 사용될 수 있음이 이해될 것이다. 엔진은 여기에 설명된 동작을 수행하기 위해 하나 이상의 프로세서에 통신 가능하게 연결된 하드웨어, 소프트웨어 또는 펌웨어일 수 있다. 엔진은 하드웨어 엔진일 수 있으며 이러한 엔진은 지정된 작업을 수행할 수 있는 유형의(tangible) 엔티티로 간주될 수 있으며, 소정 방식으로 구성 또는 배열될 수 있다. 일례에서, 회로들은 엔진으로서 지정된 방식으로 (예를 들어, 내부적으로 또는 다른 회로들과 같은 외부 엔티티들에 관하여) 배열될 수 있다. 일례에서, 하나 이상의 하드웨어 프로세서의 전부 또는 일부는 지정된 동작을 수행하도록 동작하는 엔진으로서 펌웨어 또는 소프트웨어(예를 들어, 명령어, 애플리케이션 일부분 또는 애플리케이션)에 의해 구성될 수 있다. 일례에서, 소프트웨어는 머신 판독가능 매체 상에 상주할 수 있다. 일례에서, 소프트웨어는 엔진의 기본 하드웨어에 의해 실행될 때 하드웨어로 하여금 지정된 작업을 수행하게 한다. 따라서, 하드웨어 엔진이라는 용어는 유형의 엔티티를 포함하는 것으로 이해되며, 유형의 엔티티는 지정된 방식으로 동작하거나 여기에 설명된 임의의 동작의 일부 또는 전부를 수행하도록 물리적으로 구성되거나, 특정하여 구성(예를 들어, 하드 와이어드)되거나, 일시적으로(예를 들어, 순간적으로) 구성(예를 들어, 프로그래밍)되는 엔티티이다.
엔진이 일시적으로 구성되는 예를 고려하면, 각각의 엔진은 어느 한 순간에 인스턴스화될 필요는 없다. 예를 들어, 엔진이 소프트웨어를 사용하여 구성된 범용 하드웨어 프로세서 코어를 포함하는 경우, 범용 하드웨어 프로세서 코어는 상이한 시간에 각각 다른 엔진으로서 구성될 수 있다. 따라서 소프트웨어는 하드웨어 프로세서 코어를 구성하여, 예를 들어 시간의 한 인스턴스에서는 특정 엔진을 구성하고 다른 시간 인스턴스에서는 다른 엔진을 구성할 수 있다.
다양한 예들에 따르면, IoT 디바이스들은 예를 들어, OIC(Open Interconnect Consortium) Core Specification VI.1.1(2016))와 같은 OCF(Open Connectivity Foundation)에 의해 공포된 표준들을 따른다. 코어 사양(Core Specification) 문서는 IoT 사용 및 생태계에 대한 OCF 프로파일 구현을 가능하게 하는 프레임워크, 즉 OCF 코어 아키텍처, 인터페이스, 프로토콜 및 서비스를 규정한다. 일반적 원칙으로서, 물리적 세계 내의 엔티티(예를 들어, 온도 센서, 전기 조명 또는 가전 기기)는 자원으로서 표현된다. 엔티티와의 상호 작용은 REST(Representational State Transfer) 아키텍처 스타일(예: RESTful 상호 작용)을 준수하는 동작을 사용하여 엔티티의 자원 표현을 통해 달성된다.
아키텍처는 정보 시스템으로서의 프레임워크의 전반적인 구조 및 OCF를 구성하는 엔티티의 상호 관계를 정의한다. 엔티티는 자원으로서 자신의 고유 식별자(URI)와 함께 노출되며, 자원에 대한 RESTful 동작을 가능하게 하는 인터페이스를 지원한다. 모든 RESTful 동작에는 동작의 개시자(클라이언트 역할이라고도 함)와 동작에 대한 응답자(서버 역할이라고도 함)가 있다.
프레임워크에서, 클라이언트 및 서버의 개념은 역할을 통해 실현된다. 모든 디바이스는 클라이언트로서의 역할을 할 수 있고 서버로서의 역할을 하는 모든 디바이스에서 RESTful 동작을 시작할 수 있다. 마찬가지로 자원으로서 엔티티를 노출하는 모든 디바이스는 서버 역할을 한다. REST 아키텍처 스타일을 준수하여, 각 RESTful 동작에는 상호 작용의 컨텍스트를 나타내는 모든 정보가 포함되어 있으며 CRUDN(Create, Read, Update, Delete, Notify)과 같은 자원의 표현을 포함하는 스몰 세트의 일반 동작을 사용하여 구동된다.
아키텍처는 전체적인 관심 분야를 제공하는 세 가지 주요 측면, 즉 자원 모델, RESTful 동작 및 추상화로 개념적으로 구성된다. 자원 모델은 애플리케이션 및 해당 환경을 논리적으로 모델링하고 논리적으로 동작시키기 위한 추상화 및 개념을 제공한다. 코어 자원 모델은 스마트 홈, 산업 또는 자동차와 같은 어떠한 특정 응용 분야 도메인에도 공통적이며, 구속되지 않는다(agnostic). 예를 들어, 자원 모델은 엔티티를 추상화하는 자원을 정의하고 자원 표현은 엔티티의 상태를 매핑한다. 다른 자원 모델 개념을 사용하여 다른 측면(예: 거동(behavior))을 모델링할 수 있다. 일반적인 CRUDN 동작은 RESTful 패러다임을 사용하여 프로토콜 및 기술 에 구속되지 않는 방식으로 자원과의 상호 작용을 모델링하도록 정의된다.
자원 모델 및 RESTful 동작에서의 추상화는 추상화 프리미티브(abstraction primitives)를 사용하여 구체적인 요소에 매핑된다. 엔터티 핸들러는 엔터티를 자원에 매핑하는 데 사용되고 연결 추상화 프리미티브는 논리적 RESTful 동작을 데이터 연결 프로토콜 또는 기술에 매핑하는 데 사용된다. 또한, 엔티티 핸들러는 OCF에서 기본적으로 지원하지 않는 프로토콜을 통해 도달한 엔티티에 자원을 매핑하는 데 사용될 수 있다.
도 4a는 일부 실시예에 따른 하이 레벨의 추상화에서의 예시적인 IoT 디바이스 아키텍처를 나타내는 다이어그램이다. 도시된 바와 같이, IoT 디바이스(400)는 통신 설비(402), 코어 자원(404), 엔티티 자원(406) 및 트랜잭션 자원(408)을 포함한다. 통신 설비(402)는 하드웨어 및 디바이스(400)와 피어 디바이스 간의 메시지 교환을 용이하게 하는 하드웨어 상에서 실행 가능한 명령어를 포함한다. 통신 설비(402)는 무선 또는 유선 네트워킹 아키텍처(예를 들어, WiFi, LTE(Long-term Evolution), 블루투스와 같은 PAN(personal-area networking), Zigbee와 같은 홈 영역 네트워킹 등과, Ethernet, Fieldbus 등과 같은 유선 네트워킹 아키텍처와 함께 하드웨어 동작을 용이하게 하는 대응 펌웨어 및 소프트웨어 드라이버)를 포함할 수 있다.
코어 자원(404)은 자원 디스커버리, 디바이스 관리, GET 동작, PUT 동작, OBSERVE 동작 등과 같은 기능적 상호 작용을 가능하게 하는 정의된 자원 세트를 포함한다. 코어 자원(404)은 방화벽 기능과 같은 다양한 보안 정책을 구현하는 자원 액세스 관리자를 포함할 수 있다.
엔티티 자원(406)은 데이터 저장 디바이스, 데이터 캡처 디바이스, 컴퓨팅 플랫폼, 센서, 액추에이터 등과 같은 하나 이상의 데이터 소스 또는 데이터 싱크(예를 들어, 데이터 작성자 또는 데이터 소비자)를 나타낸다. 일반적으로, 엔티티 자원(406)은 디바이스(400)가 액세스될 때 요구되는 운용성을 포함한다. 엔티티 자원(406)은 또한 피어 디바이스의 엔티티 자원으로부터 정보를 얻거나 정보 또는 커맨드를 보내려는 애플리케이션 프로그램을 포함할 수 있다.
일부 실시예에 따르면, 트랜잭션 자원(408)은 공통 목적 또는 결과를 달성하기 위해 다수의 관련된 메시지의 시퀀스가 통신될 수 있는 트랜잭션을 처리하기 위한 자원을 포함하며, 여기서 하나 이상의 중간 상태 변경은 주어진 트랜잭션의 시작과 종결 사이에서 발생한다. 도 4b는 일부 실시예에 따라 트랜잭션 자원(408)에 포함되는 예시적인 구성요소 세트를 도시한다. 트랜잭션 자원(408)은 현재의 인트라-트랙잭션 임시 상태를 나타내는 트랜잭션 상태 머신(412), 트랜잭션의 성공적인 종결시에 지속 상태 변경을 시행하는 커밋 핸들러(414) 및 트랜잭션 실패에 응답하여 트랜잭션을 중단하고 임의의 사전 커밋된 중간 상태를 정리(clear out)하는 클린업 핸들러(416)를 포함한다. 또한, 트랜잭션 통신기(418)가 피어 디바이스의 트랜잭션 자원과의 인트라-트랜잭션 통신을 수행하기 위해 포함된다.
관련된 실시예에서, 트랜잭션 자원(408)은 메시지들 및 허용된 내부 트랜잭션 상태들을 포함하는 대응하는 트랜잭션 유형의 프로세스 흐름을 각각 나타내는, 피어 디바이스들에 의해 발견 가능한 하나 이상의 발견 가능한 상태 그래프 데이터 구조(420)를 포함하며, 이들은 IoT 디바이스(400)에 의해 지원된다. 다른 관련 실시예에서, 트랜잭션 자원(408)은 지원되는 트랜잭션 메시지 자원의 콜렉션(422)을 포함한다.
예로서, 트랜잭션 자원들(408)은 다음 특성들 및 속성들을 포함할 수 있다:
ㆍ자원 속성
ㆍ자원 유형 : "rt"= "ocf.tx. <tx_name>
ㆍ검색 가능 : 예 - 피어 디바이스가 트랜잭션을 시작하게 함.
ㆍ인터페이스 : "baseline"- CR-N(관찰)
ㆍ자원 등록 정보
ㆍ"txs"- 트랜잭션의 현재 상태
ㆍ"txg"- 도달 가능한 상태와 이행(transitions)을 정의하는 그래프
ㆍ"txi"- Tx 인스턴스 식별자
ㆍ"txh"- 교환된 Tx 메시지의 해시
ㆍ"txc"- 트랜잭션 메시지 자원에 대한 참조가 있는 컬렉션 자원.
일례에서, 인트라-트랙잭션 상태 변경은 하나 이상의 피어 디바이스 간의 RESTful 메시지 교환을 통해 달성된다. 메시지 인코딩은 주어진 트랜잭션에서 정의된 다양한 상태에 따라 달라질 수 있다. 따라서, IoT 코어 층은 트랜잭션 자원 또는 트랜잭션 통신기에 포함된 로직에 영향을 미치지 않고 메시지 전달(예를 들어, 요청/응답, pub/sub, 이벤트/통지 등과 같은 복수의 메시징 모델을 혼합하는 것)을 최적화할 수 있다.
도 5는 일 실시예에 따른 예시적인 상태 그래프 데이터 구조들(420)을 도시하는 다이어그램이다. 도시된 바와 같이, 시작 상태는 개시 INIT 및 응답 RESP 상태를 포함할 수 있다. 트랜잭션을 수행하기 위한 프로토콜 상태는 도시된 바와 같이 메시지 MSG-A-MSG-X를 포함할 수 있다. 오류 상태에는 RESTART 및 ABORT 상태가 포함되며 성공 상태에는 DONE이 포함된다.
진행이 달성되는 것을 보장하기 위해 이 예에서 프로토콜 상태 종속성(dependencies)은 비 순환형(non-circular)이다. 응답자는 통지 응답을 트리거하는 상태 값(들)을 지정하는, 개시자(Initiator)의 Tx 자원의 상태 특성을 관찰할 수 있다. 예를 들어, MSG-A 메시지를 게시(posting)한 후에 MSG-B 상태를 관찰하면 응답자(responder)가 MSG-A를 처리하는 데 오랜 시간이 걸릴 수 있다. 개시자는 응답자가 MSG-B를 게시할 준비가 되었을 때 응답자로부터 웨이크 업 또는 활동을 듣기 위한 통지를 수신할 것이라는 것을 알면 다른 작업을 하거나 슬립 상태로 돌아갈 수 있다.
통지는 또한 트랜잭션을 수행하도록 할당된 컴퓨팅 자원을 자유롭게 하는 것이 적절한 경우를 신호로 알리는 데 사용될 수 있다. 예를 들어, DONE 또는 ABORT 통지를 사용하면 디바이스에서 메시지 버퍼 및 임시 파일을 포함하는 데 사용되는 메모리를 비우게 할 수 있다. 상태 특성을 관찰하는 이유가 무엇이든 간에 트랜잭션 통신기는 유효한 메시지 시퀀스가 처리되도록 할 수 있다.
도 6은 일례에 따른 트랜잭션 메시지 컬렉션(422)을 도시하는 다이어그램이다. 도시된 바와 같이, 트랜잭션 자원(TX RSRC)은 트랜잭션 진행 동안 교환될 객체들을 기술하는 메시지 자원들(MSG-A_RSRC=MSG-C_RSRC)의 리스트를 포함하는 컬렉션 특성을 포함한다.
도 7은 OCF/IoTivity와 같은 IoT 프레임워크를 이용하는 일 실시예에 따른 IoT 디바이스의 트랜잭션 자원을 나타내는 블록도이다. 이 예에서, 디바이스(700)는 개시자 역할(702) 및 응답자 역할(704)에 대한 트랜잭션 자원 규정(transaction resources provisions)을 갖는 것으로 도시된다. 전술한 바와 같이, 개시자 및 응답자 역할은 트랜잭션 통신 및 메시지 처리 중에 종종 교대로 동일한 디바이스에 의해 수행될 수 있다. 개시자 역할(702)을 수행하기 위해, 트랜잭션 통신기(706)가 제공된다. 트랜잭션 통신기(706)는 피어 디바이스(게시된 메시지를 수신하기 위한 응답자 역할로서 구성될 것임)의 트랜잭션 통신기로 향하는 메시지의 게시를 수행한다. 트랜잭션 통신기(706)는 트랜잭션의 진행 동안의 적절한 상태 시퀀스를 나타내는 상태 그래프(710) 및 현재 상태를 나타내는 트랜잭션 상태 머신(712)에 의해 통지된다. 상태 그래프(710)는 트랜잭션 통신기(706)에 의해 송신될 액션(예를 들어, 메시지 유형)을 나타내는 반면 트랜잭션 상태 머신(712)은 언제 액션이 취해질 지 또는 액션이 취해질 것인지 여부를 나타낸다.
또한, 응답자 역할(704)에는 디바이스(700), 클린업 핸들러(716) 및 커밋 핸들러(718)에 의해 지원되는 트랜잭션과 연관된 메시지들의 세트를 포함하는 트랜잭션 메시지 컬렉션(708)이 예시된다. 응답자 역할(704)의 트랜잭션 자원들은 다양한 메시지를 수신하고 그에 응답한다. 도시된 예에서, DISCOVER, OBSERVE, PUT 및 POST 메시지가 수신되고 처리될 수 있다. 도시된 바와 같이, 디바이스(700)는 트랜잭션을 시작하기 위해 자신의 개시자 역할로 동작하도록 외부적으로 프로그램될 수 있다.
트랜잭션 자원은 센서(722), 액추에이터(724), 및 데이터 스토어(726)를 포함할 수 있다. 도시된 바와 같이, 트랜잭션 자원은 커밋 핸들러(718)를 통해 엔티티(720)의 자원에 액세스하는데, 이는 디바이스(700)의 지속 상태 변경을 요구하는 역할을 수행한다.
도 8은 각각 각자의 트랜잭션 자원을 이용하는 2 개의 IoT 디바이스들 간의 예시적인 트랜잭션의 진행을 나타내는 흐름도이다. 도시된 바와 같이, 개시자 디바이스는 트랜잭션 자원(802)을 가지며, 응답자 디바이스는 트랜잭션 자원(802)에 대응하는 트랜잭션 자원(804)을 갖는다. 이 예에서, 개시자 및 응답자 디바이스가 매칭되는 트랜잭션 자원을 갖는다는 사실은 트랜잭션을 수행할 디바이스의 능력에 대한 전제 조건이다. 관련된 실시예에서, 개시자 디바이스는 응답자 디바이스가 트랜잭션에 필요한 자원을 소유하고 있는지를 체크하기 위해 지원되는 발견 또는 질의 프로토콜을 이전에 사용했을 수 있다.
트랜잭션은 개시자 디바이스가 메시지 A 자원(MSG-A RSRC)을 게시하는 단계(806)로 시작한다. 응답자는 응답 코드(RESP CODE)로 응답하고, 단계(808)에서 메시지 A를 처리한다. 단계(810)에서, 응답자는 개시자가 응답 코드(RESP CODE)로 응답하는 메시지 B를 게시한다. 단계(812)에서, 개시자 디바이스는 메시지 B를 처리한다. 그 후, 트랜잭션의 미리 정의된 프로토콜에 따라, 개시자는 응답 디바이스가 응답 코드로 응답하는 메시지 C를 단계(814)에서 게시하고, 단계(816)에서 수신된 메시지 C를 처리한다.
이 예에서 메시지(A-C)는 미리 정의된 방식으로 트랜잭션이 진행되도록 보장하는 상태 특성에 의해 제어되는 RESTful 메시지 교환이다. 메시지의 각 수신자가 이어서 보낸 응답 코드는 트랜잭션 프로토콜의 순방향 진행 상태를 나타낸다. 응답 코드의 수신이 없는 경우, 전송 디바이스는 일정 시간 후에 재시도하거나, 예를 들어, 소정 횟수의 재시도 실패 후에 트랜잭션을 중단할 수 있다.
메시지 C의 프로세싱이 완료되면, 응답 디바이스는 단계(818)에서 OBSERVE 동작을 수행하여 완료 상태(DONE)를 검사할 수 있다. 이 경우 개시자 디바이스는 응답자 디바이스가 관찰할 수 있는 DONE 상태 통지를 제공한다. 트랜잭션의 성공적인 완료에 응답하여, 각 디바이스는 트랜잭션의 완료를 반영하여 자신의 지속 상태를 갱신할 수 있다. 따라서, 단계(822)에서 응답자 디바이스는 자신의 지속 상태를 업데이트함으로써 트랜잭션을 커밋한다. 마찬가지로, 단계(824)에서, 개시자 디바이스는 그에 따라 자신의 지속 상태를 업데이트함으로써 트랜잭션을 커밋한다. 트랜잭션이 실패한 경우, 두 디바이스 모두 지속 상태 변경이 이루어지지 않는다.
도 9는 일부 실시예의 원리를 이용하는 한 쌍의 IoT 디바이스들 간의 예시적인 상호 작용을 도시하는 시스템 아키텍처 및 데이터 흐름도이다. 디바이스 A(900) 및 디바이스 B(920)는 엔티티 자원 ER1(902) 및 ER2(922) 및 각각의 트랜잭션 상태 머신(904 및 924), 트랜잭션 상태 그래프(906 및 926), 및 트랜잭션 통신기(908 및 928)를 포함하는 트랜잭션 자원 TR1 및 TR2로 각각 구성된다. 디바이스들의 코어 자원들은 디바이스 A(900)에 대한 자원 액세스 관리자(910) 및 디바이스 B(920)에 대한 자원 액세스 관리자를 포함한다. 각각의 디바이스는 또한, 912 및 932에 각각 나타낸 통신 설비를 포함한다. 도시된 예에서, 디바이스 B(920)는 또한 후속하는 동작 사용 케이스에서 엔티티 자원(ER1)(902)에 액세스하기 위한 트랜잭션을 개시하는 애플리케이션(918)을 포함한다.
도시된 바와 같이, 자원 액세스 관리자(910)는 디바이스 B(920)로부터 엔티티 자원 ER1(902)으로의 직접 액세스를 거부하지만 디바이스 B(920)가 트랜잭션 자원 TR1에 액세스하는 것은 허용하는 액세스 제어 엔트리를 포함한다. 따라서, 동작시, 애플리케이션(918)으로부터 엔티티 자원 ER1(902)을 향하는 상호 작용 A는 자원 액세스 관리자(910)에 의해 차단된다.
그러나, 애플리케이션(918)에서 시작하여 디바이스 A(900)의 트랜잭션 자원 TR1을 향하는 상호 작용 B는 자원 액세스 관리자(910)에 의해 허용된다. 상호 작용 B는 예를 들어, 디바이스 A(900) 또는 더 구체적으로는, 트랜잭션 자원 TR1이 디바이스 B에 의해 의도된 트랜잭션과 일치하는 트랜잭션 구성(예를 들어, 메시지 컬렉션, 상태 그래프)을 포함하는지를 조사하는 DISCOVER 요청일 수 있다. 디바이스 A가 적절한 트랜잭션 자원 세트를 갖는 것에 응답하여, 트랜잭션 자원 TR1 및 TR2는 트랜잭션 통신기(908 및 928)를 통해 각각 TX 상태 그래프(906 및 926)에 따라 메시지를 교환한다. 트랜잭션 상태 머신(904 및 924)은 적절한 시퀀스의 상이한 메시지를 포함할 수 있는 상호 작용 C 및 D에서 그들의 구성된 유한 상태 오토마톤(atotomata)을 통해 진행한다. 트랜잭션 상태 머신(904 및 924)은 현재 트랜잭션의 경계 내에서 임시 상태(ephemeral state)를 유지한다. 트랜잭션의 성공적인 종료시, 엔티티 자원 ER1(902)은 E에서 갱신되어 트랜잭션을 커밋하기 위해 지속 상태 변경을 시작한다. 트랜잭션이 실패한다면 E에서 지속 상태 변경이 이루어지지 않을 것이다.
다른 실시예에 따르면, 트랜잭션 자원을 갖는 다수의 IoT 디바이스는 분산 시퀀싱 제어를 갖는 워크플로우 프로세스를 구현하도록 구성된다. 트랜잭션 자원의 일부로 구성된 워크플로우 프로세스 오케스트레이션 엔진은 워크플로우 프로세스 모델을 설명하고, 개개의 노드 디바이스에 따라 모델을 분할하여 임의의 두 워크플로우 이웃 간의 워크플로우 동작이 트랜잭션을 형성하도록 한다. 워크플로우 노드는 A-to-B 트랜잭션의 결과가 B-to-C 트랜잭션에 공급될 수 있도록 트랜잭션 자원의 두 인스턴스를 유지 관리한다.
관련된 실시예에 따르면, 트랜잭션 자원은 제 2 자원의 자원 유형이 트랜잭션 자원의 자원 유형 값에 포함되도록 트랜잭션 자원의 파생 유형으로서 제 2 자원을 정의하는 템플릿을 포함한다. 예를 들어, 트랜잭션 자원이 "rt"= "ocf.r.tx" 유형 지정을 갖는 경우 두 번째 파생 자원(dr) 유형은 "rt"= "ocf.r.tx.dr"로 지정될 수 있다.
일례에서, 템플릿 파생부의 의미론(semantics)은, 템플릿에 의해 정의된 모든 특성이 파생 자원에 의해 원래 정의된 것처럼 파생 자원에서 이용 가능하도록 하는 것이다. 이러한 접근법은 템플릿 자원의 실현이 단일 자원 인스턴스를 갖다는 점에서 제 2 자원을 참조하는 제 1 자원과 다를 수 있으나, 제 2 자원을 참조하는 제 1 자원은 2 개의 자원 인스턴스를 갖는다.
파생 자원이 템플릿 자원에 의해 명명된 특성과 동일하게 명명된 특성을 정의하는 경우, 자원 템플릿 의미론은 속성 오버로딩을 갖도록 추가로 정의될 수 있다. 템플릿에 의해 정의된 데이터 구조는 파생 자원을 내부관찰(introspect)하려고 시도하는 개시자 디바이스로부터 숨겨질 수 있다. 그럼에도, 파생 자원은 로컬화된 참조를 사용하여 템플릿 정의 특성을 참조할 수 있다. 예컨대 템플릿 자원이 "tx 1" 특성을 정의하고 파생 자원이 또한 "tx 1" 특성을 정의하는 경우, 자원 명칭이 특성 명칭(예: "tx_tx 1")의 앞에 붙도록 명칭 맹글링(name mangling)을 사용하여 로컬 참조가 구성될 수 있다. 맹글링된 특성은 예를 들어, 로컬 참조만 구성될 수 있도록 "-----"의 CRUDN 권한을 갖는다.
바람직하게는, 특성 명칭의 오버로딩에서, 특성의 시간 속성(temporality)은 가변적일 수 있다. 이는 숨겨진 특성 값이 변하지 않고 유지되도록 할 수 있다(예를 들어, 새로운 상태가 트랜잭션 프로토콜에 의해 협상되는 동안 그 상태가 지속될 수 있음). 프로토콜이 커밋되거나 롤백되면 새로운 상태가 빠르게 설정될 수 있다. 이것은 보다 안전한 동작을 용이하게 한다.
특성 오버로딩은 또한, 교환 중에 민감한 특성 값이 숨겨질 수 있는 경우 숨겨진 특성 값을 공개하지 않기로 결정할 수 있는 특정 보안 및 개인 정보 보호 혜택을 제공한다. 따라서 민감한 값은 협상 단계에서 공개될 위험이 없다. 보안 정책은 FSA가 커밋할 때까지 덜 민감한 값으로 대체할 것을 요구할 수도 있다.
추가 참고 사항 및 예:
예 1은 통신 디바이스로서, 프로세서, 데이터 스토어 및 통신 설비를 포함하는 컴퓨팅 플랫폼; 데이터를 생성하거나 소비하는 엔티티 자원; 엔티티 자원과 연관된 원격 디바이스와의 무상태 메시징(stateless messaging)을 용이하게 하는 코어 자원; 및 엔티티 자원과 관련된 메시지들의 시퀀스를 포함하는 상기 원격 디바이스와의 트랜잭션을 관리하기 위한 트랜잭션 자원을 구현하고, 트랜잭션 자원은, 트랜잭션의 진행을 나타내는 복수의 인트라-트랜잭션 임시 상태들 중에서 현재의 인트라-트랜잭션 임시 상태를 나타내는 트랜잭션 상태 머신; 트랜잭션의 성공적인 완료에 응답하여 엔티티 자원과 관련된 지속 상태 변경을 개시시키는 커밋 핸들러; 및 코어 자원을 통해 원격 디바이스의 대응 트랜잭션 자원을 향하는 인트라-트랜잭션 통신을 수행하기 위한 트랜잭션 통신기를 포함한다.
예 2에서, 예 1의 발명 대상은 선택적으로 디바이스가 IoT(Internet-of-Things) 디바이스인 것을 포함한다.
예 3에서, 예 1 및 예 2의 임의의 하나 이상의 발명 대상은 선택적으로, 디바이스가 OIC(Open Interconnect Consortium) 핵심 사양 VI.1.1.1을 따르는 것을 포함한다.
예 4에서, 예 1 내지 예 3 중 임의의 하나 이상의 발명 대상은 선택적으로 무상태 메시징이 RESTful 메시징을 포함하는 것을 포함한다.
예 5에서, 예 1 내지 예 4 중 임의의 하나 이상의 발명 대상은 선택적으로, 트랜잭션을 중단하고 트랜잭션의 실패에 응답하여 모든 잔여 임시 상태 표시를 제거하는 클린업 핸들러를 포함한다.
예 6에서, 예 1 내지 예 5 중 임의의 하나 이상의 발명 대상은 선택적으로, 코어 자원이 자원 디스커버리, 디바이스 관리, GET 동작, PUT 동작, OBSERVE 동작, 또는 이들의 임의의 조합으로 이루어진 그룹으로부터 선택된 기능 상호 작용을 가능하게하는 정의된 자원 세트를 포함하는 것을 포함할 수 있다.
예 7에서, 예 1 내지 예 6 중 임의의 하나 이상의 발명 대상은 선택적으로 코어 자원이 엔티티 자원에 대한 직접 액세스는 제한하지만 트랜잭션 자원을 통한 엔티티에 대한 액세스는 허용하는 보안 정책을 구현하는 자원 액세스 관리자를 포함하는 것을 포함한다.
예 8에서, 예 1 내지 예 7 중 임의의 하나 이상의 발명 대상은 선택적으로, 트랜잭션 자원이 임시 상태들의 시퀀스로서 트랜잭션의 프로세스 흐름을 나타내는 상태 그래프 데이터 구조를 포함하는 것을 포함한다.
예 9에서, 예 8의 발명 대상은 선택적으로 상태 그래프 데이터 구조가 원격 디바이스에 의해 발견 가능한 것을 포함한다.
예 10에서, 예 1 내지 예 9 중 임의의 하나 이상의 발명 대상은 선택적으로 트랜잭션 자원이 트랜잭션과 연관된 트랜잭션 메시지 자원을 나타내는 컬렉션 자원을 포함하는 것을 포함한다.
예 11에서, 예 10의 발명 대상은 선택적으로 컬렉션 자원이 원격 디바이스에 의해 발견 가능한 것을 포함한다.
예 12에서, 예 1 내지 예 11 중 임의의 하나 이상의 발명 대상은 선택적으로, 엔티티 자원이 트랜잭션을 개시하고 트랜잭션의 성공적인 완료에 응답하여 지속 상태 변경을 겪는 애플리케이션 자원을 포함하는 것을 포함한다.
예 13에서, 예 1 내지 예 12 중 임의의 하나 이상의 발명 대상은 선택적으로 엔티티 자원이 센서, 액추에이터, 데이터 스토어로 구성되는 그룹으로부터 선택된 적어도 하나의 데이터 소스를 포함하는 것을 포함한다.
예 14는 통신 디바이스를 동작시키는 방법으로서, 데이터를 생성 또는 소비하는 엔티티 자원과 인터페이스하는 단계; 엔티티 자원과 연관된 무상태 메시징을 원격 디바이스와 통신하는 단계; 엔티티 자원과 연관된 메시지들의 시퀀스를 포함하는 원격 디바이스와의 트랜잭션을 관리하는 단계를 포함하고, 트랜잭션을 관리하는 단계는, 트랜잭션의 진행을 나타내는 복수의 인트라-트랜잭션 임시 상태들로부터 현재의 인트라-트랜잭션 임시 상태를 나타내는 단계; 트랜잭션의 성공적인 완료에 응답하여 엔티티 자원과 관련된 지속 상태 변경을 개시하는 단계; 및 코어 자원을 통해 원격 디바이스의 대응 트랜잭션 자원을 향하는 인트라-트랙잭션 통신을 수행하는 단계를 포함한다.
예 15에서, 예 14의 발명 대상은 선택적으로 통신 디바이스가 IoT(Internet-of-Things) 디바이스인 것을 포함한다.
예 16에서, 예 14 및 예 15 중 임의의 하나 이상의 발명 대상은 선택적으로, 디바이스가 OIC(Open Interconnect Consortium) 핵심 사양 VI.1.1.1을 따르는 것을 포함한다.
예 17에서, 예 14 내지 예 16 중 임의의 하나 이상의 발명 대상은 선택적으로, 무상태 메시징이 RESTful 메시징을 포함하는 것을 포함한다.
예 18에서, 예 14 내지 예 17 중 임의의 하나 이상의 발명 대상은 선택적으로 트랜잭션을 중단하고 트랜잭션의 실패에 응답하여 모든 잔여 임시 상태 표시를 제거하는 것을 포함한다.
예 19에서, 예 14 내지 예 18 중 임의의 하나 이상의 발명 대상은 선택적으로, 무상태 메시징이 자원 디스커버리, 디바이스 관리, GET 동작, PUT 동작, OBSERVE 동작, 또는 이들의 임의 조합으로 구성된 그룹으로부터 선택된 기능 상호 작용을 용이하게 하는 것을 포함할 수 있다.
예 20에서, 예 14 내지 예 19 중 임의의 하나 이상의 발명 대상은 선택적으로 엔티티 자원에 대한 직접 액세스는 제한하지만 트랜잭션 자원을 통한 엔티티 자원에 대한 액세스는 허용하는 보안 정책을 구현하는 것을 포함한다.
예 21에서, 예 14 내지 예 20 중 임의의 하나 이상의 발명 대상은 선택적으로, 트랜잭션을 관리하는 단계가 임시 상태의 시퀀스로서 트랜잭션의 프로세스 흐름을 나타내는 상태 그래프 데이터 구조를 저장하는 단계를 포함하는 것을 포함한다.
예 22에서, 예 21의 발명 대상은 선택적으로 상태 그래프 데이터 구조가 원격 디바이스에 의해 발견 가능한 것을 포함한다.
예 23에서, 예 14 내지 예 22 중 임의의 하나 이상의 발명 대상은 선택적으로, 트랜잭션을 관리하는 단계가 트랜잭션과 연관된 트랜잭션 메시지 자원을 나타내는 컬렉션 자원을 저장하는 단계를 포함하는 것을 포함한다.
예 24에서, 예 23의 발명 대상은 선택적으로 컬렉션 자원이 원격 디바이스에 의해 발견 가능한 것을 포함한다.
예 25에서, 예 14 내지 예 24 중 임의의 하나 이상의 발명 대상은 엔티티 자원이 트랜잭션을 개시하고 트랜잭션의 성공적인 완료에 응답하여 지속 상태 변경을 겪는 애플리케이션 자원을 포함하는 것을 포함한다.
예 26에서, 예 14 내지 예 25 중 임의의 하나 이상의 발명 대상은 선택적으로, 엔티티 자원이 센서, 액추에이터, 데이터 스토어로 구성되는 그룹으로부터 선택된 적어도 하나의 데이터 소스를 포함하는 것을 포함한다.
예 27은 통신 디바이스에서 실행될 때 통신 디바이스가 예 14 내지 예 27 중 어느 하나에 따른 방법을 수행하게 하는 명령어를 포함하는 적어도 하나의 머신 판독가능 매체이다.
예 28은 예 14 내지 예 27 중 어느 하나에 따른 방법을 수행하기 위한 수단을 포함하는 통신 시스템 디바이스이다.
예 29는 통신 디바이스의 컴퓨팅 플랫폼상에서 실행될 때 통신 디바이스로 하여금 다음을 포함하는 동작들을 수행하게 하는 명령어들을 포함하는 적어도 하나의 머신 판독가능 매체이며, 동작들은: 데이터를 생성하거나 소비하는 엔티티 자원과 인터페이스하는 것; 엔티티 자원과 연관된 무상태 메시징을 원격 디바이스와 통신하는 것; 및 엔티티 자원과 연관된 메시지들의 시퀀스를 포함하는 원격 디바이스와의 트랜잭션을 관리하는 것을 포함하고, 트랜잭션을 관리하는 것은, 트랜잭션의 진행을 나타내는 복수의 인트라-트랜잭션 임시 상태들로부터 현재의 인트라-트랜잭션 임시 상태를 나타내는 것; 트랜잭션의 성공적인 완료에 응답하여 엔티티 자원과 관련된 지속 상태 변경을 개시하는 것; 및 코어 자원을 통해 원격 디바이스의 대응 트랜잭션 자원을 향하는 인트라-트랙잭션 통신을 수행하는 것을 포함한다.
예 30에서, 예 29의 발명 대상은 선택적으로 통신 디바이스가 IoT(Internet-of-Things) 디바이스인 것을 포함한다.
예 31에서, 예 29 내지 예 30 중 임의의 하나 이상의 발명 대상은 선택적으로, 디바이스가 OIC(Open Interconnect Consortium) 핵심 사양 VI.1.1.1을 따르는 것을 포함한다.
예 32에서, 예 29 내지 예 31 중 임의의 하나 이상의 발명 대상은 선택적으로, 무상태 메시징이 RESTful 메시징을 포함하는 것을 포함한다.
예 33에서, 예 29 내지 예 32 중 임의의 하나 이상의 발명 대상은 선택적으로 통신 디바이스로 하여금 트랜잭션을 중단시키고 트랜잭션의 실패에 응답하여 모든 잔여 임시 상태 표시를 제거하도록 하는 명령어를 포함한다.
예 34에서, 예 29 내지 예 33 중 임의의 하나 이상의 발명 대상은 선택적으로, 무상태 메시징이 자원 디스커버리, 디바이스 관리, GET 동작, PUT 동작, OBSERVE 동작, 또는 이들의 임의 조합으로 구성된 그룹으로부터 선택된 기능 상호 작용을 용이하게 하는 것을 포함할 수 있다.
예 35에서, 예 29 내지 예 34 중 임의의 하나 이상의 발명 대상은 선택적으로, 엔티티 자원으로의 직접 액세스는 제한하지만 트랜잭션 자원을 통한 엔티티 자원으로의 액세스는 허용하는 보안 정책을 구현하기 위한 명령어를 포함한다.
예 36에서, 예 29 내지 예 35 중 임의의 하나 이상의 발명 대상은 선택적으로, 트랜잭션을 관리하는 것이 임시 상태들의 시퀀스로서 트랜잭션의 프로세스 흐름을 나타내는 상태 그래프 데이터 구조를 저장하는 것을 포함하는 것을 포함한다.
예 37에서, 예 36의 발명 대상은 선택적으로 상태 그래프 데이터 구조가 원격 디바이스에 의해 발견 가능한 것을 포함한다.
예 38에서, 예 29 내지 예 37 중 임의의 하나 이상의 발명 대상은 선택적으로 트랜잭션을 관리하는 것은 트랜잭션과 연관된 트랜잭션 메시지 자원을 나타내는 컬렉션 자원을 저장하는 것을 포함하는 것을 포함한다.
예 39에서, 예 38의 발명 대상은 컬렉션 자원이 원격 디바이스에 의해 발견 가능한 것을 선택적으로 포함한다.
예 40에서, 예 29 내지 예 39 중 임의의 하나 이상의 발명 대상은 선택적으로, 엔티티 자원이 트랜잭션을 개시하고 트랜잭션의 성공적인 완료에 응답하여 지속 상태 변경을 겪는 애플리케이션 자원을 포함하는 것을 포함한다.
예 41에서, 예 29 내지 예 40 중 임의의 하나 이상의 발명 대상은 선택적으로, 엔티티 자원이 센서, 액추에이터, 데이터 스토어로 구성되는 그룹으로부터 선택된 적어도 하나의 데이터 소스를 포함하는 것을 포함한다.
예 42는 통신 디바이스를 위한 시스템으로서, 데이터를 생성 또는 소비하는 엔티티 자원과 인터페이스하기 위한 수단; 엔티티 자원과 연관된 무상태 메시징을 원격 디바이스와 통신하기 위한 수단; 및 엔티티 자원과 연관된 메시지들의 시퀀스를 포함하는 원격 디바이스와의 트랜잭션을 관리하는 수단을 포함하고, 트랜잭션을 관리하는 수단은, 트랜잭션의 진행을 나타내는 복수의 인트라-트랜잭션 임시 상태 중에서 현재의 인트라-트랜잭션 임시 상태를 나타내는 수단; 트랜잭션의 성공적인 완료에 응답하여 엔티티 자원과 관련된 지속 상태 변경을 개시하기 위한 수단; 및 코어 자원을 통해 원격 디바이스의 대응 트랜잭션 자원을 향하는 인트라-트랙잭션 통신을 수행하기 위한 수단을 포함한다.
예 43에서, 예 42의 발명 대상은 선택적으로 통신 디바이스가 IoT(Internet-of-Things) 디바이스인 것을 포함한다.
예 44에서, 예 42 및 예 43 중 임의의 하나의 이상의 발명 대상은 선택적으로 디바이스가 OIC(Open Interconnect Consortium) 핵심 사양 VI.1.1.1을 따르는 것을 포함한다.
예 45에서, 예 42 내지 예 44 중 임의의 하나의 이상의 발명 대상은 선택적으로 무상태 메시징이 RESTful 메시징을 포함하는 것을 포함한다.
예 46에서, 예 42 내지 예 45 중 임의의 하나의 이상의 발명 대상은 선택적으로, 트랜잭션을 중단하고 트랜잭션의 실패에 응답하여 모든 잔여 임시 상태 표시를 제거하는 수단을 포함한다.
예 47에서, 예 42 내지 예 46 중 임의의 하나의 이상의 발명 대상은 선택적으로, 무상태 메시징이 자원 디스커버리, 디바이스 관리, GET 동작, PUT 동작, OBSERVE 동작, 또는 이들의 임의의 조합으로 구성되는 그룹으로부터 선택된 기능적 상호 작용을 용이하게 하는 것을 포함한다.
예 48에서, 예 42 내지 예 47 중 임의의 하나의 이상의 발명 대상은 선택적으로, 엔티티 자원에 대한 직접 액세스는 제한하지만 트랜잭션 자원을 통한 엔티티 자원에 대한 액세스는 허용하는 보안 정책을 구현하는 수단을 포함한다.
예 49에서, 예 42 내지 예 48 중 임의의 하나의 이상의 발명 대상은 선택적으로, 트랜잭션을 관리하는 수단이 임시 상태들의 시퀀스로서 트랜잭션의 프로세스 흐름을 나타내는 상태 그래프 데이터 구조를 저장하는 수단을 포함하는 것을 포함한다.
예 50에서, 예 49의 발명 대상은 선택적으로 상태 그래프 데이터 구조가 원격 디바이스에 의해 발견 가능한 것을 포함한다.
예 51에서, 예 42 내지 예 50 중 임의의 하나 이상의 발명 대상은 선택적으로, 트랜잭션을 관리하기 위한 수단이 트랜잭션과 연관된 트랜잭션 메시지 자원을 나타내는 콜렉션 자원을 저장하기 위한 수단을 포함하는 것을 포함한다.
예 52에서, 예 51의 발명 대상은 선택적으로 컬렉션 자원이 원격 디바이스에 의해 발견 가능한 것을 포함한다.
예 53에서, 예 42 내지 예 52 중 임의의 하나 이상의 발명 대상은 선택적으로, 엔티티 자원이 트랜잭션을 시작하고 트랜잭션의 성공적인 완료에 응답하여 지속 상태 변경을 겪는 애플리케이션 자원을 포함하는 것을 선택적으로 포함한다.
예 54에서, 예 42 내지 예 53 중 임의의 하나 이상의 발명 대상은 선택적으로, 엔티티 자원이 센서, 액추에이터, 데이터 스토어로 구성되는 그룹으로부터 선택된 적어도 하나의 데이터 소스를 포함하는 것을 포함한다.
전술한 상세한 설명은 상세한 설명의 일부를 형성하는 첨부 도면에 대한 참조를 포함한다. 도면은 예시적으로, 실시될 수 있는 특정 실시예를 도시한다. 이들 실시예는 본 명세서에서 "예"로도 지칭된다. 그러한 예들은 도시되거나 설명된 것들에 추가된 구성요소들을 포함할 수 있다. 그러나, 도시되거나 설명된 구성요소들을 포함하는 예도 고려된다. 또한, 본원에 도시되거나 설명된 특정 예(또는 그 하나 이상의 측면)에 관해 또는 다른 예(또는 그 하나 이상의 측면)에 관해, 도시되거나 설명된 구성요소(또는 그 하나 이상의 측면)의 임의의 조합 또는 순열을 사용하는 예도 고려된다.
이 문헌에 언급된 출판물, 특허 및 특허 문헌은 참고 문헌으로 개별적으로 인용된 것처럼 그 전체가 본원에 참고 문헌으로 인용된다. 이 문헌과 참고 문헌으로 인용된 문헌들 간에 일관성이 없는 사용법이 있는 경우, 인용된 참고 문헌(들)의 사용은 이 문헌의 사용을 보충하며, 양립할 수 없는 불일치가 있는 경우 이 문헌의 사용법이 제어한다.
이 명세서에서, 용어 "a" 또는 "an"은 특허 문헌에서 일반적으로 사용되는 것과 같이, "적어도 하나" 또는 "하나 이상"의 어떠한 다른 경우 또는 용도와 독립적으로 하나 또는 둘 이상을 포함하는 것으로 사용된다. 본 명세서에서, "또는"이라는 용어는 달리 명시되지 않는 한, 비배타성을 나타내도록 사용되거나, "A 또는 B"가 "A이지만 B는 아님", "B이지만 A는 아님" 및 "A 및 B"를 포함하도록 사용된다. 첨부된 청구 범위에서, "포함하는(including)" 및 "여기에서(in which)"라는 용어는 각각의 용어 "포함하는(comprising)" 및 "여기에서(wherein)"의 동등한 평문 영어 표현으로 사용된다. 또한, 이하의 청구 범위에서, "포함하는(including)" 및 "포함하는(comprising)"이라는 용어는 제한이 없으며, 즉 청구항에서 그러한 용어 뒤에 열거된 것 이외의 구성요소를 포함하는 시스템, 디바이스, 물품 또는 프로세스가 해당 청구항의 범위에 여전히 포함되는 것으로 간주된다. 또한, 이하의 청구 범위에서, "제 1", "제 2" 및 "제 3" 등의 용어는 단지 라벨로서 사용되며, 그들의 대상에 대한 번호 순서를 제안하려는 것이 아니다.
전술한 설명은 예시적인 것으로서, 제한하려는 것은 아니다. 예를 들어, 상술된 예들(또는 그의 하나 이상의 측면들)은 다른 예들과 조합하여 사용될 수 있다. 전술한 설명을 검토하면 예를 들면, 당업자에 의해 다른 실시예가 사용될 수 있다. 요약은 독자가 기술 공개의 본질을 신속하게 확인할 수 있도록 하는 것이다. 그것은 청구항의 범위 또는 의미를 해석하거나 제한하는 데 사용되지 않을 것이라는 이해하에 제출된다. 또한, 전술한 상세한 설명에서, 개시내용을 간결하게 하도록 다양한 특징들이 함께 그룹화될 수 있다. 그러나, 실시예들은 상기 특징들의 서브세트를 특징으로 할 수 있기 때문에, 청구 범위는 본원에 개시된 모든 특징을 설명하지 않을 수 있다. 또한, 실시예는 특정 예에서 개시된 것보다 적은 특징을 포함할 수 있다. 따라서, 이하의 청구 범위는 발명의 상세한 설명에 포함되며, 청구 항은 별개의 실시예로서 독자적으로 기재된다. 본원에 개시된 실시예의 범위는 첨부된 청구 범위를 참조하여, 그러한 청구 범위가 부여되는 균등물의 전체 범위와 함께 결정된다.