CoAP Observe: 예제및활용 2017 년 1 월 경북대학교통신프로토콜연구실 정중화 (godopu16@gmail.com), 최동규 (supergint@gmail.com) 목 차 1. 서론... 2 1.1 COAP 이란?... 3 1.2 COAP OBSERVE 란?... 5 2. COAP OBSERVE 예제구현... 6 2.1 JDK 설치... 6 2.2 CALIFORNIUM 라이브러리가져오기... 8 2.3 COAP OBSERVE 예제가져오기... 8 2.4 COAP OBSERVE 예제테스트... 9 1
1. 서론 사물인터넷 (IoT : Internet of Things) 의개념은 1999년케빈애쉬톤 (Kevin Ashton) 에의해최초로사용되었다. 초기에케빈애쉬톤이사용을하던개념은 RFID 태그를활용한시스템의발전을시작으로개념이조금씩변화되어, 최근에는유비쿼터스컴퓨팅을포함하여생활속유무선네트워크로연결할수있는모든사물들로범주가커졌다. 가전제품, 전자기기뿐만아니라헬스케어, 스마트홈, 스마트자동차, 원격제어등많은분야에서사물을네트워크로연결해편리하게사람과정보를교환할수있다. 기존에는사물본연의목적만으로단일적인기능을했다면인터넷과의융합으로다양한서비스를제공한다. 구글의구글글라스, 나이키의퓨어밴드, 그레이트리버메디컬센터의료플랫폼, 미국벤처기업코벤티스가개발한심장박동모니터링기기등모두사물인터넷의기반을둔예이다. 미국의정보기술연구및자문회사인가트너에의하면아래의그림 1과같이 2020년까지사물인터넷시장규모는 1.9조달러수준으로성장할것으로예상하고있다. 그림 1. 2020 년사물인터넷시장예상도표 사물의요소는우리가일반적으로사용하는전자기기및가전제품뿐만아니라경량화된 CPU, 센서등도포함하고있기에현재인터넷기술인 TCP/IP 프로토콜스택을맞추기에는불가능하다. 따라서낮은성능의사물인터넷기기도인터넷연결이가능하도록인터넷연결기술도현재보다경량화되어야한다. 현재국제적인획일화된표준은존재하지않지만 ITU-T, onem2m, 3GPP, IETF, IEEE 등의다양한표준화기구에서국제적인표준을확립하기위해글로벌한 IoT/M2M 서비스기술을연구하고있다. ITU-T와 onem2m 등은주로스마트헬스케어나스마트홈과같은서비스플랫폼표준기술을개발하고있으며, 3GPP, IETF, IEEE 등의표준기구는네트워크통신을위 2
한프로토콜을주로연구한다. 현재표준화의선두주자인 3GPP는기대만큼의수익이나오지않아소강상태에머무르고있으며, IETF는대표적인프로토콜로 CoAP을핵심적으로사용하고있다. IEEE는원활한 M2M 통신을제공하기위해 IEEE 802.x 계열의무선통신기술을확장하는표준개발이이루어지고있다. 국내에서의표준활동은 TTA를중심으로 M2M 서비스요구사항, 이동통신무선접속기술, 표준플랫폼간의인터페이스등을표준화하는작업을 ITU-T, onem2m 등과의국제표준화공동협력을추진하고있다. 1.1 CoAP 이란? CoAP 은사물인터넷과같이대역폭이제한된통신환경에최적화하여개발된 REST (REpresentational State Transfer) 기반의자원발견, 멀티캐스트지원, 비동기트랜잭션요청 및응답등을지원하기위한경량메시지전송프로토콜이다. CoAP 그림 2. CoAP 시스템개요도 CoAP은 RESTful기반의프로토콜이므로기존의 HTTP (Hypertext Transfer Protocol) 웹프로토콜과연동이쉽다. CoAP은자원관리를위해 HTTP와동일하게 GET, PUT, POST, DELETE의메서드를사용한다. CoAP은전송계층에서 UDP (User Datagram Protocol) 를사용하며송신자수신자간에정보를주고받을때자료를보낸다는신호나받는다는신호를보내지않는비동기식방식의전송방법이다. CoAP은수신자쪽에서자료를받았는지받지않았는지확인할수없는 UDP의단점을극복하기위해재전송및타이머관리를옵션으로포함하고있다. CoAP은확인형 (Confirmable), 비확인형 (Non-confirmable), 승인 (Acknowledgement), 리셋 (Reset) 4가지의메시지형을정의하고, 요청 (Request) 과응답 (Response) 메시지의상호작용으로전달된다. 3
그림 3. CoAP 과 HTTP 프로토콜스택비교 그림 4. CoAP 신뢰성메시지전송 그림 4는신뢰성메시지전송방법이다. 확인형 (CON) 메시지를전송하고, 여기에포함된메시지식별자 (Message ID) 는승인 (ACK) 메시지에도포함된다. 수신자가자료나요청을잘전달받았으면승인메시지를전송하고, 만약수신자가수신한자료나요청을처리할수없을때는승인메시지대신리셋 (Reset) 메시지를전송한다. 그림 5. CoAP 비신뢰성메시지전송 4
주기적으로센서자료값을얻어오는것처럼모니터링방식에서는메시지의신뢰성을요구하지않는다. 이런때에는그림 5와같이비확인성메시지 (NON) 을전송한다. 이때메시지 ID는메시지중복검사를위해사용한다. 만약수신자가비확인성메시지를처리할수없을때는신뢰성메시지전송과같은방식으로리셋메시지를전송한다. 그림 6. CoAP 메시지형식 CoAP 메시지는그림 6과같이간단한이진형식으로인코딩되어전송된다. 고정적인 4 바이트와 0바이트에서 8바이트길이의토큰, 그리고옵션과페이로드순으로배치된다. 처음 Ver 부분은 2비트로 CoAP의현재버전을나타낸다. 두번째 T 부분은 2비트로메시지형을의미하며 0 은확인형, 1 은비확인형, 2 는승인, 3 은리셋을나타낸다. TKL 부분은 4 비트로토큰필드의길이를나타내며값의단위는바이트이고 0에서 8까지의수를사용한다. 다음으로 Code 부분은 1바이트로 3비트는클래스를나타내고, 5비트는자세한내용을나타낸다. 클래스값의경우 0 은요청, 2 는성공적인응답, 4 는클라이언트에러응답, 5 는서버에러응답이다. 요청의경우, 0.01 은 GET, 0.02 는 POST, 0.03 은 PUT, 0.04 는 DELETE, 0.00 은빈메시지이다. 메시지 ID는메시지의중복확인및확인성 / 비확인성메시지에대한짝으로승인 / 리셋메시지에사용된다. Token 과 Options는필요에따라포함될수있고포함되지않을수있다. Token 과 Options의끝은 Payload 마커로알수있고, Payload 마커는 0xFF이다. 현재정의된 Options는 Content-Format, ETag, Location-Path, Location- Query, Max-Age, Proxy-Uri, Proxy-Scheme, Uri-Host, Uri-Path, Uri-Port, Accept, If-Match, If- Non-Match, Size1이있다. 1.2 CoAP Observe 란? CoAP과같이요청 / 응답모델은클라이언트가짧은주기로메시지를반복해서보내는경우에는적합하지않다. 이러한상황에서기존의 HTTP를사용한다면자원이제한된저성능의기기에서는큰오버헤드와복잡성때문에문제가발생한다. CoAP은이러한문제를해결하기위해기존의 CoAP을확장시켜 Observe라는기능을개발하였다. 이는 CoAP 서버에주제 (Subject) 라는공간을할당하여그주제에관심이는클라이언트가주제를통해서버로 5
접근한다. 특정주제에클라이언트가 Observe 요청을한다면그주제에관한내용이바뀔 때마다별도의요청메시지없이서버로부터변경된내용을알림 (Notifications) 으로받 게된다. 이러한기능이 CoAP Observe 기능이다. 그림 7. CoAP Observe 기능예시 그림 7은온도에관한정보를받는 Observe 기능의예시이다. 우선클라이언트는특정주제에관한내용을 Observe 하고싶다고서버에게확장된 GET 메시지를통해요청한다. 서버는 Observer 리스트에클라이언트의정보를저장하고. 그에관한응답으로특정주제의원하는정보를담아메시지를보낸다. 이렇게 Observe 과정이끝나게되면, 특정주제에관한상태가변경되었을때변경된정보를서버가별다른요청없이도클라이언트에게알려준다. 2. CoAP Observe 예제구현 CoAP Observe 를사용하기위해서는 CoAP 라이브러리를사용하여야합니다. 여기에서는 Californium 이라는 JAVA 용라이브러리를사용합니다. 2.1 JDK 설치 Californium 라이브러리는 JAVA 용라이브러리이기때문에라이브러리를사용하기위해서는 JDK가필요하다. JAVA 는 Oracle이소유하고있으므로 Oracle 홈페이지로이동하여다운로드받을수있다. http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 주소로접속하여 JDK 설치파일을다운로드한후설치한다. 6
그림 8. JDK 다운로드웹페이지 7
2.2 Californium 라이브러리가져오기 Californium 라이브러리를사용하기위해서는 Californium (Cf) Core 라이브러리를다운로드하여야한다. 해당라이브러리는 californium-core 라이브러리파일과 element-connector 라이브러리파일로구성되어있으며, californium-core 라이브러리파일은 http://mvnrepository.org/artifact/org.eclipse.californium/californium-core/2.0.0-m2 로이동하여다운로드할수있으며, element-connector 라이브러리파일은 http://mvnrepository.org/artifact/org.eclipse.californium/element-connector/2.0.0-m2 로이동하면다운로드할수있다. 그림 9. Californium library 다운로드웹페이지 2.3 CoAP Observe 예제가져오기 CoAP 라이브러리 Californium을이용한예제를살펴보자. Eclipse를이용하여프로젝트를 Import 한후실행시켜본다. 예제는 http://protocol.knu.ac.kr 에방문하면다운로드받을수있다. 다운로드한파일의압축을푼후해당디렉터리를 Workspace로하여이클립스를실행한다. 그후아래그림 10의절차를따라하여프로젝트를 import 한다. 8
그림 10. 프로젝트가져오기절차 2.4 CoAP Observe 예제테스트 앞서다운로드한폴더안의 export 폴더로이동한뒤파일 > 명령프롬프트열기를눌러 해당디렉터리에서 CMD 창을연다. 가장먼저브로커역할을하는서버를실행시켜야한다. coap_server.jar 를아래의명령어와함께 CoAP Observe Server 예제를실행할수있다. 9
1) CMD 를실행합니다. 2) coap_server.jar 를실행합니다. à java jar coap_server.jar coap_server 실행 그림 11. coap_server.jar 실행화면 이제위와같이두개의 CMD 창을더실행시킨뒤한개는 coap_sub.jar 를실행하고한개 는 coap_pub.jar 를수행하여 subscriber 가 publisher 가전송한메시지를잘수신하는지를확 인해보자. 1) CMD 를실행합니다. 2) coap_sub.jar 를실행합니다. à java jar coap_sub.jar localhost topic coap_sub.jar 실행 10
그림 12. coap_sub.jar 실행화면 Topic 과함께서버로메시지를전송한다. 1) CMD 를실행합니다. 2) coap_pub.jar 를실행합니다. à java jar coap_pub.jar localhost topic Hello world coap_pub.jar 실행 그림 13. coap_pub.jar 실행화면 11
coap_pub.jar 실행후다시 coap_sub.jar 실행화면을확인하면그림 14 와같이 publisher 가전달한메시지가잘전달되었음을확인할수있다. 그림 14. 메시지수신화면 12