AllJoyn 이해 - Core Framework 개념 정리

Allseen Alliance에 소개되어 있는 AllJoyn의 Core Framework 내용을 이해하기 위해 아래와 같이 해석해서 정리해 보았습니다. 개발자 입장에서 볼 때 새로운 용어나 개념의 이해가 선행되어야 코드상에서의 접근이 용이하다는 것은 중요한 점입니다. 많은 용어와 개념들을 가능한한 원문 형태로 이해하는것이 가장 빠른 방법입니다.
(원문 참조 : https://allseenalliance.org/developers/learn/core )





CORE FRAMEWORK

이 섹션에서는 AllJoyn ™의 핵심 개념을 설명합니다. 기본적인 하이-레벨 이해는 올조인 서비스 프레임워크만 사용하는 어플리케이션 뿐만이 아니라 올조인 어플리케이션을 개발하는 모든 이들에게 추천합니다.


Bus Attachment
올조인 어플리케이션들은 구동시 생성하는 Alljoyn Bus Attachment 객체를 이용하여 AllJoyn Router에 연결하고 AllJoyn network 에서 서로 상호작용합니다.

Advertisement and Discovery
AllJoyn 어플리케이션들은 두가지 매커니즘(About Announcement 와 Well-Known Name)으로 자기 자신이 가진 서비스를 광고(알림)할 수 있습니다.
가능한 전송방식에 따라서, 올조인 어플리케이션을 다른 올조인 어플리케이션들이 발견하기를 보장하기 위해 올조인 프레임워크는 서로다른 방식을 사용할 수 있습니다.
IP-기반 전송, mDNS, 멀티캐스트와 UDP 패킷의 브로드캐스트 조합 등이 그 예 입니다.

About Announcements는 광고를 위한 매커니즘 입니다.
About Announcements는 어플리케이션들이 가진 매타데이타 형식의 일관된 구성(제조사, 모델, 제공되는 인터페이스 종류, 그래픽 아이콘 등등의 정보)을 광고할 수 있는 일반적인 방법을 제공합니다.

Well-Known Name 은 어플리케이션들이 서로 공지하고 발견하기 위한 좀더 원시적인 매커니즘입니다. 이것은 About Announcements 가 사용하는 매커니즘이기도 합니다.
어플리케이션이 low-level 기능을 위한 특정한 목적이 있지 않다면 통상 About Announcements 를 사용하기를 권장합니다.

About Announcements, Well-Known Name 두가지 모두 발견(Discovery)의 처리는 각각의 고유한 이름(UniqueName)에 기반해서 식별된 올조인 어플리케이션들의 리스트를 반환합니다. 이 값은 나중에 추가적인 통신을 위한 세션을 생성하는데 사용 됩니다.

Lean more about About Announcements

Session and Port
AllJoyn 프레임워크는 서로다른 올조인 어플리케이션들 사이의 연결을 관리합니다.
일반적으로 서비스를 제공하는 어플리케이션은 About Announcements를 통해 자신을 광고 합니다.  다른 원격 올조인 어플리케이션이 올조인 어플리케이션(고유한 이름)을 발견시, 세션(JointSession 이라 불리는 프로세스)을 생성할 수 있습니다. 서비스를 제공하는 어플리케이션은 JointSession의 요구를 수락 또는 거부 할 수 있는 옵션을 갖습니다.

세션은 포인트-투-포인트 또는 멀티포인트 일 수 있습니다. 포인트-투-포인트 세션은 일대일 접속을 허용합니다. 멀티포인트 세션은 같은 세션상에서 디바이스들과 어플리케이션들의 그룹 통신을 허용합니다.

세션은 특정 포트에서 생성됩니다. 서로다른 포트는 포인트-투-포인트와 멀티포인트 연결 토폴로지들의 다양성을 허용합니다. 아래 그림상에서, 좌측의 경우, A와 B는 S와 포인트-투-포인트로 포트1번으로 연결되어 있습니다. 즉, A 와 S, B 와 S 각각이 일대일 연결을 의미 합니다.
우측의 경우 A,B,C와 S가 포트2번으로 멀티포인트 세션으로 모두 연결되어 있습니다. 즉, A,B,C,S 모두 같은 통신으로 공유할 수 있다는 의미 입니다.


BusObject
AllJoyn 어플리케이션들은 BusObject 추상화를 통해 서로 통신합니다. 이 추상화 객체는 잘 정의된 인터페이스를 사용하여 만든 객체지향 프로그래밍 컨셉과 잘 매핑됩니다.
일반적으로 서비스를 제공하는 어플리케이션은 BusObject를 생성합니다. 흡사 원격 프로시져 호출(Remote Procedure Call)과 동일하게, 원격 어플리케이션들은 효과적으로 원격으로 BusObject 를 열수 있고 메소드를 호출할 수 있습니다.

BusObject는 인터페이스의 집합을 구현할 수 있습니다. 각각의 인터페이스는 명확하게 BusMethods, BusProperties, BusSignals의 세트를 정의 합니다.
BusMethods는 메소드 호출을 위한 원격 개체로 허용됩니다.
BusProperties는 속성을 get 및 set 할 수 있습니다. BusSignals는 서비스를 제공하는 어플리케이션으로 부터 방출된 신호들 입니다.

BusObject는 특정 버스 경로에 첨부되어 있습니다. 이것은 동일한 객체로 다른 목적들을 위한 다른 버스 패스들에 첨부될 수 있는 더 큰 유연성을 허용합니다.

예를들어, 가스레인지와 같은 서비스를 구현하고 있는 어플리케이이 있다면, BusObject는 왼쪽,오른쪽 각각의 개별 버너를 컨트롤 할 수 있도록 왼쪽 가스버너 와 오른쪽 가스버너에 해당하는 복수의 버스 패스에 첨부될 수 있습니다.

ProxyBusObject는 BusObject에 액세스하기 위해 원격 어플리케이션에 의해 생성되는 객체입니다.

요약하면, 서비스를 제공하는 어플리케이션은 해당 서비스에 접근을 노출하는 BusObject를 구현합니다. 원격 어플리케이션은 이 서비스어플리케이션과 세션을 만들고 ProxyBusObject를 생성하여 특정 객체 경로의 BusObject에 연결합니다.
그리고 나서, BusMethods를 호출할 수 있고, BusProperties에 접근할 수 있고, BusSignals을 받을 수 있습니다.


Sessionless Signal
Sessionless Signal은 세션을 생성할 필요 없이 신호를 수신하도록 사용되는 매커니즘 입니다. 비결은, 새로운 시그널의 존재를 광고하는 Well-Know Name을 이용하는 것 입니다.
원격 개체는 자동으로 일시적인 세션을 생성하고, 시그널 데이타를 수신하고 세션을 해제합니다. AllJoyn Core API는 이런 추상화를 제공합니다.

Introspection
내성(Introspection)은 AllJoyn 프레임워크에 내장되어 있습니다. API들은 객체경로와 객체들을 발견하려고 원격 올조인 어플리케이션을 쉽게 내성하기 위해 존재합니다.
모든 메소드, 파라미터, 속성, 시그널,  포함한 풀 인터페이스입니다.

Introspection을 통해, 원격 디바이스와 그 디바이스에 대한 사전 정보를 필요로 하지 않는 통신을 배울 수 있습니다.

https://allseenalliance.org/schemas/introspect.xsd

Events and Actions
Events와 Actions은 어플리케이션 자체의 events와 actions을 설명하기 위한 규칙입니다.
시그널과 메소드를 설명하는 간단한 메타데이타를 추가하여,
다른 올조인 어플리케이션들은 어플리케이션이 방출하는 이벤트들과 어플리케이션이 엑셉트할 수 있는 액션들을 쉽게 발견할 수 있습니다.
이것은 다른 어플리케이션들이 좀더 복잡한 'If-this-then-that' 같은 상호작용들을 생성하는 다른 장치간에 함께 events와 actions을 연결하는 것을 허용합니다.

Security
AllJoyn 보안은 어플리케이션 레벨에서 나타납니다. 디바이스 레벨에서의 trust는 없습니다. 각각의 인터페이스는 선택적으로 보안을 요청할 수 있습니다. 요청된 경우, 인증은 두 어플리케이션 사이에서 메소드가 호출되거나 시그널을 받을때 나타날 수 있습니다. PIN,코드 PSK, ECDSA(Elliptical Curve Digital Signature Algorithm) 등의 복수의 인증 매커니즘이 지원됩니다. 한번 인증되면, 두 디바이스간의 모든 메시지들은 AES-128 CMM으로 암화화됩니다.

Putting It All Together
AllJoyn 어플리케이션은 Bus Attachment를 통해 AllJoyn 프레임워크와 상호작용합니다.
어플리케이션은 자신의 서비스를 About Announcement를 통해 광고합니다. About Announcement는 제공되는 인터페이스들을 포함한 어플리케이션에 대한 메타데이타 형식의 나열로 구성되어 있습니다. 고유이름(UniqueName)은 어플리케이션을 식별하기 위한 발견(Discovery)에서 반환됩니다.

원격 어플리케이션이 AllJoyn 어플리케이션을 발견할때, 특정 포트에 접속하여 세션을 생성할 수 있습니다. 포인트-투-포인트 와 멀티포인트 세션 모두 지원합니다. AllJoyn 어플리케이션은 원격접속 요청을 수락하거나 거절할 수 있는 선택 권한을 가지고 있습니다.

세션을 생성하기 전에, 어플리케이션은 버스 오브젝트들을 생성하고 특정 오브젝트 경로에 버스 오브젝트를 배치할 수 있습니다. 각 버스 오브젝트는 methods, properties, signals의 집합에 의해 정의된 인터페이스 집합을 구현할 수 있습니다.

세션이 만들어진 이후, 원격 어플리케이션은 메소드를 호출하고, 속성을 얻기/설정하기, 시그널을 받기 등으로 BusObject와 상호작용하는 local ProxyBusObject의 생성을 통해 AllJoyn 어플리케이션과 통신합니다.

많은 경우에, 클라이언트 측의 발견, 세션설정 그리고 프록시 객체 관리는 어플리케이션들사이의 간단한 공통 패턴에 따라갑니다. Standard Core Library는 이러한 경우들을 위한 옵저버 클래스가 포함된 편리한 API를 제공합니다.
옵저버 클래스는 About Announcement 파싱, 세션관리 그리고 클라이언트 어플리케이션을 위한 프록시 오브젝트 생성 등을 자동화 합니다.


Lean more


이상 AllJoyn의 CoreFramework 개념을 정리해 보았습니다.

댓글

이 블로그의 인기 게시물

AllJoyn 이해 - Architecture 개념 정리

Virtual Box에서 공유폴더 설정하기

라즈베리파이2 구입 및 간단 설치하기 (NOOBS)