NGSI-LD

**NGSI-LD**는 컨텍스트 정보 (*[[:en:Context awareness#Relational context : dynamic and non-user-centric definitions|context information]]*)를 발행, 질의 및 구독하기 위한 정보 모델 (*[[:en:Information model|Information model]]*) 및 Application Programming Interface (API)를 제공한다. 이는 서로 다른 이해 관계자들 사이에서 구조화된 정보를 공개적으로 교환하고 공유할 수 있도록 하기 위한 것이다. 주로 스마트시티 (Smart City), 스마트 산업 (Smart Industry), 스마트 농업 (Smart Agriculture)과 같은 어플리케이션 도메인, 그리고 좀 더 일반적으로는 사물인터넷 (Internet of Things), 사이버-물리 시스템 (Cyber-Physical System), 시스템 오브 시스템즈 (Systems of systems) 그리고 디지털 트윈 (Digital Twins)에서 사용된다.

NGSI-LD는 유럽 집행위원회의 요청에 따라 **European Telecommunications Standardization Institute ([[:en:ETSI|ETSI]])**의 Context Information Management Industry Specification Group (CIM ISG)에 의해 표준화되었다. 표준 채택과 추가 개발에 대한 정보는 European Union (EU)의 "Rolling plan for ICT standardization".에 명시되어 있다. NGSI-LD는 컨텍스트 관리 (Context management) 프레임워크와 컨텍스트 모델링에 대한 수십년 된 연구 자료를 기반으로 한다. NGSI는 "Next Generation Service Interfaces"의 약어로써, 오픈 모바일 연합 (Open Mobile Alliance)에서 발행한 컨텍스트 인터페이스 기술서에서부터 시작되었다. NGSI-LD는 FIWARE 오픈 소스 커뮤니티를 만든 European Future Internet Public-Private-Partnership (PPP)에 의해 NGSIv2로 채택 및 발전되었다.

NGSI-LD 정보 모델은 엔티티들간의 관계와 속성을 갖는 컨텍스트 정보로 표현되며, 이는 또한 속성 그래프 (**property graph**)에서 파생된다. 속성 그래프는 Resource Description Framework (RDF)와 시맨틱 웹 프레임워크를 기반으로 공식적으로 정의된 시맨틱스를 가지며, JSON-LD를 통해 직렬화가 가능하다. 모든 엔티티 및 관계에는 고유한 식별자인 Internationalized Resource Identifier (IRI) 참조가 제공되므로 해당 데이터를 링크드 데이터 데이터셋으로써 통신할 수 있다. -LD 접미사는 링크드 데이터 (Linked Data)를 의미한다.

## 디자인

### 정보 모델 (Information Model)
속성 그래프 모델 (property graph model)은 2000년대 초반부터 그래프 데이터베이스에 공통적으로 사용되어 왔다. NGSI-LD 정보 모델은 속성 그래프 모델에 대한 정식 명세라 볼 수 있으며, 이는 공적 표준화 (De jure standards) 기구인 ETSI에 의해 최초로 정의되었다.

핵심 개념은 다음과 같다.

* 속성 그래프는 방향을 가지는 선으로 연결된 꼭짓점 (node or vertex)으로 구성된 다중 유향 그래프이다. 여기서 꼭짓점과 선은 모두 다중의 연결된 속성(예: attribute)을 선택적으로 가질 수 있다.
* 속성 (Property; 객체 모델(object model)의 속성(attribute)과 유사)은 임의의 키-값(key-value) 쌍의 형태를 갖는다. 키는 문자열이며 값은 임의의 데이터 유형이다. RDF 그래프에서와 달리 속성은 그래프의 엣지로 표현되지 않는다.
* 관계 (Relationship)는 항상 식별자를 가지며, 시작 노드와 종료 노드를 가지는 그래프의 선(방향을 가지는 edge)이다.

NGSI-LD 메타 모델은 RDF/RDFS/OWL을 기반으로 하고, 일부는 JSON-LD를 기반으로 이러한 기본 개념(엔티티, 관계, 속성)을 공식적으로 정의한다.

* NGSI-LD **Entity**는 NGSI-LD를 사용하는 플랫폼의 외부인 실제 세계에서 존재하는 *[[:en:Referent|참조 대상]]*을 대표하는 정보이다. 참조 대상은 반드시 물리적(법적 혹은 행정적 실체일 수 있음)으로 명확한 물체이거나 스스로를 포함하는(분산 시스템의 구성일 수 있음) 무언가가 아니여도 된다. 엔티티의 모든 인스턴스는 IRI에 의해 고유하게 식별되어야 하며, 하나 이상의 NGSI-LD 엔티티 유형(NGSI-LD Entity Type(s))에 대한 참조로 특성을 나타내야 한다. 엔티티는 속성 그래프 언어(property-graph language)에서 노드(node)로 불린다.
* NGSI-LD **Property**는 NGSI-LD Value를 NGSI-LD Entity, NGSI-LD Relationship 또는 다른 NGSI-LD Property에 연결하는 인스턴스이다. Properties가 properties를 가지는 것이 명시적으로 허용되며 특정한 측정 값의 정확도를 표현할 때 권장된다.
* NGSI-LD **Relationship**은 NGSI-LD Entity, NGSI-LD Property 또는 다른 NGSI-LD Relationship가 시작점이 되고 다른 NGSI-LD Entity가 종착점이 되어 그 사이를 직접적으로 연결하는 링크이다. 예를 들어, Property에서 Entity로의 NGSI-LD Relationship은 Property가 해당 Entity에 의해 측정이 되었다는 것을 표현하는데 사용될 수 있다 (즉, 측정의 출처).
* NGSI-LD **value**는 JSON 값 (예: 문자열, 숫자, 참 또는 거짓, 객체, 배열), 또는 JSON-LD 유형 값 (즉, XSD 기본 유형 또는 IRI에 의해 정의된 유형과 값의 어휘 형식인 문자열), 또는 JSON-LD 구조화된 값 (예: 집합, 목록 또는 언어 태그가 지정된 문자열)이다.
* NGSI-LD **type**은 NGSI-LD 메타 모델에 정의된 NGSI-LD Entity, NGSI-LD Relationship, NGSI-LD Property 또는 NGSI-LD Value 클래스의 하위 클래스인 OWL 클래스이다. 일반적으로, NGSI-LD는 소수의 type에 대한 사전 정의를 제공하지만, 사용자가 정의하는 모든 유형 또한 사용될 수 있다.

메타 모델을 보완하기 위해서 NGSI-LD 정보 모델 명세는 또한 엔티티의 공간적, 시간적 또는 시스템 특성과 관련된 주요 구조를 정의하는 **교차 도메인 [[:en:Ontology|온톨로지]]**도 제공한다.

### 아키텍처 (Architecture)
NGSI-LD 명세는 정보 모델과 API로 구성된다. API는 아래의 아키텍처 구성 요소들을 지원할 수 있는 기능을 제공한다.

600x600픽셀|NGSI-LD Architecture Interactions

* **Context Consumer**: Context consumer는 NGSI-LD API의 "Context Information Consumption" 기능을 사용하여 Context Broker(또는 Context Source에서 직접)에서 NGSI-LD Entity를 사용한다. 특정 NGSI-LD Entity를 검색하거나 동기식 요청으로 관련 NGSI-LD Entity를 쿼리할 수 있다. 또한 관련 NGSI-LD Entity를 구독하여 NGSI-LD Entity에 변경된 사항이 있을 때마다 비동기식으로 알림을 받을 수 있다.
* **Context Producer**: Context Producer는 NGSI-LD API의 "Context Information Provision" 기능을 사용하여 Context Broker에서 NGSI-LD Entity, NGSI-LD Property 및 NGSI-LD Relationship을 생성, 수정 및 삭제한다.
* **Context Source**: Context Source는 NGSI-LD API의 "Context Information Consumption" 기능을 사용해서 NGSI-LD Entity를 사용할 수 있게끔 만든다. Context Broker가 정보를 검색할 수 있게 하려면 NGSI-LD API의 "Context Source Registration" 기능을 사용하여 Registry Server에 제공 가능한 컨텍스트 정보를 등록해야 한다.
* **Context Broker**: Context Broker는 Context Consumer의 컨텍스트 정보에 대한 기본 접근 포인트 역할을 한다. NGSI-LD Entity 정보가 Context Broker 자체에 저장될 수 있는 방법은 두가지다. 첫번째는 Context Producer가 NGSI-LD API의 "Context Information Provision" 기능을 사용하여 제공하는 경우이고, 두번째는 Context Broker가 NGSI-LD API의 "Context Information Consumption" 기능을 사용하여 Context Source에 요청한 경우이다. Context Broker는 요청과 관련된 모든 NGSI-LD Entity 정보를 수집하고 취합하며, 취합된 결과를 Context Consumer에게 반환한다. 구독의 경우에는 관련된 변경 사항이 생길 때마다 Context Source에서 수신한 알림을 보낸다. Context Consumer 요청과 관련된 NGSI-LD Entity를 가지는 Context Source를 찾기 위해, Context Broker는 Registry Server가 구현한 NGSI-LD API의 "Context Source Discovery" 기능을 사용해야 한다.
* **Registry Server**: Registry Server는 NGSI-LD API의 "Context Source Registration" 기능을 사용하여 Context Source에서 제공하는 Context Source Registration을 저장한다. "Context Source Registration" 기능에는 Context Source가 제공할 수 있는 컨텍스트 정보의 종류에 대한 정보가 포함되어 있지만 실제 값은 포함되지 않는다. 컨텍스트 정보의 종류는 상당히 상세한 정보 (예: 특정 NGSI-LD Entity의 특정 속성들 또는 관계들)부터 특정 NGSI-LD Entity의 정보 수준까지 다양하게 세분화될 수 있으며, 주어진 지리적 공간에 해당하는 Entity나 특정 엔티티 유형을 가진 NGSI-LD Entity 제공도 가능하다. NGSI-LD API의 "Context Source Discovery"기능을 사용하면 Context Broker (또는 Context Consumer)가 관련된 NGSI-LD Entity를 포함할 수 있는 Context Source 검색이 가능하다.

위와 같은 아키텍처 역할을 통해서 다양한 배포 아키텍처 구현이 가능하다. 예를 들어, 중앙 집중식 아키텍처를 구현할 경우에는 Context Producer가 제공하는 컨텍스트 정보를 저장하는 중앙 Context Broker가 존재한다. 분산된 구조의 아키텍처를 구현할 경우에는 모든 컨텍스트 정보가 Context Source에 의해 저장될 수 있다. 또한, 연합된 구조의 아키텍처에서는 Context Source가 하위 계층에서 취합된 정보를 사용할 수 있도록하는 Context Broker의 역할을 할 수 있다. 이러한 아키텍처는 상호운용성의 문제를 해결할 수 있다. 즉, 실제 배포 과정에서 서로 다른 방식으로도 모두 결합이 가능하다.

### API
NGSI-LD Context Information Management API를 사용하면 사용자가 여러 시나리오에서 다양한 이해 관계자가 포함된 컨텍스트 정보를 제공, 사용 및 구독이 가능하다. IoT 데이터 뿐만 아니라 다양한 필드에서 오는 정보에 실시간으로 접근이 가능할 뿐만 아니라 상호운용 가능한 데이터 발행 플랫폼을 통해 해당 정보 발행이 가능하다.

API는 또한 geo-temporal 쿼리를 제공하고 원하는 제약 조건에 해당하는 데이터가 발생하면 사용자에게 알림을 제공하기 위해 구독 메커니즘도 제공한다.

API는 아키텍처(중앙, 분산, 연합 또는 통합)에 구애받지 않도록 설계되었으므로 데이터를 생성하고 사용하는 어플리케이션은 컨텍스트 정보를 배포 및 제고하는 시스템의 세부사항에 맞춰 변형될 필요가 없다.

API는 다음과 같은 기능을 제공한다.

* **Context Information** 기능
** **Provision**: NGSI-LD Entity 생성 및 속성 업데이트
** **Consumption**: NGSI-LD Entity 쿼리
** **Subscription**: 특정한 조건을 달성하면 알림이 오도록 제약 조건 등록
* **Context Sources** 기능
** **Registration**: 분산되어있는 전체 시스템에서 컨텍스트 정보에 대한 새로운 정보를 사용할 수 있도록 등록
** **Discovery**: 특정한 유형의 정보를 제공하는 컨텍스트 정보가 등록되어 있는 시스템에 대한 쿼리

## 용도
NGSI-LD는 FIWARE programme의 파트너로 시작되었으며 주로 FIWARE 오픈 소스 커뮤니티, FIWARE 재단 및 아래의 다양한 프로젝트 및 사용자가 지원한다.

* Connecting Europe Facility(CEF)는 FIWARE context broker와 NGSI-LD 사용을 권장함
* Open and Agile Smart Cities Organisation는 Minimal Interoperability Mechanisms의 첫번째로 NGSI-LD 사양을 참조함
* Living-in.eu 프로젝트는 공식 발표와 기술 공약에서 NGSI-LD 사용을 권장함 본 발표는 EU의 86개 도시와 공공 기관에서 승인 및 서명하였고, 그 외 다수의 기업과 단체에서 지원함
* GSM 협회의 "IoT Big Data Framework Architecture"는 NGSI-LD를 기반으로 작성됨
* Fed4IoT EU 프로젝트에서 다양한 IoT 데이터 표현간 변환을 위해 neutral data format로 사용됨
* Orange 기업의 그래프 기반 디지털 트윈 플랫폼인 Thing'in 은 NGSI-LD를 핵심 정보 모델로 사용함

## 구현된 [[:en:Open-source software|오픈 소스 소프트웨어]] 프로젝트

* FIWARE 재단의 Orion-LD
* NEC의 Scorpio
* EGM의 Stellio
* Geonet의 Cassiopeia

## 역사
NGSI-LD는 2012년 Open Mobile Alliance (OMA)에서 발표한 "Next Generation Service Interface" (NGSI)로 인해 시작된 컨텍스트 인터페이스의 결과물이자 NGSI의 기반이기도 하다. NGSI에는 Context Entity Discovery로 NGSI-9와 Context Information Interface로 NGSI-10이 포함되어 있다. OMA의 NGSI 표준은 Entity-attribute-value 모델과 XML 기반의 표현에 의존했다. NGSI 컨텍스트 인터페이스는 유럽의 Future Internet Public-Private-Partnership (FI-PPP)를 위한 플랫폼을 개발했던 FIWARE 프로젝트에 의해 채택되었다. OMA NGSI 컨텍스트 인터페이스에는 NGSI-9와 NGSI-10을 모두 포함하는 NGSIv1이 있으며, NGSIv1는 JSON 표현이 가능한 HTTP 바인딩을 사용한다. FI-PPP 과정에서 인터페이스는 FIWARE 플랫폼의 핵심 인터페이스인 NGSIv2로 발전했다. 2016년 FI-PPP가 종료된 후에 FIWARE 플랫폼은 FIWARE 재단에서 관리하는 FIWARE 오픈 소스 커뮤니티의 핵심이 되었다. 2017년 ETSI Industry Specification Group Context Information Management (ETSI ISG CIM)에 대한 ETSI ISG 그룹은 컨텍스트 정보 인터페이스를 발전시키기 위해 설립되었으며, 그 결과 NGSI-LD가 만들어졌다. 기존에 정보 모델의 한계로 인해 Entity 자체와 동등한 Entity 간의 관계를 명시적으로 포함할 수 있는 속성 그래프에서 파생되어 더욱 광범위한 모델이 만들어졌다.

## 같이 보기
* 링크드 데이터
* 컨텍스트 관리(Context management)
* 상황 인식(Context awareness)
* 그래프 데이터베이스
* 그래프 쿼리 언어(Graph Query Language)

## 참고 자료
* ETSI CIM group home page
* NGSI-LD Primer (oriented towards the use of the API)
* NGSI-LD modelling guidelines White Paper

## 각주


분류:정보과학
분류:지식 표현
분류:모델링 언어
분류:컴퓨터 표준
분류:통신 표준