SLICE (IoT 공통 SW 엔진 사용자 가이드...버전 발행일 문서번호 페이지 1.0...

147
SLICE (IoT 공통 SW 엔진) 사용자 가이드 IoT연구본부

Transcript of SLICE (IoT 공통 SW 엔진 사용자 가이드...버전 발행일 문서번호 페이지 1.0...

SLICE (IoT 공통 SW 엔진)

사용자 가이드

IoT연구본부

버전 발행일 문서번호 페이지

1.0 2018-12-06 2/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

개정 이력

버전 개정일자 개정내역 작성자 승인자

0.1 2018.06.15. ▪ 초안 작성

0.9 2018.09.10. ▪ 수정 및 보완

1.0 2018.12.06 ▪ SLICE v1.0에 대응하는 배포판 작성 우성필

버전 발행일 문서번호 페이지

1.0 2018-12-06 3/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

목차

1. 개요 ................................................................................................................................................................................. 5

1.1 목적 ............................................................................................................................................................................ 5

1.2 범위 ............................................................................................................................................................................ 5

1.3 용어 및 약어 ............................................................................................................................................................. 5

1.3.1 용어 .................................................................................................................................................................... 5

1.3.2 약어 .................................................................................................................................................................... 5

2. SLICE 서비스 플랫폼 .................................................................................................................................................. 6

2.1 SLICE 서비스 플랫폼 개념 모델 ........................................................................................................................... 6

2.2 SLICE 서비스 플랫폼 구성 ..................................................................................................................................... 7

2.3 SLICE 서비스 플랫폼 동작 모델 ........................................................................................................................... 9

2.4 SLICE 서비스 플랫폼 사물지능 자가학습 ......................................................................................................... 11

3. SLICE GITHUB 저장소 구조.................................................................................................................................... 12

3.1 메인 저장소 (HTTPS://GITHUB.COM/SLICE-PROJECT/SLICE) .................................................................................... 13

3.2 소스코드 저장소 (HTTPS://GITHUB.COM/SLICE-PROJECT/SLICE-SOURCE) .............................................................. 14

3.3 프레임워크 배포판 저장소1 (HTTPS://GITHUB.COM/SLICE-PROJECT/SLICE-WIN32-DIST)...................................... 15

3.4 프레임워크 배포판 저장소2 (HTTPS://GITHUB.COM/SLICE-PROJECT/SLICE-MACOSX-DIST) .................................. 15

3.5 SLICE 엔진 배포판 저장소 (HTTPS://GITHUB.COM/SLICE-PROJECT/SLICE-ENGINE-DIST) ..................................... 16

3.6 SLICE 예제 구현 저장소 (HTTPS://GITHUB.COM/SLICE-PROJECT/SLICE-EXAMPLES) ............................................. 17

4. SLICE 서비스 플랫폼 바로 시작하기 :: (GETTING STARTED) .................................................................... 18

4.1 개발 환경 구성 ....................................................................................................................................................... 18

4.1.1 SLICE 프레임워크 설치 ................................................................................................................................ 18

4.2 SLICE 플랫폼 서비스 시나리오 구현 ................................................................................................................. 21

4.2.1 서비스 시나리오 ............................................................................................................................................ 21

4.2.2 지능명세 .......................................................................................................................................................... 22

4.2.3 시나리오 기반의 지능명세 정의 ................................................................................................................. 23

4.2.4 지능명세 기반의 소스코드 생성 ................................................................................................................. 28

4.2.5 자동 생성 된 소스코드에 대한 구현. ........................................................................................................ 29

4.3 서비스 시나리오 배포 및 구동 ............................................................................................................................ 37

4.3.1 목표 디바이스에 직접 복사하여 구동하는 방법. .................................................................................... 37

4.3.2 OBR(OSGi Bundle Repository)를 사용한 배포 및 구동하는 방법 ........................................................... 39

4.4 서비스 시나리오 구동 결과 ................................................................................................................................. 42

4.4.1 TemperatureDetector 구동 결과 ...................................................................................................................... 42

버전 발행일 문서번호 페이지

1.0 2018-12-06 4/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.4.2 FanContoller 구동 결과 .................................................................................................................................. 43

4.4.3 시나리오 수행에 따른 자가학습 결과 (룰 생성) .................................................................................... 44

5. 부록 (APPENDIX) ...................................................................................................................................................... 46

5.1 MAVEN 설치 ............................................................................................................................................................. 46

5.2 JDK 1.8 설치 ............................................................................................................................................................ 48

5.3 OBR 구축 ................................................................................................................................................................ 50

5.3.1 Nexus 2 개요 ..................................................................................................................................................... 50

5.3.2 Nexus 2 설치 ..................................................................................................................................................... 51

5.3.3 Nexus 실행 ....................................................................................................................................................... 53

5.3.4 웹 사용자 인터페이스 ................................................................................................................................... 56

5.3.5 OBR(OSGi Bundle Repository) 저장소 생성 ................................................................................................. 60

5.3.6 Maven deploy를 이용한 OBR 배포 .............................................................................................................. 65

5.3.7 Felix 구동 및 업데이트 ................................................................................................................................. 75

5.4 SLICE TOOLS 사용자 매뉴얼 ................................................................................................................................. 86

5.4.1 New SLICE Project ........................................................................................................................................... 86

5.4.2 New ADL File .................................................................................................................................................... 89

5.4.3 New SLICE Sample Project ............................................................................................................................... 91

5.4.4 Content Assistant ............................................................................................................................................... 93

5.4.5 Validation & quick fix ...................................................................................................................................... 100

5.4.6 Formatting ........................................................................................................................................................ 113

5.4.7 Eclipse Error Log ............................................................................................................................................. 115

5.4.8 Felix Web Console ........................................................................................................................................... 116

5.4.9 JMX Console ................................................................................................................................................... 119

5.5 SLICE TOOL 배포판 만들기 방법 ....................................................................................................................... 122

5.5.1 ADL Feature 프로젝트 생성 ......................................................................................................................... 122

5.5.2 Platform Feature 프로젝트 생성 ................................................................................................................... 124

5.5.3 Product 프로젝트 생성 ................................................................................................................................. 127

5.5.4 Product Overview ............................................................................................................................................ 130

5.5.5 Product Contents .............................................................................................................................................. 131

5.5.6 Product Launching ........................................................................................................................................... 132

5.5.7 Product Splash ................................................................................................................................................. 139

5.5.8 Product Branding ............................................................................................................................................. 141

5.5.9 Product Export ................................................................................................................................................. 143

5.6 SLICE 전체 시스템 구조 ..................................................................................................................................... 145

5.6.1 SLICE 시스템 구조 ...................................................................................................................................... 145

5.6.2 시스템 구성요소 설명 ................................................................................................................................. 145

버전 발행일 문서번호 페이지

1.0 2018-12-06 5/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

1. 개요

1.1 목적

본 문서는 외부환경에 설치된 다양한 센서장치를 통해 적응적으로 상황을 인식하고 액츄에이터 장치를

통해 상황에 맞는 액션을 실행하는 규칙 기반 시스템으로 정의되는 사물지능 공통 SW 엔진 및

프레임워크 (SLICE 서비스 플랫폼)에 대한 개발 또는 이의 활용이 가능하도록 개발자 가이드 제공을

목적으로 한다.

1.2 범위

본 문서에서는 사물지능 공통 SW 엔진 및 프레임워크 (SLICE 서비스 플랫폼) 구성 및 동작모델,

개발환경 그리고 예제 서비스 시나리오와 지능명세(데이터 모델, 제어 모델, 에이전트 프로파일)에 대해서

기술을 한다.

1.3 용어 및 약어

1.3.1 용어

SLICE 서비스 플

랫폼

사물의 이동이 최소화된 환경에서 사물이 사용자의 행위와 주변 상황의 변화를 스

스로 인지하여 실시간 판단과 대응을 수행하고, 피드백에 따른 학습을 통해 자율적

으로 최적화해 가는 사물지능 공통 소프트웨어 (프레임워크와 엔진으로 구성)

1.3.2 약어

IoT Internet of Things

SLICE Self-Learnable IoT Common sw Engine

CEP Complex Event Processing

KB Knowledge Base

REST REpresentational State Transfer

MQTT Message Queuing Telemetry Transport

버전 발행일 문서번호 페이지

1.0 2018-12-06 6/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

2. SLICE 서비스 플랫폼

2.1 SLICE 서비스 플랫폼 개념 모델

그림 1. 기존 IoT 플랫폼의 모델 및 SLICE 협업 사물지능 모델 비교도

기존의 IoT 플랫폼은 애플리케이션 개발자에게 다양한 사물을 추상화하고 통합하는

미들웨어를 제공한다. 이러한 플랫폼에서 모든 사물은 미들웨어가 탑재 된 중앙 서버에

연결되어 작동한다. 기존 IoT 플랫폼에서는 그림 1 과 같이 인지, 추론 및 학습과 같은 중앙화

된 지능요소를 제공한다. 따라서, 응용 프로그램은 센서에서 모든 인지 데이터가 중앙

지능으로 전송되고 중앙 지능에서 사물 장치로 제어를 위한 명령이 실행된다.

그러나 SLICE 에서 제안하는 모델에서는 각각의 사물 장치가 인지, 추론 및 학습과 같은

지능요소를 가지고 있으며, 이러한 사물들이 서로 협업하여 주변 환경의 공통 목표를

달성하는 과정에서 각각 독립적인 역할을 수행하며, 각각의 사물들은 다른 사물, 환경 및

사용자와의 인터랙션을 통해 자가학습 및 학습을 통한 점진적인 진화를 이루어 간다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 7/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

2.2 SLICE 서비스 플랫폼 구성

그림 2. SLICE 서비스 플랫폼 구성도

[그림 2]는 SLICE 서비스 플랫폼 구성을 도시하였다.

SLICE 서비스 플랫폼은 상위레벨 에이전트 디자인 및 소프트웨어 모듈 배포를 도와주는

도구들의 모음인 SLICE 프레임워크와 배포 된 소프트웨어 모듈이 동적으로 탑재되어 동작할

수 있는 SLICE 엔진으로 구성되어 있다.

프레임워크 중 디자인 도구를 활용하여 다수의 에이전트간의 협업을 상위 레벨의 명세

언어를 통해 쉽게 정의할 수 있으며, 빌드 시점에서 사용하는 도구를 활용하여 디자인 모델에

매칭 되는 소프트웨어 모듈들을 쉽게 개발하여 저장소로 배포 할 수 있다. 또한 실행 시점

관리 도구를 활용하면, 사용자는 PC 에서 사물에 탑재 된 엔진에 쉽게 필요한 소프트웨어

모듈들을 효율적으로 관리할 수 있다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 8/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

SLICE 의 시스템 모델은 개별 사물에서 동작하는 SLICE 엔진 및 실행 모듈 상에 센서

시스템, 인지 시스템, 추론 시스템, 학습 시스템, 액션 시스템과 지능형 IoT 서비스 플랫폼간

협업을 위한 이벤트 브로커로 구성된다.

센서 시스템은 다양한 IoT 센서장치를 통해 외부환경으로부터 데이터를 획득하고 정제한다.

예를 들어 온도센서를 통해 실내온도(또는 습도센서를 통해 실내습도)를 일정 주기로 획득한

후, 데이터를 섭씨 온도로 변환하거나 오류 데이터 또는 잡음을 제거한다.

인지 시스템은 획득된 데이터를 단일 또는 다수의 IoT 서비스를 위해 미리 정의된

정보모델에 적합하도록 상황정보로 가공한다. 예를 들어 온도 센서를 통해 획득된 온도

데이터 29 도를 ‘덥다’라는 상황정보로 가공한다.

추론(의사결정) 시스템은 상황정보를 저장하고 갱신/검색과 같이 상황정보를 관리하며

상황정보의 변경에 따라 다수 상황/액션 규칙을 추론하여 암묵적 지식과 상황변화에 대응하기

위해 필요한 액션을 유도한다. 예를 들어 실내 상황이 ‘덥다’이면 에어컨을 켜는 액션을

액션규칙 추론을 통해 유도한다.

액션 시스템은 다양한 액츄에이터 장치를 통해 액션을 실행한다. 예를 들어 에어컨을 켜는

액션이 유도되었을 때 실제 에어컨 장치를 제어해서 켜고 이를 통해 실제 외부환경에 변화를

가져온다.

학습 시스템은 사용자와의 상호작용을 지속적으로 관찰하여 액션규칙을 갱신한다. 예를

들어 사용자가 실내온도가 28 도일 때 계속 에어컨을 켜는 것을 지속적으로 관찰하여 ‘실내

온도가 28 도 이상이면 에이컨을 켜라’라는 액션규칙을 새롭게 추출한다. 기존 액션규칙을

갱신하거나 신규 액션규칙으로 추가한다.

SLICE 엔진은 JVM 상의 OSGi 프레임워크를 기반으로 구현이 되어, JVM 이 동작할 수 있는

어떠한 지능형 사물에도 탑재되어 동작할 수 있다. OSGi 프레임워크 상에서, 지능사물이

동작하는 데 필요한 다양한 소프트웨어 컴포넌트 및 학습 모델 컴포넌트들이 모듈화된 형태로

동작 한다. 또한 사용자의 명시적 명령에 의해 실행되는 액션이나 피드백에 따라, 사용자에

맞게 에이전트들의 행동 정보를 자율적으로 수정하고, 진화 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 9/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

2.3 SLICE 서비스 플랫폼 동작 모델

그림 3. SLICE 서비스 플랫폼 동작 모델도

[그림 2]는 SLICE 서비스 플랫폼 동작 모델을 도시하였다.

“외부환경 데이터 센싱” 행위(activity)를 통해 외부환경으로부터 다양한 도메인 모델에

관련된 데이터를 획득한다. 예를 들어 서비스 도메인이 댁내 환경이고 실내온도, 실내습도,

사용자 등이 도메인 모델로 정의되었다면, SLICE 서비스 플랫폼은 온도센서를 통해 실내온도를

획득하고, 습도센서를 통해 실내습도를 획득하고, 카메라를 통해 사용자 ID 를 획득한다.

이때 획득한 데이터는 기본적으로 스트림으로 가정하고 이의 처리를 위해 SLICE 서비스

플랫폼은 SW 도구(예: Edgent)를 활용하여 획득주기를 조정하거나 필터링/병합 등의 기능을

제공한다. 또한 지식 베이스(KB: Knowledge Base)에 직접 저장될 수도 있고, 추가적인 정보

해석/추출을 위해 “상황인지” 행위(activity)의 입력 값으로 활용될 수 있다.

“상황인지” 행위(activity)에서는 데이터 센싱으로 획득된 외부환경 데이터를 도메인 모델에

따라 분석(해석 및 추출)한다. 예를 들어 실내온도 데이터는 도메인 모델에 따라 ‘적정’, ‘낮음’,

‘높음’ 등의 상황정보로 해석된다.

이때 데이터 분석 도구(예: 머신러닝)를 이용하여 구현된 영상분석 기능을 통해 영상

데이터로부터 위치(좌표) 등의 정보를 추출하는 과정을 수행할 수 있다. 따라서 “상황인지”

행위(activity)의 출력은 외부환경 데이터에 대한 해석 또는 새로운 정보가 추출되어 추상화된

상황정보가 되며, SLICE 서비스 플랫폼의 지식 베이스에 저장된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 10/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

“상황/액션 추론” 행위(activity)에서는 지식 베이스에 저장된 상황정보를 활용하여

상황규칙의 추론 즉, 규칙 연쇄(chaning)를 통해 추가적인 또는 암묵적인 상황지식을 유도하여

지식 베이스에 저장하거나 액션규칙의 추론을 통해 현재 상황에서 외부환경 변화에 대응하여

실행할 액션지식을 유도한다.

“상호작용” 행위(activity)에서는 상황/액션 추론을 통해 유도된 액션을 외부환경 내 설치된

액츄에이터 장치를 기동시킴으로써 실행한다.

액션 실행 후에는 변화된 외부환경에 대한 데이터가 다시 센서 장치를 통해 획득되고, 이후

상기 절차에 의거하여 반복적으로 수행될 수 있다. 또한 액츄에이터 장치가 명령 실행 성공

후에 반환하는 값은 “상황인지” 행위(activity)의 입력으로 활용될 수도 있으며, 지식 베이스에

직접 저장될 수도 있다.

“상호작용” 행위(activity) 관련하여, 액션은 상황/액션 규칙 추론에 의해 유도되어 실행될

수도 있지만, 사용자의 명시적 명령에 의해 실행될 수도 있다. 또한 액션규칙 추론에 의한

액션 실행에서와 같이 액츄에이터 장치의 반환 값은 “상황인지” 행위(activity)의 입력으로

활용될 수도 있으며 지식 베이스에 직접 저장될 수도 있다.

실행된 사용자 액션의 내용은 이후 “액션규칙 학습” 행위(activity)을 위해 로깅되는데,

사용자 액션 로그에는 실행한 액션정보, 해당 액션실행 시점의 관련된 상황정보가 기록된다.

“액션규칙 학습” 행위(activity)에서는 사용자 액션 로그를 활용하여 새로운 액션규칙을

추출한다. 이때 연관규칙 마이닝 도구를 이용해 구현된 액션규칙 학습 기능이 활용된다.

추출된 액션규칙은 “상황/액션 추론” 행위(activity)의 입력 값으로 활용될 수 있다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 11/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

2.4 SLICE 서비스 플랫폼 사물지능 자가학습

그림 4. SLICE 서비스 플랫폼 사물지능 자가학습 구조도

[그림 4]는 SLICE 서비스 플랫폼 사물지능 자가학습 구조를 도시하였다.

SLICE 서비스 플랫폼에서, 개별 사물지능은 사용자의 명시적 명령에 의해 실행되는 액션이나 피드백에

따라 사용자에 맞게 행동 정보를 자율적으로 수정하고 학습 모델을 업데이트하여 동작한다. 그림에서 개

별 사물지능은 스스로 인지한 정보나, 다양한 사물에서 발생하는 Context 정보를 이벤트 브로커를 통해서

인지(Perception)할 수 있다. 인지 된 정보는 현재 동작 중인 정보가 처리 되고 있는 워킹 메모리(Working

Memory)를 통해 처리되어 프로덕션 메모리(Production Memory)에 있는 룰과 매칭 되어, 매칭 된 컨텍스트

는 컨텍스트(Context) 메모리에 저장 된다.

커멘드 매니저(Command Manager)는 사용자의 액션 명령을 관리하는 컴포넌트로 커멘드 로거(Command

Logger) 및 액션 인보커(Action Invoker)를 관리한다. 커멘드 로거는 커멘드 매니저에 의한 사용자의 액션

명령을 컨텍스트 에 저장된 상황 정보와 매칭시켜 액션 로그(Action Log)에 저장하는 역할을 한다. 액션

인보커는 커멘드 매니저에 요청된 사용자의 액션 명령을 실제로 실행시키는 역할을 한다. 액션 러너

(Action Learner)는 주기적으로 Action Log에 저장되어 있는 정보를 획득하여 학습에 요구되는 목표한 개수

에 도달하면 학습을 진행하고 학습이 진행 된 내용을 바탕으로 에이전트가 자가 학습(진화) 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 12/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

3. SLICE Github 저장소 구조

그림 5. SLICE Github 리포지토리 구조도

[그림 5]는 SLICE 서비스 플랫폼의 소스코드가 관리되고 있는 Github 저장소를 나타낸다

(https://github.com/slice-project). SLICE Github 저장소는 아래와 같이 6 개의 Repository 로 나뉘어

관리 되고 있으며, 각 저장소는 아래와 같은 역할을 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 13/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

3.1 메인 저장소 (https://github.com/slice-project/slice)

그림 6. SLICE Github 메인 저장소

SLICE 서비스 플랫폼의 메인 저장소로, 플랫폼과 관련 된 전반적인 내용을 포함하고 있다.

⚫ SLICE 저장소의 전반적인 구조에 대한 설명

⚫ SLICE 서비스 플랫폼 전체 소스코드 (배포판 포함)

⚫ SLICE 서비스 플랫폼 백서 및 논문 게제 자료

⚫ SLICE 개념 파악을 위한 다양한 비디오 및 발표 자료

⚫ SLICE 소스코드 관리자 Contact 정보

⚫ SLICE 사용자 가이드

버전 발행일 문서번호 페이지

1.0 2018-12-06 14/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

3.2 소스코드 저장소 (https://github.com/slice-project/slice-source)

그림 7. SLICE Github 소스코드 저장소

SLICE 서비스 플랫폼의 소스코드 저장소로, 배포판을 제외한 순수 코드자료를 포함한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 15/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

3.3 프레임워크 배포판 저장소1 (https://github.com/slice-project/slice-win32-dist)

그림 8. SLICE 프레임워크 윈도우 배포판 저장소

SLICE 서비스 플랫폼 중, SLICE 프레임워크 윈도우용 배포판을 담고 있는 저장소이다.

3.4 프레임워크 배포판 저장소2 (https://github.com/slice-project/slice-macosx-dist)

그림 9. SLICE 프레임워크 MACOSX 배포판 저장소

SLICE 서비스 플랫폼 중, SLICE 프레임워크 맥용 배포판을 담고 있는 저장소이다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 16/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

3.5 SLICE 엔진 배포판 저장소 (https://github.com/slice-project/slice-engine-dist)

그림 10. SLICE 엔진 배포판 저장소

SLICE 서비스 플랫폼 중, 사물 위에서 동작하는 SLICE 엔진 배포판에 대한 저장소이다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 17/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

3.6 SLICE 예제 구현 저장소 (https://github.com/slice-project/slice-examples)

그림 11. SLICE 예제 구현 저장소

SLICE 서비스 플랫폼을 이용해 구현한 다양한 구현 예제를 저장소의 브렌치 형태로

포함하고 있다. 2018 년 사물인터넷 국제전시회에 출품된 차량 시뮬레이터에도 SLICE

프레임워크가 사용된 예제가 포함되어 있으며, 본 가이드에서 설명하는 샘플 예제에 대한

코드와 설명도 해당 저장소에 하나의 브렌치로서 포함되어 있다. 해당 예제 코드들은 통해

SLICE 프레임워크를 이해하는데 도움을 받을 수 있다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 18/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4. SLICE 서비스 플랫폼 바로 시작하기 :: (Getting Started)

4.1 개발 환경 구성

SLICE 서비스 플랫폼을 활용하여 지능명세부터 소프트웨어 모듈 개발 및 사물에의

배포까지의 모든 단계를 수행하기 위해서는 아래와 같은 개발 환경 구축이 필요하다.

⚫ Java 8 설치 (부록)

⚫ Maven 설치 (부록)

⚫ OSGi Bundle Repository 설치 (부록)

⚫ SLICE 프레임워크 설치 >> 개발을 진행 할 PC 에 설치

⚫ SLICE 엔진 설치 >> 실제 구동 할 사물에 설치

4.1.1 SLICE 프레임워크 설치

4.1.1.1 SLICE 프레임워크 배포판 클론 (Github).

>> git clone https://github.com/slice-project/slice-win32-dist (프레임워크 배포판 클론)

버전 발행일 문서번호 페이지

1.0 2018-12-06 19/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.1.1.2 SLICE-tool 실행

win32-dist >> win32 >> slice-tools 실행

4.1.1.3 SLICE 지능명세 프로젝트 Import

>> 우클릭 >> Import >> Existing Project into Workspace >> org.etri.slice.apps >> Finish

버전 발행일 문서번호 페이지

1.0 2018-12-06 20/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.1.1.4 Pom.xml 파일 내의 <slice.home> 경로 수정

>> pom.xml 파일 내의 <slice.home>의 경로를 클론한 slice-win32-dist 디렉토리로 설정한다.

>> Maven Repo에 포함되어 있지 않은 여러 라이브러리를 포함하고 있는 경로이므로 필수 수정

4.1.1.5 프레임워크 설치 및 개발 준비 완료

버전 발행일 문서번호 페이지

1.0 2018-12-06 21/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2 SLICE 플랫폼 서비스 시나리오 구현

>> https://github.com/slice-project/slice-examples의 sample branch에서 완성 된 코드를 다운로드 가능

4.2.1 서비스 시나리오

[그림 12]은 SLICE 서비스 플랫폼을 활용하여 개발할 수 있는 간단한 서비스 예제로 홈

도메인에서 온도에 따른 선풍기 제어와 선풍기의 지능 자가학습 시나리오를 도시한 것이다.

이는 온도계 사물이 집안의 온도를 센서를 이용하여 감지하고, 사용자가 선풍기를 제어 할 때,

선풍기에 탑재 된 지능은 제어 정보와 맵핑 되는 온도 정보를 바탕으로 선풍기의 지능을

업데이트하고, 업데이트 된 자율 지능을 기반으로 향 후 선풍기를 제어를 하는 시나리오이다.

그림 12. 서비스 시나리오 구성도

버전 발행일 문서번호 페이지

1.0 2018-12-06 22/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.2 지능명세

그림 13. 지능명세 구조

[그림 13]은 지능명세의 구조를 나타낸다. 구조에서 볼 수 있 듯이 지능명세는 특정 도메인

내에서 데이터 모델(Data Model), 제어 모델(Control Model), 에이전트 프로파일(Agent Profile)로

구성 되어 있다. 데이터 모델은 컨텍스트(Context), 이벤트(Event) 및 예외처리(Exception)를

명세하며, 제어 모델은 제어(Control)에 대한 명세 그리고 에이전트 프로파일(Agent Profile)은

룰셋(Rule-set) 및 행위(Behavior), 커맨더(Commander)에 대한 명세를 진행한다. 지능명세의

세부적인 내용은 본 문서의 나머지 장에서 서비스 시나리오를 기반으로 서술하였다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 23/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.3 시나리오 기반의 지능명세 정의

그림 14. 시나리오 기반의 지능명세 정의 전체 구조

[그림 14]의 선풍기 제어 서비스 시나리오를 지능명세의 관점에서 간략하게 기술하면 다음과

같다.

도메인(Domain)은 room 으로 정의하였다. 도메인 내에서 다루어지는 데이터는

컨텍스트(Context)에서 정의를 하며, Temperature 가 컨텍스트로 정의되었다.

이벤트(Event)의 경우 TemperatureChanged 를 정의하여 사용한다. 이벤트는 1 개 이상의

콘텍스트를 담을 수 있는데, Temperature 컨텍스트를 포함하여 이벤트 브로커를 통해 다른

사물과 공유가 되도록 정의하였다.

제어 모델(Control Model)은 도메인 내에서 제어할 수 있는 내용에 대해서 정의하는 부분으로

선풍기는 전원에 해당하는 Power 와 선풍기의 강도에 해당하는 Level 을 정의하였다.

에이전트 프로파일(Agent Profile)은 온도 감지기의 경우 온도 정보(Context)를 받아서

브로커에게 온도변화 감지 이벤트(Event)로 전송하는 행위(Behavior)를 정의하였고, 선풍기의

경우 온도 변화 감지 이벤트를 받아, 선풍기의 강도를 제어하는 행위(Behavior)와 함께

컨텍스트 메모리에 저장 된 온도 정보와, 사용자의 명시적 액션을 기반으로 학습하는

커멘더(Commander)의 내용이 정의되었다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 24/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.3.1 : 지능명세 도메인 (Domain)

>> 이 예제 시나리오의 domain은 room으로 정의하였다.

4.2.3.2 : 지능명세 데이터 모델 (Data Model)

본 장에서는 지능명세의 데이터 모델에 대한 내용을 기술하였다. 데이터 모델은 컨텍스트(Context), 이

벤트(Event), 예외처리(Exception) 명세를 포함한다. 컨텍스트는 센서 및 액추에이터로부터 발생하는 데

이터의 타입 및 이름을 정의하는 것이고, 이벤트는 발생시 이벤트 버스(Event Bus)를 통해 공유되는 값

들에 대해 정의하는 것이다. 예외처리는 예외적인 상황에 대한 처리를 기술하는 것이다. [그림 15]는 예

제 시나리오에 대한 컨텍스트 및 이벤트 구성에 대한 명세를 나타낸다.

그림 15. 시나리오 기반의 데이터 모델 정의

예제 시나리오에서 컨텍스트는 [그림 15]와 같이 Temperature로 정의한다. Temperature는 온도를 감

지하기 위해서 사용하는데, 온도 정보를 포함한다.

이벤트는 [그림 15]와 같이 TemperatureChanged로 정의한다. TemperatureChanged는 온도의 변화

가 감지되었을 때, 컨텍스트에서 정의된 Temperature 정보를 포함한 이벤트를 temperature_changed

토픽으로 발생한다. 이때 도메인 내에서 이벤트 발생에 따른 값을 공유하기 위해 MQTT 프로토콜을 사

용한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 25/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.3.3 : 지능명세 컨트롤 모델 (Control Model)

본 장은 지능명세의 제어 모델에 대한 내용을 기술하였다. 제어 모델은 정의된 도메인 내에서 제어하

고자 하는 내용을 미리 정의하는 부분으로 속성(Property)와 동작(Opeation) 두가지 형태로 정의할 수

있다.

그림 16. 시나리오 기반의 컨트롤 모델 정의

예제 시나리오에서 제어는 [그림 16]과 같이 ElectronicFan으로 정의한다. ElectronicFan은 전원을 켜

고 끄거나 선풍기의 강도를 조절하기 위한 동작을 속성(Property) 형태로 정의한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 26/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.3.4 : 에이전트 프로파일 (Agent Profile)

본 장에서는 지능명세의 에이전트 프로파일에 대한 내용을 기술하였다. 에이전트 프로파일은 룰셋

(Rule-set) 및 행위(Behavior), 커멘더(Commander) 명세를 포함한다.

예제 시나리오에서 에이전트는 [그림 17]과 같이 TemperatureDetector와 FanController로 정의한다.

TemperatureDetector는 온도를 감지하여, 온도 변화 이벤트를 다른 사물과 공유하는 역할을 하고,

FanController는 공유 된 온도 정보를 바탕으로 선풍기를 제어하며, 커멘더(Commander)에 정의 된 컨

텍스트와 액션 제어 관계를 이용하여 사용자의 액션 정보를 바탕으로 사물 스스로 점진적인 학습을 진행

해 나간다.

그림 17. 시나리오 기반의 에이전트 모델 정의

버전 발행일 문서번호 페이지

1.0 2018-12-06 27/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

예제 시나리오에서 에이전트는 [그림 17]과 같이 TemperatureDetector와 FanController로 정의한다.

ElectronicFan은 전원을 켜고 끄거나 선풍기의 강도를 조절하기 위한 동작을 속성(Property) 형태로 정

의한다.

특정 조건에서 액션을 하도록 하는 룰 기반의 에이전트의 개념에서 [그림 17]에 명세 된 룰셋(Rule-

set)은 ID를 정의하고 행위(Behavior)는 조건과 그에 따른 액션를 정의한다.

룰셋(Rule-set) 및 행위(Behavior)는 예제 시나리오에서 TemperatureDetector의 경우 Group-id를

“org.etri.slice” Artifact-id를 “temperaturedetector”로 정의하였으며, 이는 temperaturedetector_rules

에 대한 검색이 가능하도록 하는 고유한 ID가 된다. 또한 Temperature가 생성되었을 때

TemperatureDetected라는 이벤트를 발생시키도록 ‘Temperature Change Detection’이라는 Behavior를

정의하였다. FanController의 경우 Group-id를 “org.etri.slice” Artifact-id를 “fancontroller”로 정의하였

으며, 이는 fancontoller_rules에 대한 검색이 가능하도록 하는 고유한 ID가 된다.

커멘더(Commander)는 예제 시나리오에서 fan_level에 대한 커맨드가 정의 되었다. 이는 action에 명

시 된 ElectronicFan.setLevel의 명시적인 액션이 호출 될 때, FanController가 Context 메모리에 저장

하고 있는 컨텍스트 정보와 액션정보를 매칭하여 로깅하고, 해당 로깅 정보는 추후 학습을 위해 사용된

다. 커멘더 명세에 의한 사물지능 자가학습의 방법 및 구조는 2.4절 SLICE 서비스 플랫폼 사물지능 자

가학습에서 자세히 설명하였다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 28/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.4 지능명세 기반의 소스코드 생성

[그림 18]은 예제 시나리오에서 지능명세 작성시 요구되는 내용을 도시하였다. 본 문서에서

지능명세는 Agent Definition Language 확장자 파일(.adl )에 포함되어 있다.

그림 18 정의 된 지능명세 기반의 자동소스코드 생성

[그림 18]는 지능명세 작성에 따른 자동 소스코드 생성을 도시하였다. 그림의 파랑색 점선의

내용과 같이 예제 시나리오에 맞는 데이터 모델, 제어 모델, 에이전트 프로파일로 구성되는

room.adl 파일을 생성하면 지능명세 작성은 완료가 되며, 이에 대응 되는 빨강색 실선에

포함된 소스코드들이 자동생성된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 29/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.5 자동 생성 된 소스코드에 대한 구현.

이후 자동 생성 된 소스코드에 대한 구현 단계가 요구된다. 자동 생성된 소스코드에서

Model 패키지(org.etri.slice.models)는 지능명세의 데이터 모델 관련 컨텍스트와 이벤트 및 제어

모델 관련 제어를 포함한다. Rule 패키지(org.etri.slice.rules)는 지능명세의 에이전트 프로파일

관련 룰셋을 포함하고, Agent 패키지(org.etri.slice.agents)는 에이전트 프로파일 관련 행위와

명령을 포함한다. Device 패키지(org.etri.slice.devices)는 디바이스 구현과 관련이 있고, Distribution

패키지(org.etri.slice.distribution)는 파일의 배포와 관련이 있다.

이 중 Rule 패키지와 Device 패키지의 경우 필수적으로 구현하여 배포하여야 하며, Agent

패키지의 경우 컨텍스트 및 이벤트 데이터에 대한 스트림 처리가 필요할 경우 선택적으로

구현을 진행한다.

4.2.5.1 Rule 패키지에 대한 추가 구현

그림 19 자동 생성 된 Rule 코드 및 구현 (Temperature Detector)

버전 발행일 문서번호 페이지

1.0 2018-12-06 30/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

[그림 19]는 지능명세 중 Temperature Detector 에이전트 프로파일 명세 Rule 코드 자동 생성

및 그에 대한 구현 사항을 도시하였다. 지능명세에 따라, temperaturedetector-rules.drl 파일이

그림과 같이 생성되며, 해당 룰 파일에 대한 파라미터 수정을 진행하면, 룰에 대한 구현이

완료된다.

그림 20 자동 생성 된 Rule 코드 및 구현 (FanController)

[그림 20]는 지능명세 중 FanController 에이전트 프로파일 명세 Rule 코드 자동 생성 및 그에 대한 구현

사항을 도시하였다. 지능명세에 따라, fancontroller-rules.drl 파일(Behaviors 명세에 의해)과 fan_level.drl

(Commander 명세에 의해) 그림과 같이 생성되며, fancontroller-rules.drl에는 명시적인 룰을 포함하고 있지

않으며, fan_level.drl 파일은 초기 룰은 포함하고 있지 않으나, 커멘더 정의에 따라 커멘더 호출 시 스스로

점진적으로 업데이트 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 31/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.5.2 Device 패키지에 대한 추가 구현

본 장에서는 디바이스 구현에 대한 내용을 기술하였다. 예제 시나리오에서 TemperatureDetector의 경

우 에이전트 프로파일에 따라 디바이스 구현 템플릿은 [그림 21]과 같이 생성 된다. 해당 클래스는 에이

전트 프로파일에서 컨텍스트 정의 및 제어에서 메소드가 정의되면 생성된다. TemperatureDetector는 컨

텍스트에 대한 처리 만을 담당하게 되는데 컨텍스트의 경우 생성된 템플릿을 OSGi Event Publish를 이용

하여 SLICE 프레임워크 어댑터로 데이터를 전달하는 바인딩이 필요하다.

그림 21 자동 생성 된 Device 코드 (TemperatureDetector)

본 예제에서는 사용자가 GUI를 통해 온도 정보를 입력하여 OSGi Event Publish를 이용하여 SLICE

프레임워크 어댑터로 데이터를 전달하는 바인딩을 구현하였다[그림 22].

버전 발행일 문서번호 페이지

1.0 2018-12-06 32/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

그림 22 자동 생성 된 Device 구현 예제 (TemperatureDetector)

버전 발행일 문서번호 페이지

1.0 2018-12-06 33/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

FanController의 경우 에이전트 프로파일에 따라 디바이스 구현은 템플릿은 [그림 23]과 같이 생성

된다. 해당 클래스는 에이전트 프로파일에서 컨텍스트 정의 및 제어에서 메소드가 정의되면 생성된다.

FanController는 제어에 대한 처리 만을 담당하게 되는데, 제어의 경우 생성된 템플릿에 해당 제어 인터

페이스를 실제 제어하고자 하는 디바이스에 바인딩 할 수 있는 구현체가 필요하다.

그림 23 자동 생성 된 Device 코드 (FanController)

본 예제에서는 제어 인터페이스 호출에 대하여, 자체 변수에 값을 관리하는 Getter/Setter에 대한 바

인딩을 구현하였다. [그림 24].

버전 발행일 문서번호 페이지

1.0 2018-12-06 34/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

그림 24 자동 생성 된 Device 구현 예제 (FanController)

버전 발행일 문서번호 페이지

1.0 2018-12-06 35/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.2.5.3 Agent 패키지에 대한 추가 구현 (옵션사항)

본 장에서는 에이전트 패키지 중 스트림(Stream) 패키지의 추가 구현사항에 대한 내용을 기술하였다.

SLICE 프레임워크는 어댑터에서 전달된 데이터를 SLICE 코어에 적용이 용이하도록 데이터를 가공(예:

필터링)하는 기능을 수행하는 스트림 스텁(Stream Stub)을 자동으로 생성하여 제공한다. 이러한 데이터

가공 역할을 수행하기 위해 제공되는 스트림 스텁(Stream Stub)은 컨텍스트 어댑터(Context Adaptor),

이벤트 어댑터(Event Adaptor) 및 이벤트 채널(Event Channel) 각각의 스텁(Stub)들과 SLICE 프레임워

크 코어 사이에 위치한다.

스트림(Stream)은 시나리오에서 TemperatureDetector 에이전트의 경우 기술된 명세에 따라

TemperatureStream.java와 TemperatureChangedStream.java를 생성 제공한다.

TemperatureStream.java는 Temperature 어댑터로부터 전달되는 데이터를 가공하여 SLICE 코어에 전

달하고, TemperatureChangedStream.java는 SLICE 코어에서 전달된 데이터를 가공하여

TemperatureChangedChannel.java로 전달한다. TemperatureDetector의 경우 에이전트 프로파일에 따

라 스트림에 대한 템플릿은 [그림 25]과 같이 생성 된다.

그림 25 자동 생성 된 Temperature Stream 코드 (TemperatureDetector)

본 예제에서는 디바이스에서 Agent로 publish되는 온도 정보를 10초 간의 타임윈도우내의 평균을

내어 컨텍스트 메모리로 데이터를 전달하는 Stream 로직을 구현하였다.[그림 26].

버전 발행일 문서번호 페이지

1.0 2018-12-06 36/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

그림 26 TemperatureStream 코드에 대한 예제 구현 (TemperatureDetector)

지금까지의 단계를 모두 마치면, 시나리오에 기반한 지능명세부터 자동 생성 된 소스코드의

구현까지의 단계가 완료 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 37/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.3 서비스 시나리오 배포 및 구동

본 장에서는 4.2 절에서 완성한 소스코드에 대한 배포 및 목표 디바이스에서의 구동에 대한

내용을 기술하였다.

4.3.1 목표 디바이스에 직접 복사하여 구동하는 방법.

본 장에서는 목표 디바이스에 직접 프레임워크 배포 버전을 복사하여 구동하는 방법에 대해

서술하였다. 이를 위해, 먼저 배포 버전을 빌드하고, 빌드 된 파일을 목표 디바이스로 옮겨

실행하는 방법으로, 구동을 진행한다.

4.3.1.1 배포 버전 빌드 방법

먼저 [그림27]과 같이 프로젝트 최상위 폴더에 있는 pom.xml에 대한 빌드를 진행한다.

그림 27 전체 소스코드에 대한 빌드 방법

버전 발행일 문서번호 페이지

1.0 2018-12-06 38/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

전체 소스코드에 대한 빌드가 완료 되면, [그림 28]과 같이 org.etri.slice.distribution 폴더에 있는 pom.xml

파일에서 빌드하고자 하는 Agent 및 Device 구현을 포함하여 빌드를 진행한다.

그림 28. 배포 버전 소스코드에 대한 빌드 방법

배포버전에 대한 빌드가 완료되면, 생성 된 target 폴더를 구동하고자 하는 디바이스로 복사하여, 운영

체제에 따라 run_slice.bat 혹은 run_slice.sh 파일을 실행하여 구동한다.

>> windows :: run_slice.bat

>>linux :: bash run_slice.sh

버전 발행일 문서번호 페이지

1.0 2018-12-06 39/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.3.2 OBR(OSGi Bundle Repository)를 사용한 배포 및 구동하는 방법

4.3.2.1 OSGi Bundle Repository 구축

부록 5.3절을 참조하여 OSGi Bundle Repository 서버를 구축한다.

4.3.2.2 OSGi Bundle Repository로 구현 모듈 배포

부록 5.3.6절을 참조하여, Maven에 OBR을 설정하고, maven deploy 활용하여 필요한 소프트웨어 모듈

을 OSGi Bundle Repository로 배포한다.

그림 29. OBR 배포 후 Repository 배포 상태 확인

배포가 정상적으로 완료되면, OBR에 접속하여 배포가 완료 된 SW 모듈들의 상태를 [그림 29]와 같이

확인할 수 있다.

4.3.2.3 목표 디바이스에 SLICE 엔진 구동

목표 디바이스에 SLICE 엔진이 구동되어 있으면, 웹을 통해 접속하여 필요한 SW 모듈을 동적으로 다

운로드, 인스톨, 업데이트, 시작, 정지 등의 작업을 수행할 수 있다. 이를 위해 먼저 목표 디바이스에

SLICE 엔진을 설치해야 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 40/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

SLICE 엔진은 3.5장에 소개 된 SLICE 엔진 배포판 저장소를 통해 쉽게 설치할 수 있다.

>>git clone https://github.com/slice-project/slice-engine-dist

>>cd slice-engine-dist

>>bash run_slice.sh

그림 30. SLICE 엔진 코드 클론 및 구동

그림 31. 목표 디바이스 접속 및 SW 모듈 검색

버전 발행일 문서번호 페이지

1.0 2018-12-06 41/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

그림 32. 필요한 소프트웨어 동적 배포 및 구동

[그림 30]과 같이 목표 디바이스에 SLICE 엔진의 구동을 완료 하면, [그림 31] 및 [그림 32]와 같이

웹을 통해 접속하여 필요한 SW 모듈을 동적으로 관리할 수 있고, 배포 및 구동이 가능하다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 42/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.4 서비스 시나리오 구동 결과

4.4.1 TemperatureDetector 구동 결과

그림 33. TemperatureDetector 구동 결과 화면

목표하는 디바이스에 SLICE 엔진의 구동 및 TemperatureDetector에 필요한 소프트웨어 모듈을 배포

및 구동 완료하면 [그림 33]과 같은 결과 화면이 나타난다. 본 예제에서는 GUI를 통해 사용자가 온도

정보를 Temperature Detector에 전달할 수 있다. 그림은 24도의 온도를 GUI를 통해 삽입 했을 때, 동

작하는 콘솔 화면을 나타낸다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 43/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.4.2 FanContoller 구동 결과

그림 34. FanController 구동 결과 및 Jconsole을 통한 커멘더 (RMI) 호출

목표하는 디바이스에 SLICE 엔진의 구동 및 FanController에 필요한 소프트웨어 모듈을 배포 및 구동

완료하면 [그림 34]에 층 콘솔과 같은 결과 화면이 나타난다. TemperatureDetector로 부터 온도 정보를

받고, 해당 온도에 적합한 선풍기의 강도(Level)를 왼쪽 그림에 있는 Jconsole을 활용하여 RMI를 통해

호출 할 수 있다. 사용자의 이러한 명시적 액션 호출에 따라서, 해당 액션과 관계를 갖는 context 정보가

추후 사물 자가학습을 위해 로깅된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 44/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

4.4.3 시나리오 수행에 따른 자가학습 결과 (룰 생성)

그림 35. 무작위 시나리오 수행화면 (FanController)

[그림 35]는 Jconsole을 활용하여 선풍기 에이전트에 대해서, 온도에 따른 선풍기의 강도를 아래와 같

은 쌍으로 계속해서 호출한 화면을 나타낸다.

[21 – 0, 22 – 0, 24 – 1,26 – 2, 25 – 2, 27 – 2, 28 – 3, 29 – 3, 30 – 4, 31 – 4, 32 – 4]

위의 커맨더 호출에 대하여 28번 째의 호출이 지난 후 [그림 36]과 같은 FanController의 자가학습을

통해서 생성 된 룰을 확인 할 수 있다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 45/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

그림 36. 시나리오 수행에 따른 룰 생성 결과 (FanController 자가학습)

버전 발행일 문서번호 페이지

1.0 2018-12-06 46/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5. 부록 (Appendix)

5.1 Maven 설치

Apache Maven은 소프트웨어 프로젝트 관리 툴이다. POM(project object model)의 개념 위에서, Maven은

project의 build와 보고서 만들기나 문서화를 정보의 중앙관리를 통해 관리할 수 있다.

5.1.1 다운로드 및 & 압축 풀기

http://maven.apache.org/download.cgi 에서 Binary zip archive를 받아서,

원하는 위치에 풀어 놓는다.

5.1.2 환경 변수 설정하기

1) 시스템 변수에 MAVEN_HOME을 추가하고 설치된 경로로 설정

2) 시스템 변수 Path에 %MAVEN_HOME%\bin을 추가 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 47/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.1.3 CMD를 통해서 정상 설치 확인

>> mvn –version

버전 발행일 문서번호 페이지

1.0 2018-12-06 48/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.2 JDK 1.8 설치

5.2.1 다운로드 및 & 설치

http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 Java SE 를 다운로드 한

후 받은 파일을 설치한다.

5.2.2 환경 변수 설정하기

1) 시스템 변수에 JAVA_HOME을 추가하고 설치된 경로로 설정

2) 시스템 변수에 CLASSPATH를 추가하고 %JAVA_HOME%\lib을 추가한다

3) 시스템 변수 Path에 %JAVA_HOME%\bin을 추가 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 49/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.2.3 CMD를 통해서 정상 설치 확인

>> javac –version

버전 발행일 문서번호 페이지

1.0 2018-12-06 50/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.3 OBR 구축

5.3.1 Nexus 2 개요

Nexus는 Maven 내부 원격 저장소로 활용할 수 있도록 자원하는 오픈 소스 툴로 자바 기반으로 개발되

어 있으며 웹 기반 사용자 인터페이스를 제공한다.

Nexus는 무료(OSS) 및 상용(Pro) 버젼이 있으므로 무료 버젼인 Nexus Repository OSS(Open Source

Software)을 설치한다. https://www.sonatype.com/nexus-repository-oss

※ 3.x 버전에서는 아직 OBR를 지원하고 있지 않으므로 2.x 버젼을 사용한다.

OBR의 지원 계획이 없는 것은 아니고 현재 순차 적으로 지원하는 과정인 것 같다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 51/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.3.2 Nexus 2 설치

배포본은 필요한 모든 것을 포함하고 있으므로 압축을 해지하여 사용한다. 설치 경로 제약이

없음으로 압축 파일을 다음과 같이 임의의 위치에 압축을 해지한다.

윈도우의 경우는 Program Files 디렉터리에는 설치하지 않는다.

D:\DEVTOOLS\nexus-2.14.8-01-bundle

설치 디렉터리 하위에 다음과 같이 응용 프로그램 디렉터리 (nexus-3.11.0-01)와 데이터

디렉터리 (sonatype-work)가 생성된다.

- 설치(응용 프로그램, nexus-3.11.0-01) 디렉터리

이 디렉터리에는 Nexus Repository Manager 응용 프로그램과 Java 라이브러리 및 구성 파일과

같은 필요한 모든 추가 구성 요소가 들어 있다.

기본적으로 디렉터리 이름은 nexus- 버전 이름을 사용 한다.

디렉터리 설명

bin nexus 시작 스크립트 자체와 시작 관련 구성 파일

conf 설정 파일들을 포함

lib Apache Karaf와 관련된 바이너리 라이브러리

logs 로그 파일 포함

nexus Nexus Web Application

버전 발행일 문서번호 페이지

1.0 2018-12-06 52/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

tmp Nexus Web Application 임시 파일 포함

- 데이터 디렉터리(sonatype-work)

이 디렉터리는 저장소 관리자가 저장하고 관리하는 모든 저장소, 구성 요소 및 기타 데이터를

포함한다.

데이터 디렉터리의 기본 위치는 sonatype-work/nexus2로 설치 디렉터리 에 상대적위치이다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 53/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.3.3 Nexus 실행

nexus를 실행하면 다음과 같이 사용법이 출력된다.

D:\DEVTOOLS\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin>nexus

Usage: nexus { console : start : stop : restart : install : uninstall }

계속하려면 아무 키나 누르십시오 . . .

- console

console 명령으로 실행 시에는 현재 shell 상에서 구동되므로 shell 을 종료하거나 CTRL-C 를

클릭하여 종료할 수 있다.

윈도우: 명령 프롬프트 상에서 실행

D:\DEVTOOLS\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin>nexus console

※ 다음과 같은 에러메시지가 표시될 때는 명령창을 관리자 권한으로 실행한다.

wrapper | OpenSCManager failed - 액세스가 거부되었습니다. (0x5)

리눅스:

./nexus console

버전 발행일 문서번호 페이지

1.0 2018-12-06 54/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- install/uninstall

윈도우에서는 nexus를 서비스로 등록/해지하기 위하여 install/uninstall 명령을 사용한다. 서비스

등록 후 start 명령으로 서비스를 구동 할 수 있다.

D:\DEVTOOLS\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin>nexus install

wrapper | nexus installed.

D:\DEVTOOLS\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin>nexus uninstall

※ 윈도우의 경우 다음과 같이 관리도구>서비스에서 등록된 것을 확인 할 수 있다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 55/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- start/stop

리눅스에서는 start 로 nexus 를 백그라운드로 실행할 수 있다. 하지만 윈도우에서는 install

명령으로 서비스 설치 후 start 명령을 사용할 수 있다.

※ 윈도우의 경우 서비스로 등록(nexus install) 후 "관리도구>서비스" 화면에서 시작 할 수 있다.

D:\DEVTOOLS\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin>nexus start

wrapper | Starting the nexus service...

wrapper | Waiting to start...

wrapper | Waiting to start...

wrapper | nexus started.

버전 발행일 문서번호 페이지

1.0 2018-12-06 56/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.3.4 웹 사용자 인터페이스

디폴트로 8081 포트를 사용하고 context는 nexus를 사용 하므로 설치 후 브라우저에서 다음과

같은 URL로 연결한다.

http://localhost:8081/nexus

우측상단 Log In 링크를 클릭하여 로그인 한다. 디폴트 사용자 아이디 및 비밀번로는

admin/admin123이며 로그인 후 우상단의 admin/profile 창에서 비밀번호를 변경한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 57/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

좌측에서 View/Repositories 하위의 Repositories 메뉴를 클릭하면 저장소를 관리하는 화면이

우측에 표시된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 58/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

Nexus를 설치하면 기본적으로 다음과 같이 저장소들이 기본적으로 생성된다.

Public repository

Central, 3rd party, Releases, Snapshots 의 Repository Group 으로 이 Repository 를 pom.xml

파일에서 사용하면 포함된 모든 저장소의 라이브러리들을 사용할 수 있다.

Central

Maven Central Repository의 Proxy Repository

버전 발행일 문서번호 페이지

1.0 2018-12-06 59/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

3rd party

Central 에서 지원하지 않는 타 회사/기관 등에서 제공하는 라이브러리들을 위한 Hosted

Repository

※ Hosted Repository란 로컬 저장소에서 직접 관리하고 서비스 한다는 의미

Releases

사내에서 개발 완료된 배포본 라이브러리들을 위한 Hosted Repository

Snapshots

사내에서 개발 중에 있어 지속적으로 변경되는 라이브러리들을 위한 Hosted Repository

버전 발행일 문서번호 페이지

1.0 2018-12-06 60/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.3.5 OBR(OSGi Bundle Repository) 저장소 생성

- Nexus OBR Plugin 플러그인 설치

Nexus Repository Manager Pro 에는 디폴트로 설치되어 있으나 상용 이므로 Nexus Repository

Manager OS에서는 다음과 같이 "Nexus OBR Plugin" 플러그인을 다운로드 받아 설치해야 한다.

http://search.maven.org/#search%257Cga%257C1%257Ca%253A%2522nexus-obr-

plugin%2522%2520AND%2520l%253A%2522bundle%2522

bundle.zip 파일을 다운로드 받아 [nexus 설치 경로]/sonatype-work/nexus/plugin-repository 에

압축을 풀고 nexus를 재 구동 한다.

※ 압축 파일 내에 번들 디렉터리가 있으므로 현재 디렉터리에 풀기로 압축을 푼다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 61/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

다음과 같이 저장소 추가 시 Provider로 OBR이 추가된 것을 확인 할 수 있다.

- OBR 저장소 추가

Nexus 에서 OBR 저장소를 추가하는 방법은 다음과 같이 3 가지 방법을 제공한다. 결론적으로

말하면 처음 OBR을 구축 시에는 Hosted OSGi Bundle Repository 형태로 구축해야 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 62/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

Proxy OSGi Bundle Repositories

기존에 존재하는 원격으로 접근 가능한 XML 파일 형태의 OBR 저장소에 대한 proxy 를

지원하며 Add Proxy Repository 화면에서 Provider 를 OBR 을 선택하고 Remote Storage

Location에 XML 파일 URL을 입력하여 생성한다.

URL에서는 http://, https:// or ftp:// 등을 지원 한다.

Hosted OSGi Bundle Repositories

로컬에 존재하는 Repository.,xml 파일로 서비스 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 63/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

Virtual OSGi Bundle Repositories

기존의 Maven Repository 를 이용하여 OSGi Bundle Repository 로 제공되도록 가상 저장소를

생성하도록 설정할 수 있다.

다음과 같이 Source Nexus Repository ID에 소스가 되는 Maven Repository ID를 설정한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 64/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

버전 발행일 문서번호 페이지

1.0 2018-12-06 65/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.3.6 Maven deploy 를 이용한 OBR 배포

생성된 Nexus OBR에 Maven deploy를 통하여 저장소에 Deploy 한다.

- Maven 사용자 설정 파일

먼저 저장소에 대한 접근을 위하여 사용자 아이디와 비밀번호를 Maven에 설정한다.

사용자 Maven 설정은 "[사용자 디렉터리]/.m2/settings.xml"에 다음과 같이 설정한다.

id 는 Nexus OBR 생성 시 사용한 Repository ID 를 사용하고 username/password 에는 nexus

로그인 아이디 및 비밀번호를 설정한다.

<settings>

<servers>

<server>

<id>slice-obr-hosted</id>

<username>admin</username>

<password>admin123</password>

</server>

</servers>

</settings>

버전 발행일 문서번호 페이지

1.0 2018-12-06 66/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Maven POM 파일

Maven deploy 시 배포 할 Repository 는 distributionManagement 에서 정의하고

번들은 org.apache.felix/maven-bundle-plugin maven plug-in을 사용한다.

maven-bundle-plugin maven plug-in 설정

remoteOBR: OBR Repository ID

url: OBR RepositoryURL

distributionManagement/repository

id: OBR Repository ID

url: OBR RepositoryURL

※ remoteOBR/id에 사용한 Repository ID는 settings.xml에 사용한 Repository ID와 같아야 한다.

테스트용 pom.xml 예)

<project ....

<build>

<plugins>

<plugin>

<groupId>org.apache.felix</groupId>

<artifactId>maven-bundle-plugin</artifactId>

<configuration>

<instructions>

<Private-Package>${private.packages}</Private-Package>

</instructions>

<remoteOBR>slice-obr-hosted</remoteOBR>

버전 발행일 문서번호 페이지

1.0 2018-12-06 67/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

<url>http://localhost:8081/nexus/content/repositories/slice-obr-hosted</url>

</configuration>

</plugin>

...

</plugins>

</build>

...

<distributionManagement>

<repository>

<id>slice-obr-hosted</id>

<url>http://localhost:8081/nexus/content/repositories/slice-obr-hosted</url>

</repository>

</distributionManagement>

maven deploy 를 실행하면 maven-bundle-plugin 은 OBR Repository 의 repository.xml 파일을

갱신하고 distributionManagement에 설정된 저장소에 번들 jar 파일들을 업로드 한다.

※ 서브 모듈로 구성된 Maven Project 인 경우 Base Directory 를 pom.xml 파일이 있는 경로로

설정해야 한다.

예) ${workspace_loc:/Test123/org.etri.slice.generated}

배포가 완료되면 다음 화면과 같이 저장소에 업로드 된 파일들을 확인할 수 있다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 68/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- OBR 저장소 이름 설정

처음 Nexus 에서 OBR 저장소를 생성하면 repository.xml 파일이 생성되지 않고 maven-bundle-

plugin이 수행되면서 파일이 생성된다.

하지만 Maven Bundle Plugin에 의하여 생성된 repository.xml 파일의 <repository>에 name 속성이 설정

되지 않는다.

이러한 이유로 다음과 같이 Felix Web Console 에서 OBR 이름이 null 로 표시되는 문제가

발생한다.

- 현상

다음과 같이 Felix Web Console에서 OBR 이름이 null로 표시된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 69/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- 원인

Felix 웹 콘솔은 repository.xml의 root element인 <repository>에 name 속성의 값을 이름으로 표시합

니다.

하지만 Maven Bundle Plugin에 의하여 생성된 repository.xml 파일의 <repository>에 name 속성이 설정

되지 않기 때문이다.

- Maven Bundle Plugin 소스 검토

Maven Bundle Plugin 3.5.0 소스 분석 결과 해당 플러그인은 ObrUpdate 라는 클래스를 이용하여 업데이트

를 수행한다.

초기 Nexus OBR 저장소 생성시 Repository.xml 파일이 생성되지않은 상태에서 플러그인이 구동되면

로컬 메모리에 빈 repository를 생성(이름을 설정 하지 않은 RepositoryImpl 객체)된다.

생성된 빈 repository을 xml로 변화 시에도 이름을 설정하지 않고 repository 객체에 설정된 이름을 사

용하므로 name 속성이 설정되지 않는다.

이름을 설정하는 속성 및 코드 구현이 되어 있지 않으며 현재 remoteOBR에 설정 가능한 값이 명확치

않다., 공식 문서 및 다른 사이트의 설명 문서 상에는 저장소 이름이라고 되어 있으나 실제는 NONE(디

버전 발행일 문서번호 페이지

1.0 2018-12-06 70/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

폴트), false, true, 저장소 파일 이름 문자열 등을 입력 받는다.

이 속성은 NONE이 아니면 원격 OBR을 사용하도록 되고 url 속성에 설정된 URL을 리모트 OBR의 경로

로 사용한다.

검토한 바로는 현재 저장소 이름을 변경하는 속성은 없다.

다만, Nexus 웹 디렉터리의 repository.xml 파일을 다음과 같이 임의로 수정하면 Felix web Console에

서도 저장소의 이름이 표시된다.

저장소 위치: [nexus 2 설치 경로]/sonatype-work\nexus\storage\slice-obr-hosted

※ slice-obr-hosted: OBR 저장소 이름

<repository lastmodified='20180525074301.765'>

→ <repository name="slice" lastmodified='20180525074301.765'>

버전 발행일 문서번호 페이지

1.0 2018-12-06 71/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- 참고 자료: Maven Bundle Plugin 3.5.0 소스

ObrUpdate.java

/**

* Parse the repository descriptor file.

*

* @throws MojoExecutionException if the plugin failed

*/

public void parseRepositoryXml() throws MojoExecutionException

{

File fout = new File( m_repositoryXml );

if ( !fout.exists() )

{

m_repository = new RepositoryImpl();

writeRepositoryXml();

}

else

{

try

{

m_repository = ( RepositoryImpl )

new DataModelHelperImpl().repository( m_repositoryXml.toURL() );

if ( setURI != null )

{

setURI.invoke( m_repository, ( String ) null );

}

}

catch ( Exception e )

{

throw new MojoExecutionException( "Unable to read repository xml: "

+ m_repositoryXml, e );

}

}

}

public void updateRepository( URI bundleJar, URI sourceJar, URI docJar ) throws MojoExecutionException

버전 발행일 문서번호 페이지

1.0 2018-12-06 72/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

{

m_repository.addResource( m_resourceBundle );

m_repository.setLastModified( System.currentTimeMillis() );

}

public void writeRepositoryXml() throws MojoExecutionException

{

m_logger.info( "Writing OBR metadata" );

File file = null;

Writer writer;

try

{

file = File.createTempFile( "repository", ".xml" );

writer = new OutputStreamWriter( new FileOutputStream( file ) );

}

catch ( IOException e )

{

m_logger.error( "Unable to write to file: " + file.getName() );

e.printStackTrace();

throw new MojoExecutionException( "Unable to write to file: " + file.getName() + " : " + e.getMessage() );

}

try

{

new DataModelHelperImpl().writeRepository( m_repository, writer );

}

catch ( IOException e )

{

throw new MojoExecutionException( "Unable to write repository xml", e );

}

try

{

writer.flush();

writer.close();

버전 발행일 문서번호 페이지

1.0 2018-12-06 73/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

File outputFile = new File( m_repositoryXml );

outputFile.getParentFile().mkdirs();

FileUtils.rename( file, outputFile );

}

catch ( IOException e )

{

e.printStackTrace();

throw new MojoExecutionException( "IOException" );

}

}

RepositoryImple.java

public class RepositoryImpl implements Repository

{

private String m_name = null;

private long m_lastmodified = System.currentTimeMillis();

private String m_uri = null;

private Resource[] m_resources = null;

private Referral[] m_referrals = null;

private Set m_resourceSet = new HashSet();

public RepositoryImpl()

{

}

DataModelHelperImpl.java

public void writeRepository(Repository repository, Writer writer) throws IOException

{

XmlWriter w = new XmlWriter(writer);

toXml(w, repository);

}

private static void toXml(XmlWriter w, Repository repository) throws IOException

{

버전 발행일 문서번호 페이지

1.0 2018-12-06 74/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss.SSS");

w.element(RepositoryParser.REPOSITORY)

.attribute(RepositoryParser.NAME, repository.getName())

.attribute(RepositoryParser.LASTMODIFIED, format.format(new

Date(repository.getLastModified())));

if (repository instanceof RepositoryImpl)

{

Referral[] referrals = ((RepositoryImpl) repository).getReferrals();

for (int i = 0; referrals != null && i < referrals.length; i++)

{

w.element(RepositoryParser.REFERRAL)

.attribute(RepositoryParser.DEPTH, new Integer(referrals[i].getDepth()))

.attribute(RepositoryParser.URL, referrals[i].getUrl())

.end();

}

}

Resource[] resources = repository.getResources();

for (int i = 0; resources != null && i < resources.length; i++)

{

toXml(w, resources[i]);

}

w.end();

}

버전 발행일 문서번호 페이지

1.0 2018-12-06 75/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.3.7 Felix 구동 및 업데이트

- felix 설정(config.properties)

다음과 같이 Felix 설정 파일인 config.properties 에 저장소 URL 을

추가한다. obr.repository.url 에는 공백으로 분리된 다수의 저장소 목록을 지정할 수 있다.

obr.repository.url=http://felix.apache.org/obr/releases.xml http://localhost:8081/nexus/content/repositories/slice-

obr-hosted/repository.xml

- 저장소 목록 조회

felix 구동 후 gogo shell에서 다음과 같이 설정에 추가된 저장소의 목록을 조회하여 확인 한다.

g! repos list

http://felix.apache.org/obr/releases.xml

http://localhost:8081/nexus/content/repositories/slice-obr-hosted/repository.xml

- 저장소의 번들 목록 조회

felix 구동 후 gogo shell에서 다음과 같이 저장소에 등록된 번들의 목록을 조회한다.

g! obr:list

... org.etri.slice.agents.car.carseat (0.9.1)

... org.etri.slice.agents.car.fullbodydetector (0.9.1)

Apache Felix Bundle Repository (1.6.6, ...)

Apache Felix Configuration Admin Service (1.2.4, ...)

Apache Felix Declarative Services (1.6.0, ...)

버전 발행일 문서번호 페이지

1.0 2018-12-06 76/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- 저장소의 번들 상세 정보 조회

다음 예는 gogo shell 에서 저장소에 있는 번들인 "org.etri.slice.agents.car.carseat"에 대한 상세

정보를 조회하는 것으로 번들이 위치한 저장소의 경로 및 번들의 상세 정보를 확인 할 수 있다.

g! obr:info org.etri.slice.agents.car.carseat

-------------------------------------

... org.etri.slice.agents.car.carseat

-------------------------------------

presentationname: ... org.etri.slice.agents.car.carseat

size: 26974

symbolicname: org.etri.slice.agents.car.carseat

description: org.etri.slice parent

id: org.etri.slice.agents.car.carseat/0.9.1

version: 0.9.1

uri: http://localhost:8081/nexus/content/repositories/slice-obr-hosted/org/etri/

slice/org.etri.slice.agents.car.carseat/0.9.1/org.etri.slice.agents.car.carseat-

0.9.1.jar

Requires:

(&(package=org.etri.slice.commons.car.event)(version>=0.9.0)(!(version>=1.0.0

)))

(&(package=org.slf4j)(version>=1.7.0)(!(version>=2.0.0)))

(&(package=org.osgi.service.cm)(version>=1.2.0))

(&(package=org.etri.slice.commons.car.context)(version>=0.9.0)(!(version>=1.0

.0)))

(&(package=org.etri.slice.api.agent)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.api.perception)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.apache.edgent.topology)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.core.perception)(version>=0.9.0)(!(version>=1.0.0))

)

버전 발행일 문서번호 페이지

1.0 2018-12-06 77/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

(&(package=org.etri.slice.api.inference)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.core.agent)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.apache.edgent.function)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.apache.felix.ipojo)(version>=1.12.1)(!(version>=2.0.0)))

(&(package=org.osgi.service.log)(version>=1.3.0))

(&(package=org.apache.edgent.execution.services)(version>=0.9.0)(!(version>=1

.0.0)))

(&(package=org.apache.felix.ipojo.architecture)(version>=1.12.1)(!(version>=2

.0.0)))

(&(package=org.etri.slice.commons.car.service)(version>=0.9.0)(!(version>=1.0

.0)))

(&(package=org.etri.slice.api.learning)(version>=0.9.0)(!(version>=1.0.0)))

Capabilities:

{presentationname=... org.etri.slice.agents.car.carseat, symbolicname=org.etr

i.slice.agents.car.carseat, manifestversion=2, version=0.9.1}

{package=org.etri.slice.agents.car.carseat.adaptor, uses:=org.etri.slice.api.

agent,org.etri.slice.api.inference,org.etri.slice.api.perception,org.etri.slice.

commons.car.context,org.etri.slice.commons.car.event,org.etri.slice.core.percept

ion, version=0.9.1}

{package=org.etri.slice.agents.car.carseat, uses:=org.etri.slice.api.agent,or

g.etri.slice.core.agent, version=0.9.1}

{package=org.etri.slice.agents.car.carseat.stream, uses:=org.apache.edgent.to

pology,org.etri.slice.api.perception,org.etri.slice.commons.car.context,org.etri

.slice.commons.car.event, version=0.9.1}

{package=org.etri.slice.agents.car.carseat.wrapper, uses:=org.etri.slice.api.

agent,org.etri.slice.api.inference,org.etri.slice.api.perception,org.etri.slice.

commons.car.context,org.etri.slice.commons.car.event,org.etri.slice.commons.car.

service,org.etri.slice.core.perception, version=0.9.1}

버전 발행일 문서번호 페이지

1.0 2018-12-06 78/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- 저장소로부터 번들 설치

deploy -s 명령으로 저장소의 번들을 배포하고 시작되도록 한다.

g! obr:deploy -s org.etri.slice.agents.car.carseat

Target resource(s):

-------------------

... org.etri.slice.agents.car.carseat (0.9.1)

Optional resource(s):

---------------------

Apache Felix Gogo Runtime (0.6.0)

Apache Felix Log Service (1.0.0)

Deploying...

done.

g! lb

START LEVEL 1

ID|State |Level|Name

0|Active | 0|System Bundle (4.2.1)

1|Active | 1|Apache Felix Bundle Repository (1.6.6)

2|Active | 1|Apache Felix Configuration Admin Service (1.8.4)

3|Active | 1|Apache Felix EventAdmin (1.4.2)

4|Active | 1|Apache Felix Gogo Command (0.12.0)

5|Active | 1|Apache Felix Gogo Runtime (0.10.0)

6|Active | 1|Apache Felix Gogo Shell (0.10.0)

7|Active | 1|Apache Felix Http Api (2.3.2)

8|Active | 1|Apache Felix Http Jetty (3.0.2)

9|Active | 1|Apache Felix Servlet API (1.1.0)

10|Active | 1|Apache Felix iPOJO (1.12.1)

11|Active | 1|Apache Felix iPOJO Gogo Command (1.12.1)

12|Active | 1|Apache Felix iPOJO Event Admin Handler (1.8.0)

버전 발행일 문서번호 페이지

1.0 2018-12-06 79/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

13|Active | 1|Apache Felix Web Management Console (All In One) (4.3.4.

all)

14|Active | 1|Apache Felix Web Console Event Plugin (1.1.8)

15|Active | 1|Apache Felix Web Console Memory Usage Plugin (1.0.8)

16|Active | 1|Apache Felix Web Console OBR Plugin (1.0.4)

17|Active | 1|... org.etri.slice.agents.car.carseat (0.9.1)

18|Active | 1|... org.etri.slice.api (0.9.1)

19|Active | 1|The SLICE base modules for common models (0.9.1)

20|Active | 1|The SLICE common data models for car domain (0.9.1)

21|Active | 1|... org.etri.slice.core (0.9.1)

22|Active | 1|... org.etri.slice.devices.car.carseat (0.9.1)

23|Active | 1|Apache Felix Gogo Runtime (0.6.0)

24|Active | 1|Apache Felix Log Service (1.0.0)

- 설치된 번들의 상세 정보 조회

g! obr:info 17

-------------------------------------

... org.etri.slice.agents.car.carseat

-------------------------------------

presentationname: ... org.etri.slice.agents.car.carseat

size: 26974

symbolicname: org.etri.slice.agents.car.carseat

description: org.etri.slice parent

id: org.etri.slice.agents.car.carseat/0.9.1

version: 0.9.1

uri: http://localhost:8081/nexus/content/repositories/slice-obr-

hosted/org/etri/slice/org.etri.slice.agents.car.carseat/0.9.1/org.etri.slice.agents.car.carseat-0.9.1.jar

Requires:(&(package=org.etri.slice.commons.car.event)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.slf4j)(version>=1.7.0)(!(version>=2.0.0)))

(&(package=org.osgi.service.cm)(version>=1.2.0))

(&(package=org.etri.slice.commons.car.context)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.api.agent)(version>=0.9.0)(!(version>=1.0.0)))

버전 발행일 문서번호 페이지

1.0 2018-12-06 80/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

(&(package=org.etri.slice.api.perception)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.apache.edgent.topology)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.core.perception)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.api.inference)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.core.agent)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.apache.edgent.function)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.apache.felix.ipojo)(version>=1.12.1)(!(version>=2.0.0)))

