IoT 표준화
Internet-of-Things (IoT, 사물인터넷)
인터넷을 기반으로 모든 사물을 연결하여 사람과 사물,
사물과 사물간의 정보를 상호 소통하는
지능형 기술 및 서비스
기능화 + 상호연결 + 지능화 = IoT
Internet-of-Thins 요소 기술
사물인터넷 표준화
- 국제표준기구인 ITU-T, ISO/IEC에서 사물인터넷 관련 표준 개발이 활발하며, 글로벌 표준 기구(de facto) IETF, IEEE, OGC, OMA, ETSI, oneM2M 등에서 사물인터넷 관련 정의, 기술 분류 및 필요한 요소 기술들에 대한 표준들을 활발히 개발
OCF: Open Connectivity Foundation
- An industry organization to
- develop standards,
- promote a set of interoperability guidelines, and
- provide a certification program for devices involved in the IoT.
- Major membership
- Samsung Electronics, Intel, Microsoft, Qualcomm and Electrolux.
- The OCF delivers a framework that enables these requirements via a specification, a reference implementation and a certification program
- IoTivity: open source reference implementation developed by different members of the OCF.
- 다음과 같은 업계 조직
- 표준을 개발하고,
- 일련의 상호운용성 guideline을 홍보한다.그리고,
- IoT에 관련된 장치에 대한 인증 프로그램을 제공한다.
- 주요 회원 자격
- 삼성전자, 인텔, 마이크로소프트, 퀄컴, 일렉트로룩스.
- OCF는 사양, 참조 구현 및 인증 프로그램을 통해 이러한 요구사항을 가능하게 하는 프레임워크를 제공한다.
- IoTivity: OCF의 다른 구성원들에 의해 개발된 오픈 소스 참조 구현.
IoTivity
- Open source framework that implements the Open Connectivity
- Foundation (OCF) standards providing easy and secure communications for IoT devices
- 오픈 커넥티비티를 구현하는 오픈 소스 프레임워크
- IoT 장치를 위한 쉽고 안전한 통신을 제공하는 기반(OCF) 표준
Application Layer Protocol
OSI 7 Layer
- 네트워크 프로토콜이 통신하는 구조를 7개로 분리하여, 각 계층간 상호 작동하는 방식을 정의해 놓은 계층 구조
IoT를 위한 Application Layer Protocol
- IoT 환경에서는 다양한 종류의 사물기기들이 존재하며 빈번한 데이터 전달 및 교환이 발생하고, 네트워크 환경의 경우 메시지 전달의 손실이 자주 발생
- IoT 특성 상 저사양 하드웨어와 저전력 요구사항을 가짐에도 안정적인 네트워크 동작이 요구됨. 이에 따라 IoT를 위한 메시지 교환 어플리케이션 프로토콜이 개발됨
- REST (Representational State Transfer), XMPP (Extensible Message and Presence Protocol), MQTT (Message Queuing Telemetry Transport, CoAP (Constrained Environments Application Protocol) 등
HTTP (Hypertext Transfer Protocol)
- WWW(World Wide Web)에서 사용되는 통신규약으로 클라이언트와 서버 간의 정보를 주고받을 수 있는 어플리케이션 계층 프로토콜.
- 주로 HTML 문서를 주고 받는 데에 쓰이며 TCP와 UDP를 전송계층으로 사용.
- 클라이언트와 서버 사이에 요청/응답(Request/Response) 기반 데이터 교환 방식
MQTT (Message, Queuing, Telemetry, Transport)
- 지연/손실이 심한 네트워크 환경에서 검침기, 센서 등 작은 기기들의 원격제어, 원격측정을 위한 프로토콜로서, 신뢰성/저전력 특징 때문에 IoT에 적용하기 적합
- ‘publish/subscribe’ 모델을 사용하며, MQTT 네트워크 노드 간에 메시지를 관리하고 라우팅하기 위해 중앙 MQTT 브로커(broker)를 필요로 함
- TCP를 사용하여 ‘고신뢰성, 정렬, 에러 검사’를 특징으로 하는 트랜스포트 계층 구현
CoAP (Constrained Application Protocol)
- 저전력, 고손실 네트워크 및 소용량 그리고 소형 노드와 같은 데이터 손실 가능성이 큰 제약적인 환경에서 사용될 수 있도록 특화된 웹 전송 프로토콜
- TCP 대신 UDP를 사용 (리소스 제약이 있는 기기 고려), UDP기반의 Request/Response 모델로 동작하며 멀티캐스트를 지원
- 신뢰성 있는 전달을 위해서 재전송 및 타이머 관리를 옵션으로 포함
- 보안을 위해서 UDP와 CoAP 계층 사이 DTLS(Datagram Transport Layer Security)계층 사용
- 네이티브 UDP, 멀티캐스트지원, DTLS보안, 리스소/서비스 검색, 비동기식 통신
XMPP (Extensible Messaging and Presence Protocol)
- 2인 이상의 참여자 간에 구조적 데이터의 실시간 교환을 위한 프로토콜
- 다양한 메신저들에서 사용
- Google Talk, Facebook, AOL, MSN 메신저 등
- TCP를 이용하여 동작하고 클라이언트는 도메인 서버에게 데이터를 전송하는 서버 클라이언트 방식으로 동작하기 때문에 서버 기반으로 상대기기간의 인증 및 허가와 관련한 보안요소가 지원되고 있으며 실시간 메시지 전달과 확장성을 고려하여 프로토콜이 설계됨
IoT 시각화 툴 Node-RED
IoT 시각화 도구 (인포그래픽)
- 사물 인터넷 장치의 센서 데이터를 수집 및 원격 제어 하기 위해서는 다양한 기술을 필요로 하고, 많은 개발 시간 소요
- 데이터베이스, 웹서버, 웹프론트앤드(시각화), 프로토콜, 개발언어 등 다양한 기술이 필요 -> 많은 개발 시간 소요
- IoT 시각화 도구(툴)은 사물인터넷 서비스 개발에 필요한 통신 프로토콜과 다양한 정보를 이용하여 플로우(Flow)를 프로그래밍 할 수 있는 인포그래픽 환경 제공
Node-RED
- Node-RED(노드 레드)
- 하드웨어 장치들, API, 온라인 서비스를 사물인터넷의 일부로 와이어링(배선화)시키기 위해 IBM이 개발한 시각 프로그래밍을 위한 플로(Flow) 기반 개발 도구
- 브라우저 기반 플로 편집기를 제공
- 자바스크립트 함수를 개발하는데 사용할 수 있으며 애플리케이션의 요소들은 재사용을 위해 저장하거나 공유 가능
- 런타임은 Node.js 위에서 개발되었으며 Node-RED에서 만든 플로는 JSON을 사용하여 저장
- Node-RED 구조
- 노드(Node)라고 불리는 블록을 이용하여 네트워크 응용 프로그램의 동작 구조를 쉽게 설계
- 강력한 비동기 런타임인 Node.js 위에서 구동
- 사용자에게 웹 기반의 플로우 에디터를 재공하기 위한 서버와 만든 플로우를 실제로 구동시키는 Runtime 이 하나의 소프트웨어에서 작동
- Node-RED(노드 레드) : https://nodered.org/
- 하드웨어 장치들, API, 온라인 서비스를 사물인터넷의 일부로 와이어링(배선화)시키기 위해
- IBM이 개발한 시각 프로그래밍을 위한 플로(Flow) 기반 개발 도구
- 브라우저 기반으로 각 노드(Node)간 플로우 배선을 쉽게 설계 가능
- 한번의 click로 runtime으로 배포(deploy)와 runtime 구동 가능
- 주요 특징
- Browser-based flow editing
- Built on Node.js
- Social development
Node-RED를 활용한 IoT 응용 명세/구현
- Node-Red 로 Application을 구현하는 방식은 크게 세 가지로 구분
- Design: 노드를 조합하여 하나의 플로우를 설계
- Deploy: 설계한 플로우를 배포
- Runtime: 설계된 플로우 Node.js로 실행
- 설계 플로우 예시
- Input, Output, Function 세 가지 종류의 Node
- 하나의 flow는 Input Node에서 시작하여 Output Node로 결과 전달
- Input과 output node 사이에 data 가공을 위해 Function Node가 사용될 수 있음
- 하나의 Node는 다음 Node로 JSON 형식 데이터를 전달
- 기본값: Message 오브젝트에 payload 속성
참고 : 용어정리
용어정리
Java
- Java는 웹 애플리케이션 코딩에 널리 사용되는 프로그래밍 언어
- 다중플랫폼, 객체지향 및 네트워크 중심 언어
- Java는 썬 마이크로 시스템즈에서 개발 발표
- 응용분야: 모바일 앱, 클라우드 컴퓨팅, 빅데이터 , 인공지능, 사물인터넷 등
JavaScript
- JavaScript는 웹페이지에서 복잡한 기능을 쉽고 단순하게 구현할 수 있도록 하는 스크립트 언어 또는 프로그래밍 언어
- Netscape Inc.에서 개발, Java 플랫폼과는 별개임
- 응용분야: 웹페이지(서버, 클라이언트)
Node.js
- JavaScript 엔진으로 빌드된 JavaScript 런타임(프로그램 실행 환경)
- 노드를 통해 다양한 JavaScript 애플리케이션 실행
- Event 기반, Non-blocking I/O 모델 사용
- 응용분야: 네트워크 어플리케이션, 웹 어플리케이션
Node-RED
- 브라우저 기반 플로우(Flow) 편집기
- JaveScript 함수를 개발하는데 사용 가능
- 런타임은 Node.js 위에서 개발됨
- 응용분야: 사물인터넷
npm
- Node Packaged Manager
- Node.js로 만들어진 패키지(Package, 모듈:module)을 웹에서 받아서 설치하고 관리하는 툴
JSON
- JavaScript Object Notation
- JavaScript에서 데이터를 저장하고 전송할 떄 사용하는 경량의 데이터 교환 형식
- 서버와 클라이언트 간 데이터 전송에 사용
Java와 JavaScript
객체지향
- Java: 객체지향 프로그래밍 언어
- JavaScript: 객체지향 스크립트 언어
실행환경
- Java: JAVA 애플리케이션은 JVM 위에서 실행
JRE와 JDK 설치
- JavaScript: 웹브라우저 위에서 실행, 추가적인 환경설정 필요 없음
컴파일
- Java: 프로그래밍 언어로 컴파일 필요
- JavaScript: 텍스트 기반 스크립트로 컴바일 없이 바로 실행
모바일 애플리케이션
- Java: 휴대전화 APP 대부분은 JAVA 사용, Android 스마트폰도 JAVA 사용
- JavaScript: 주로 웹 애플리케이션 용
변수 지정
- Java: 변수 자료형은 반드시 선언 되어야 함. (정적 형지정, static typing). 블록 밖에서 사용 불가
- JavaScript: 변수 자료형은 반드시 선언 되어야 함 (정적 형지정, static typing), 함수 안에서만 사용
적용 범위
- Java: 다양한 운영체제에서 실행 가능한 독립적
인 언어
- JavaScript: 웹브라우저, HTML/CSS와 같은 환경 필요