(&(package=org.osgi.service.log)(version>=1.3.0))

(&(package=org.apache.edgent.execution.services)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.apache.felix.ipojo.architecture)(version>=1.12.1)(!(version>=2.0.0)))

(&(package=org.etri.slice.commons.car.service)(version>=0.9.0)(!(version>=1.0.0)))

(&(package=org.etri.slice.api.learning)(version>=0.9.0)(!(version>=1.0.0)))

Capabilities:

{presentationname=... org.etri.slice.agents.car.carseat, symbolicname=org.etri.slice.agents.car.carseat,

manifestversion=2, version=0.9.1}

{package=org.etri.slice.agents.car.carseat.adaptor, uses:=org.etri.slice.api.

agent,org.etri.slice.api.inference,org.etri.slice.api.perception,org.etri.slice.

commons.car.context,org.etri.slice.commons.car.event,org.etri.slice.core.percept

ion, version=0.9.1}

{package=org.etri.slice.agents.car.carseat, uses:=org.etri.slice.api.agent,or

g.etri.slice.core.agent, version=0.9.1}

{package=org.etri.slice.agents.car.carseat.stream, uses:=org.apache.edgent.to

pology,org.etri.slice.api.perception,org.etri.slice.commons.car.context,org.etri

.slice.commons.car.event, version=0.9.1}

{package=org.etri.slice.agents.car.carseat.wrapper, uses:=org.etri.slice.api.

agent,org.etri.slice.api.inference,org.etri.slice.api.perception,org.etri.slice.

commons.car.context,org.etri.slice.commons.car.event,org.etri.slice.commons.car.

service,org.etri.slice.core.perception, version=0.9.1}

버전 발행일 문서번호 페이지

1.0 2018-12-06 81/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- 번들 업데이트 및 배포

번들을 버젼 업(0.9.1 --> 0.9.2) 한 후에 OBR(slice-obr-hosted)에 deploy 한다.

번들 pom 파일 버전 변경

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-

4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.etri.slice</groupId>

<artifactId>org.etri.slice.agents</artifactId>

<version>0.9.1</version>

<relativePath>../pom.xml</relativePath>

</parent>

<version>0.9.3</version>

<packaging>bundle</packaging>

....

버전 발행일 문서번호 페이지

1.0 2018-12-06 82/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

저장소 Refresh

가) gogo shell에서 저장소 Refresh

g! repos refresh http://localhost:8081/nexus/content/repositories/slice-obr-host

ed/repository.xml

g! obr:list

... org.etri.slice.agents.car.carseat (0.9.3, ...)

... org.etri.slice.agents.car.fullbodydetector (0.9.1)

Apache Felix Bundle Repository (1.6.6, ...)

저장소의 Refresh는 Web Console에서도 다음과 같이 진행할 수 있다. 다만 gogo shell과 Web

Console 의 refresh 는 상호 영향을 주지 않는다. 즉, gogo shell 에서 refresh 를 해도 Web

Console에서는 이전 버전들만 리스트업 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 83/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

※ OBR Repository를 refresh 저장소의 변경 사항을 가져온다.

나) Felix Web Console에서 저장소 Refresh

Web Console의 OSGi > OSGi Repository 메뉴를 클릭하면 저장소 페이지가 오픈 된다. OBR의

refresh 버튼을 클릭하여 refresh 한 후에 번들을 조회하면 다음과 같이 저장소에 업데이트 된

번들의 버전 들을 확인할 수 있다.

개별 번들의 refresh 버튼을 클릭하여 개발 번들을 refresh 할 수도 있다.

번들 업데이트

가) gogo shell에서 번들 업데이트

g! update 25

g! lb

START LEVEL 1

ID|State |Level|Name

0|Active | 0|System Bundle (4.2.1)

1|Active | 1|Apache Felix Bundle Repository (1.6.6)

2|Active | 1|Apache Felix Configuration Admin Service (1.8.4)

3|Active | 1|Apache Felix EventAdmin (1.4.2)

4|Active | 1|Apache Felix Gogo Command (0.12.0)

5|Active | 1|Apache Felix Gogo Runtime (0.10.0)

6|Active | 1|Apache Felix Gogo Shell (0.10.0)

7|Active | 1|Apache Felix Http Api (2.3.2)

8|Active | 1|Apache Felix Http Jetty (3.0.2)

버전 발행일 문서번호 페이지

1.0 2018-12-06 84/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

9|Active | 1|Apache Felix Servlet API (1.1.0)

10|Active | 1|Apache Felix iPOJO (1.12.1)

11|Active | 1|Apache Felix iPOJO Gogo Command (1.12.1)

12|Active | 1|Apache Felix iPOJO Event Admin Handler (1.8.0)

13|Active | 1|Apache Felix Web Management Console (All In One) (4.3.4.

all)

14|Active | 1|Apache Felix Web Console Event Plugin (1.1.8)

15|Active | 1|Apache Felix Web Console Memory Usage Plugin (1.0.8)

16|Active | 1|Apache Felix Web Console OBR Plugin (1.0.4)

18|Active | 1|... org.etri.slice.api (0.9.1)

19|Active | 1|The SLICE base modules for common models (0.9.1)

20|Active | 1|The SLICE common data models for car domain (0.9.1)

21|Active | 1|... org.etri.slice.core (0.9.1)

22|Active | 1|... org.etri.slice.devices.car.carseat (0.9.1)

23|Active | 1|Apache Felix Gogo Runtime (0.6.0)

24|Active | 1|Apache Felix Log Service (1.0.0)

25|Active | 1|... org.etri.slice.agents.car.carseat (0.9.3)

나) Felix Web Console에서 번들 업데이트

Repository 를 regresh 한 후에 Web Console 의 OSGi > Bundles 메뉴를 클릭하면 번들 목록

화면이 오픈 다. 업데이트 하고자 하는 번들의 Update 버튼을 클릭하면 다음과

같이 org.etri.slice.agents.car.carseat 번들이 0.9.3으로 업데이트 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 85/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

버전 발행일 문서번호 페이지

1.0 2018-12-06 86/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4 SLICE Tools 사용자 매뉴얼

5.4.1 New SLICE Project

SLICE 프로젝트는 Java/Maven/Xtext Project이어야 하므로 Java/Maven/Xtext Nature를 가지고 있어야

한다.

JDT 플러그인의 Java Project Wizard 소스를 기반으로 Maven/Xtext nature를 추가하고 초기 adl 파일

및 maven piom.xml 파일을 생성하는 기능을 제공한다.

File > New > Project를 클릭하여 아래 화면과 같이 New Project wizard를 오픈한다.

“SLICE” 카테고리 아래의 “SLICE Project”을 선택하고 “Next” 버튼을 클릭하면 다음 같이 “New SLICE

Project” wizard 페이지가 오픈 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 87/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

프로젝트 이름(Project name) 및 도메인(domain)을 입력합니다. 그 외의 프로젝트 설정 부분은 Java

Project Wizard의 설정 내용과 동일하다.

“Next” 버튼을 클릭하면 다음과 같이 Java Project Wizard의 Java Settings 화면이 오픈 되고 “Finish”

버튼을 클릭하면 프로젝트 생성이 완료된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 88/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

버전 발행일 문서번호 페이지

1.0 2018-12-06 89/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.2 New ADL File

SLICE 카테고리에 “SLICE New ADL File” Wizard를 제공한다.

File > New > Others를 클릭하여 아래 화면과 같이 New wizard를 오픈한다.

“SLICE” 카테고리 아래의 “SLICE New ADL File”을 선택하고 “Next” 버튼을 클릭하면 다음 같이 “New

ADL File” wizard 페이지가 오픈 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 90/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

adl 파일을 생성 할 위치(Container)를 선택하고 ADL 파일명(ADL file name), 도매인(domain)을 입력한

다. “generate sample adl” 체크 박스를 선택하면 생성된 adl 파일의 내용에 carseat 데모용 adl 내용이

생성된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 91/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.3 New SLICE Sample Project

SLICE/Examples 카테고리에 “SLICE Car Example” Wizard를 제공한다.

File > New > Project를 클릭하여 아래 화면과 같이 New Project wizard를 오픈한다.

“SLICE” 카테고리 아래의 “Examples” 하위 카테고리 아래에 “SLICE Car Example Project”를 클릭하면

별도의 Wizard 패이지 없이 바로 샘플 프로젝트가 생성된다.

생성된 프로젝트는 다음과 같다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 92/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

버전 발행일 문서번호 페이지

1.0 2018-12-06 93/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.4 Content Assistant

ADL 파일을 편집 중 각각의 컨텍스트에서 사용자에게 선택 가능한 대안들을 제공하여 코드 자동 완성을

제공한다.

기본적으로 문법에 따른 Content assistant는 자동으로 지원되도록 xtext에서 구현되므로 커스터마이징

하는 부분은 문법으로 할 수 없는 문맥상의 지원 등을 추가 지원한다.

예를 들어 on 다음에는 Event 객체만 와야만 하므로 Context Assistant는 정의된 Event 타입만을 대안

으로 제공한다.

- Context Super Types

Context extends 키워드 다음에는 Context 들만 선택 가능한 대안들로 제공된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 94/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Event super Types

Event extends 키워드 다음에는 Event 들만 선택 가능한 대안들로 제공된다.

- Exception super Types

Exception extends 키워드 다음에는 Exception 들만 선택 가능한 대안들로 제공된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 95/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Control super Types

Exception extends 키워드 다음에는 자바 인터페이스들만 선택 가능한 대안들로 제공된다.

- on Context

on 키워드 다음에는 Context 들만 선택 가능한 대안들로 제공된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 96/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- do publish Event

do publish 키워드 다음에는 Event들만 선택 가능한 대안들로 제공된다.

- do call Control

do call 키워드 다음에는 인터페이스들만 선택 가능한 대안들로 제공된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 97/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- do call Control.method

do call 키워드 다음 Control의 method에는 해당 control의 method들만 선택 가능한 대안들로 제공된다.

- hasCommandsOf Control

do call 키워드 다음에는 인터페이스들만 선택 가능한 대안들로 제공된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 98/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- context Context

context 키워드 다음에는 Context 들만 선택 가능한 대안들로 제공된다.

- context Context.property

context 키워드 다음 Context의 property에는 해당 context의 property들만 선택 가능한 대안들로 제공

된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 99/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- action Control

action 키워드 다음에는 인터페이스들만 선택 가능한 대안들로 제공된다.

- action Control.method

action키워드 다음 Control의 method에는 해당 control의 method들만 선택 가능한 대안들로 제공된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 100/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.5 Validation & quick fix

- Hierarchy Cycle Check & Fix

Context, Event, Control, Exception에 대한 상속 계층을 체크하여 Cycle이 존재할 경우 다음과 같이

Error가 표시되고

다음과 같이 중복된 상속 클래스를 삭제하도록 Quick Fix 제공한다. Remove duplicated element를 클릭

하면 extends에 기술된 supertype 부분이 삭제된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 101/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Context/Control/Event/Agent/Exception 중복 이름 Check & Fix

동일한 도메인 내에서 동일한 타입의 객체는 동일한 이름을 가질 수 없다. 중복될 경우 다음과 같이

Error가 표시되고

다음과 같이 중복된 객체에 대하여 선택한 객체를 삭제하도록 Quick Fix 제공한다. Remove duplicated

element를 클릭하면 해당 Element가 삭제된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 102/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Context/Event property 중복 Check & Fix

Context와 Event에 정의된 property 들이 중복 정의된 경우 다음과 같이 Error가 표시되고

다음과 같이 중복된 Property에 대하여 선택한 Property를 삭제하도록 Quick Fix 제공한다. Remove

duplicated property를 클릭하면 해당 Property가 삭제된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 103/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Control Feature(Operation/Property) 중복 Check & Fix

Control에서 Feature(Operation/Property) 들이 중복 정의된 경우 다음과 같이 Error가 표시되고

다음과 같이 중복된 Feature(Operation/Property) 에 대하여 선택한 Feature 를 삭제하도록 Quick Fix

제공한다. Remove duplicated feature를 클릭하면 해당 Feature(Operation/Property) 가 삭제된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 104/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Property 및 메소드 소문자 Check & Fix

Property 및 메소드 이름이 대문자로 시작하는 경우 다음과 같이 Warning이 표시되고

다음과 같이 첫 문자를 소문자로 변경하도록 Quick Fix를 제공한다. Lowercase name을 클릭하면

해당 이름의 첫 문자가 소문자로 변경된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 105/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Context/Control/Event/Agent/Exception 대문자 Check & Fix

Context/Control/Event/Agent/Exception 이름이 소문자로 시작하는 경우 다음과 같이 Warning이 표시

되고

다음과 같이 첫 문자를 대문자로 변경하도록 Quick Fix 를 제공한다. Capitalize the name 을

클릭하면 해당 이름의 첫 문자가 대문자로 변경된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 106/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Context Super type Check & Fix

Context 의 extends 키워드 다음에 Context 가 아닌 클래스를 지정한 경우 다음과 같이 error 가

표시되고

다음과 같이 상위 클래스를 삭제하도록 Quick Fix 를 제공한다. Remove supertype 을 클릭하면

해당 superType이 삭제된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 107/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Event Super type Check & Fix

Event 의 extends 키워드 다음에 Event 가 아닌 클래스를 지정한 경우 다음과 같이 error 가

표시되고

다음과 같이 상위 클래스를 삭제하도록 Quick Fix 를 제공한다. Remove supertype 을 클릭하면

해당 superType이 삭제된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 108/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Exception Super type Check & Fix

Exception 의 extends 키워드 다음에 Exception 이 아닌 클래스를 지정한 경우 다음과 같이

error가 표시되고

다음과 같이 상위 클래스를 삭제하도록 Quick Fix 를 제공한다. Remove supertype 을 클릭하면

해당 superType이 삭제된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 109/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- do call Control.method Check

Control의 필드 및 메소드가 아닌 이름을 입력하면 다음과 같이 error가 표시되고

다음과 같이 Control의 필드 및 메소드)들이 Quick Fix로 제공한다. 필드 및 메소드를 클릭하면

선택한 필드 및 메소드로 이름이 대체된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 110/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- context Context.property Check

Context의 필드가 아닌 이름을 입력하면 다음과 같이 error가 표시되고

다음과 같이 Context의 필드 들이 Quick Fix로 제공한다. 필드를 클릭하면 선택한 필드 및 메소드로 이

름이 대체된다

버전 발행일 문서번호 페이지

1.0 2018-12-06 111/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- action Control.method Check

Control의 필드 및 메소드가 아닌 이름을 입력하면 다음과 같이 error가 표시되고

다음과 같이 Control 의 필드 및 메소드들이 Quick Fix 로 제공한다. 필드 및 메소드를 클릭하면

선택한 필드 및 메소드로 이름이 대체된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 112/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

버전 발행일 문서번호 페이지

1.0 2018-12-06 113/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.6 Formatting

기본 Formatting에 문법상 문제가 발생한 부분을 먼저 수정하였습니다. 기본 Formatting은 각 토큰들이

공백 1개로 구분되는 형식입니다.

소스 경로: org.etri.slice.tools.adl.formatting2.DomainmodelFormatter

- Space Formatting

다음과 같이 공백에 대한 Formatting을 정의하였다.

키워드(domain, context, control, ….) 다음에 공백 추가

“@topic”, “@agency”, “ip”, “=”, “port” 등 연결되는 키워드 전후 공백 제거

괄호 “(“ 전후 공백 제거

괄호 “)” 전후 공백 제거

“,” 전 공백 제거 및 후 공백 추가

Ip/port value 전후 공백 제거

Name 전후 공백

extends 다음 타입 참조 뒤 공백 제거

기타 일반적인 자바 언어에 기반해서 공백을 제거 및 추가하도록 하였다.

- Indent Formatting

모든 불록({}) 및 Behavior ~ end 구문 내에 Indent 추가한다.

- NewLine Formatting

New 라인과 관련하여 다음과 같이 정의하였습니다.

import 문 전 NewLine 2

블록 형태이며 반복되는 요소들의 NewLine

마지막 요소가 아닌 경우 NewLine 2

마지막 NewLine 1

버전 발행일 문서번호 페이지

1.0 2018-12-06 114/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

agency 및 topic에 NewLine

“{“ 다음 NewLine

Ruleset group-id 값 다음 NewLine

Ruleset artifact-id 값 다음 NewLine

Behavior 이름 다음 NewLine

Behavior Situation 다음 NewLine

Behavior Action 다음 NewLine

CommandConext 다음 NewLine

Command/Action 다음 NewLine

Operation 및 Property 다음 NewLine

버전 발행일 문서번호 페이지

1.0 2018-12-06 115/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.7 Eclipse Error Log

Status Object를 이용하여 StatusManager에 Error를 리포팅 합니다. 리포트 된 에러는 Error Log View

에 표시되고 다음 경로의 로그 파일에 기록된다.

- Error Log View

System.out 및 Exception printStackTrace 중에 불필요한 내용 삭제 및 필요한 부분은 Eclipse에서 지

원하는 Error Log View와 연동이 되도록 수정하였다.

다음은 발생한 에러 로그를 표시한 예이다.

- 로그 파일

Error Log View에 표시되는 로그는 다음과 같은 경로에 로그 파일에도 기록된다.

경로: workspace/.metadata/.log or eclipse/configuration/.log

로그 파일 예)

!ENTRY org.etri.slice.tools.jmxconsole 4 0 2018-05-28 15:15:22.426

!MESSAGE Malformed JMX URL.

버전 발행일 문서번호 페이지

1.0 2018-12-06 116/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.8 Felix Web Console

Window > Show View > Others 를 클릭하여 아래 화면과 같이 Show View 다이얼로그를 오픈한다.

SLICE 카테고리 아래의 “SLICE Console View”를 클릭하면 다음 같이 화면 하단에 뷰가 오픈 된다.

SLICE Console View는 Apache Felix Web Console URL 목록을 관리하는 뷰로 웹 콘솔 URL의 추가/변

경/삭제 기능을 제공한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 117/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

각 기능들은 아래와 같이 Toolbar, Context Menu, Popup 메뉴로 제공된다.

“Add Console URL” 메뉴 혹은 툴을 클릭하면 다음과 같이 이름과 URL을 입력하는 다이얼로그가

오픈 되고 입력 후 “Ok”를 클릭하면 SLICE Console View에 아래와 같이 Console URL이 추가된다.

Name은 유일하게 관리되어야 하므로 중보 발생 시 다음과 같은 에러 메시지가 표시 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 118/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

※ 참고로 추가된 정보들은 Eclipse Preference Plug-in 에서 제공하는 환경설정 기능을 이용하여

저장하였다..

리스트업 된 URL를 클릭하면 다음과 같이 이클립스의 내장 브라우저로 해당 Felix Web Console 웹 페

이지가 오픈 된다.

http://localhost:8080/system/console/bundles

버전 발행일 문서번호 페이지

1.0 2018-12-06 119/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.4.9 JMX Console

Window > Show View > Others 를 클릭하여 아래 화면과 같이 Show View 다이얼로그를 오픈한다.

SLICE 카테고리 아래의 “SLICE JMX Console”을 클릭하면 다음 같이 화면 하단에 JMX Console 뷰가

오픈 된다.

SLICE JMX Console View는 JMX Connection URL 목록을 관리하는 뷰로 JMX URL의 추가/변경/삭제 기

버전 발행일 문서번호 페이지

1.0 2018-12-06 120/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

능을 제공한다.

각 기능들은 아래와 같이 Toolbar, Context Menu, Popup 메뉴로 제공되며 사용법은 SLICE Web

Console View의 기능과 같다.

예) service:jmx:rmi:///jndi/rmi://localhost:3403/jmxrmi

추가 후 해당 URL을 더블 클릭하면 에디터 영역에 다음과 같이 MBean 트리 및 MBean 상세 관리 페

이지가 오픈 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 121/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

JConsole과 같이 우측의 Attribute value 테이블에서 Value 부분에 마우스를 클릭하면 편집기가 활성화

되고 편집을 하면 리모트 MBean의 속성에 Write가 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 122/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5 SLICE Tool 배포판 만들기 방법

SLICE Tools product를 배포하는 방법을 기술한다. Eclipse는 소프트웨어를 배포 및 업데이트의 기준이

되는 Feature라는 프로젝트를 사용한다. Feature를 다수의 플러그인 들로 구성된다. 본 프로젝트에서는

ADL의 기능을 구성하는 ADL Feature와 ADL 플러그인 동작에 필요한 다른 플러그인 들을 포함한

Platform Feature를 생성하여 최종 product를 정의한다.

5.5.1 ADL Feature 프로젝트 생성

ADL Tools를 구성하는 Plugin 들로 구성된 Feature들을 구성한다.

Eclipse Plugin 프로젝트 Wizard에서 다음과 같이 “Plug-in Development“ 카테고리 하위의 “Feature

Project”를 클릭하여 “org.etri.slice.tools.adl.feature“라는 이름의 feature 프로젝트를 생성한다.

생성된 프로젝트에서 “feature.xml” 파일을 클릭하여 “Feature Manifest Editor”를 오픈한다.

하단의 “Included Plug-ins” 탭을 클릭하여 “Plug-in and Fragments”에 다음 플러그인 들을 추가한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 123/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

⚫ org.etri.slice.tools.adl

⚫ org.etri.slice.tools.adl.ide

⚫ org.etri.slice.tools.adl.product

⚫ org.etri.slice.tools.adl.project

⚫ org.etri.slice.tools.adl.ui

⚫ org.etri.slice.tools.console

⚫ org.etri.slice.tools.jmxconsole

버전 발행일 문서번호 페이지

1.0 2018-12-06 124/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.2 Platform Feature 프로젝트 생성

ADL Tools를 구성하는 Plugin 들로 구성된 Feature들을 구성한다.

Eclipse Plugin 프로젝트 Wizard에서 다음과 같이 “Plug-in Development“ 카테고리 하위의 “Feature

Project”를 클릭하여 “org.etri.slice.tools.adl.platform.feature“라는 이름의 feature 프로젝트를 생성한다.

생성된 프로젝트에서 “feature.xml” 파일을 클릭하여 “Feature Manifest Editor”를 오픈한다.

하단의 “Included Features” 탭을 클릭하여 “Included Features”에 JDT, EMF 등의 Feature들을 추가한

다.

개발중인 Eclipse에 Help > About” 메뉴 창에서 Feature 들을 검색하여 추가한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 125/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

그리고 Feature로 추가할 수 없는 개별 플러그인들은 하단의 “Included Plug-ins” 탭을 클릭하여 “Plug-

in and Fragments”에 플러그인 들을 추가한다.

누락된 Plug-in은 배포시 에러가 잘생하므로 해당 에러가 발생 시에 이 탭에 프러그인을 추가한 후에 배

포를 진행하면 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 126/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

버전 발행일 문서번호 페이지

1.0 2018-12-06 127/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.3 Product 프로젝트 생성

Eclipse Plugin 프로젝트 Wizard에서 다음과 같이 “Plug-in Development“ 카테고리 하위의 “Plug-in

Project”를 클릭하여 일반적인 “org.etri.slice.tools.adl.product“ 이라는 이름의 plug-in 프로젝트를 생성

한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 128/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

생성된 프로젝트에서 “Plug-in Development“ 카테고리 하위의 “Product Configuration”을 선택하여

“ADL,product” 파일을 생성한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 129/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

생성된 “ADL,product” 파일을 오픈하면 Product Configuration Editor가 오픈 된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 130/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.4 Product Overview

Product Configuration Editor의 Content 탭을 클릭한다. 이 탭에서는 Product를 구성하는 기본 정보 및

Product를 구성하는 방법을 설정한다.

Product Definition” 파트의 “The product configuration is based on”에 features를 선택하여 Product를

Feature들을 선택하여 구성하도록 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 131/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.5 Product Contents

Product Configuration Editor의 Content 탭을 클릭하여 Product를 구성하는 Feature들을 추가한다.

“Add” 버튼을 클릭하여 SLICE Tools를 구성하는 다음 Feature들을 추가한다.

⚫ org.etri.slice.tools.adl.feature

⚫ org.etri.slice.tools.adl.platform.feature

버전 발행일 문서번호 페이지

1.0 2018-12-06 132/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.6 Product Launching

Product Configuration Editor의 Launching을 클릭하면 다음과 같은 화면이 오픈 된다. Program

Launcher 파트에서 Launcher Name(실행파일 이름) 및 Launcher Icon을 변경할 수 있다.

또한 우측의 Launching Arguments에서 운영체제별 실행 시 다양한 실행 인자를 설정할 수 있다. 설정한

인자 들은 Deploy 시 생성되는 slice-tools.ini 파일내에 포함된다.

- Program Launcher

Launcher Name을 slice-tools로 하여 deploy 후 eclipse.exe 대신 slice-tools.exe 파일이 생성되도록

하였다.

그리고 Launcher Icon은 입력 필드에 있는 형식으로 bmp 파일들을 설정할 수도 있고 하나의 icon 파일

로 설정할 수도 있다. 각 파일은 bmp 형식이어야 하며 크기 및 픽셀의 비트 수가 정확히 일치하여야 한

다.

파일의 형식 및 크기, 비트 수가 맞지 않으면 설정 시 경고 아이콘이 표시되고 Deploy 시 반영되지 않는

다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 133/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

Launching Arguments에서 win32 운영 체제에 대하여 다음과 같이 실행 인자를 설정한다.

- Laucher 아이콘 만들기

김프(Gimp)를 이용하여 아이콘을 생성한다. 크기별로 이미지를 생성하고 김프에 레이어로

추가한다.

File > Export As 를 이용하여 ico 파일로 export한다. 단, 압축은 체크를 풀고 생성해야 한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 134/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

버전 발행일 문서번호 페이지

1.0 2018-12-06 135/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Eclipse RCP 배포본 아이콘 변경되지 않는 경우

배포 시 아이콘을 변경해도 탐색기에서 변경되지 않는 경우가 있다. 윈도우의 탐색기는

성능상의 문제로 아이콘 캐쉬를 관리하므로 아이콘이 변경되어 보이지 않는 경우가 있다.

다음 경로에서 해당 캐쉬들을 삭제하면 되는데 탐색기가 구동 중이면 삭제가 되지 않으므로

다음과 같은 스크립트를 이용한다.

C:\Users\Administrator\AppData\Local\Microsoft\Windows\Explorer

버전 발행일 문서번호 페이지

1.0 2018-12-06 136/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

REM ie4uinit.exe=Internet Explorer Per-User Initialization Utility

REM Icon Cache Clear

ie4uinit.exe -show

REM Explorer Kill

taskkill /IM explorer.exe /F

cd /d %userprofile%\AppData\Local

attrib -h IconCache.db

del IconCache.db

cd /d "%localappdata%\Microsoft\Windows\Explorer"

del *.db

REM Explorer Start

start explorer.exe

pause

수행 후 탐색기로 확인 해 보면 아이콘이 보이지 않을 수 있다. 캐쉬를 만들고 표시하므로

시간이 조금 걸린다.

그외에 배포된 실행 파일의 아이콘이 정상적으로 생성 되었는지 확인하려면 ResHacker.exe 라는

프로그램을 이용하여 다음과 같이 확인할 수 있다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 137/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

Launcher 이미지 적용 예

버전 발행일 문서번호 페이지

1.0 2018-12-06 138/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

- Program Arguments

SLICE Web Console 및 SLICE JMX 뷰가 Java Perspective에 포함되도록 설정하였으므로 구동 시 Java

Perspective가 오픈 되도록 설정한다.

-perspective org.eclipse.jdt.ui.JavaPerspective

- VM Arguments

JVM 실행 인자를 설정한다. 기본으로 JDK 버전, 디폴트 Workspace 경로, 메모리 크기들을 설정하고

SLICE Tool이 lombok을 기본으로 사용하므로 lombok을 사용하도록 설정 한다.

-Dosgi.requiredJavaVersion=1.8

[email protected]/eclipse-workspace

-XX:+UseG1GC

-XX:+UseStringDeduplication

-Xms256m

-Xmx2024m

-javaagent:lombok.jar

버전 발행일 문서번호 페이지

1.0 2018-12-06 139/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.7 Product Splash

Product Configuration Editor의 “Splash” 탭을 클릭한다. 이 탭에서는 구동 시 보여지는 Splash 이미지

를 변경한다. Splash 이미지는 Product를 구성하는 플러그인 중에 포함되어 있으면 되며, Location>

Browse… 에서 Splash 이미지를 포함한 플러그인을 선택한다.

이미지 크기는 656x377로 디자인한다.

Splash 이미지는 splash.bmp이어야 하며 플러그인 최상위 폴더에 존재해야 하고 다음과 같이 플러그인

(plugin.xml) Build 탭/Binary Build에 아래와 같이 선택되어 있어야한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 140/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

Splash 이미지 구동 예

버전 발행일 문서번호 페이지

1.0 2018-12-06 141/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.8 Product Branding

Product Configuration Editor의 “Branding” 탭을 클릭한다. 이 탭에서는 Window 아이콘 및 About 다이

얼로그 내용을 커스터마이징 한다. Window Image 파트에서 각 사이즈의 이미지들을 설정한다. 이미지 형

식은 제한이 없으나 이미지 크기는 요청 사항과 동일해야 한다.

다음과 같이 설정된 이미지로 Window 아이콘이 변경된다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 142/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

About Dialog에서 About 이미지 및 이미지 우측에 표시되는 Text를 설정한다. 설정된 내용은 실행 시

다음과 같이 적용된다.

이미지 크기는 150x200으로 디자인한다.

윈도우 이미지 적용 예

About 이미지 적용 예

버전 발행일 문서번호 페이지

1.0 2018-12-06 143/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.5.9 Product Export

Product Configuration Editor의 ”Overview” 탭을 클릭하여 오픈하고 Exporting에서 “Eclipse Product

export wizard” 링크를 클릭한다.

Export 창에서 배포본을 생성할 Dicretory를 선택하고 “Generate p2 repository” 체크를 해지한다.

Finish 버튼을 클릭하여 Export를 실행한다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 144/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

배포가 오한료되면 다음과 같이 배포 디렉터리 밑에 eclipse 디렉터리가 생성되고 그 이래에 배포본이

생성된다.

마지막으로 SLICE 툴은 lombok을 사용하도록 설정 되어 있으므로 lombok.jar 파일을 복사하여 준다.

버전 발행일 문서번호 페이지

1.0 2018-12-06 145/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

5.6 SLICE 전체 시스템 구조

5.6.1 SLICE 시스템 구조

Figure 1 시스템 구조

5.6.2 시스템 구성요소 설명

구성요소 설명

DSL Implementation ADL DSL 구현 콤포넌트

Xtext Eclipse DSL 구현 프레임워크 및 툴킷

Xbase XTEXT로 구현된 언어로 다른 DSL 구현시 재사용 가능하

여 자바 타입 시스템과 호환되는 Expression 언어

ADL DSL SLICE 프로젝트에서 사물지능을 표현하기 위하여 정의한

언어

Validator 입력 스트림에 대한 Validation을 수행하는 콤포넌트

문법에서 체크할 수 없는 문맥에 따른 참조, 명명 규칙 등

버전 발행일 문서번호 페이지

1.0 2018-12-06 146/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

을 체크한다.

Content Assistant 코드 자동완성을 지원하기 위하여 문맥에 따라 사용자에게

다양한 제안(Suggestion)을 제공 모듈

Generator 코드 생성 모듈

Formatter Space, indent, New Line 등의 이용하여 소스코드 포멧팅

모듈

Quick fix Validator에서 체크된 Issue들에 대한 자동 코드 수정 지원

모듈

SLICE Core SLICE core 라이브러리

SLICE Common SLICE common 라이브러리

Felix Web Console View Felix Web Console 연결정보 관리 뷰

Felix Web Console

Browser

Felix Web Console 웹 페이지 오픈을 위한 내장 이클립스

브라우저

JMX Console View JMX 연결정보 관리 뷰

JMX Editor JMX 서버 연결 후 MBean 및 속성 조회 및 편집을 위한

에디터

SLICE Wizards SLICE 프로젝트 및 파일 생성 위져드 모듈

New ADL File Wizard 새로운 ADL 파일 생성 위져드

SLICE Sample Project

Wizard

새로운 SLICE Car 샘플 프로젝트 생성 위져드

New SLICE Project

Wizard

새로운 SLICE 프로젝트 생성 위져드

OBR OSGi Bundle Repository, OSGi 번들 저장소

Nexus 2 OSGi Bundle Repository 구현 프로그램

Maven 저장소등 다른 저장소로도 사용됨

Repository.xml OSGi Bundle Repository의 번들 관리 파일

generated Generator로부터 생성된 소스가 저장되는 경로

org.etri.slice.agents Generator로부터 생성된 Agent 프로젝트 경로

org.etri.slice.devices Generator로부터 생성된 Device 프로젝트 경로

org.etri.slice.distribution Generator로부터 생성된 프로젝트를 빌드하여 생성된 배포

본 경로

org.etri.slice.models Generator로부터 생성된 공통 데이터 모델(Context, Event,

Exception) 경로

org.etri.slice.rules Generator로부터 생성된 Drools 룰 파일 경로

pom.xml Maven Project Object Model 파일

SLICE Runtime Generator로부터 생성된 OSGi 번들의 런타임 환경

Felix OSGi Container 오픈소스 OSGi Container로 생성된 OSGi 번들이 수행되는

버전 발행일 문서번호 페이지

1.0 2018-12-06 147/147

Copyright © 2018, ETRI All rights reserved 무단 전재/복사금지(ETRI Proprietary)

컨테이너

Edgent Topology 스트림과 변환 처리로 구성된 그래프로 입력 Source로부터

데이터를 스트림 기반으로 처리하여 Sink까지의 처리 그래

프를 기술

Edgent Direct Provider Edgent Topology를 로컬 시스템에서 구동하는 모듈

Edgent MQTT Stream MQTT Subscription을 통하여 MQTT 메시지를 스트림화

하는 Source Stream 생성 모듈

Control Bundle Control 구현 OSGi 번들

Sensor Bundle Sensor 구현 OSGi 번들

Wrapper Bundle Drools rule 및 외부에서 호출될 수 있는 Global 및

Channel, Commander 구현 OSGi 번들

Stream Bundle Edgent Stream 처리 관련 OSGi 번들

Agent Bundle Agent OSGi 번들

Adaptor Bundle MQTT 및 장비 연동을 당당하는 OSGi 번들