---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 스트림 데이터 적재하기 (HttpToMongodbExample)
---
HTTP restful 인터페이스를 통해서 스트림으로 입력되는 데이터를 MongoDB에 저장하는 예제를 설명합니다.
## 입력 데이터 준비하기
본 예제에서는 스트림 데이터를 생성해야 합니다. 이를 위해 **KSB 클라이언트 SDK** 를 다운로드 하십시오. 프로젝트에 포함된 테스트 스크립트를 이용하여 시뮬레이션 할 수 있습니다.
- 테스트 스크립트에서 사용하는 ubuntu utility를 설치합니다.
```sh
$ sudo apt-get install curl
```
- 테스트 스트립트가 위치한 디렉터리로 이동합니다.
```sh
$ cd ~/ksb-csle/examples
```
- HTTP 스트림 데이터를 생성합니다.
- HTTP_IP: KSB 인공지능 프레임워크 IP 주소
- HTTP_PORT: 워크플로우 작성시, 입력한 HTTP 서버 포트번호
```sh
$ ./send-data-via-http.sh ${HTTP_IP}:${HTTP_PORT}
```
## 워크플로우 생성하기
워크플로우 편집화면을 이용하여 아래의 과정을 통해 워크플로우를 생성합니다.
- 워크플로우 속성
속성 | 값 | 비고
--|---|--
name | HttpToMongodbExample | 워크플로우 이름
description | 스트림 데이터를 MongoDB에 적재하는 예제 | 워크플로우를 설명하는 글
isBatch | false | 스트림 처리를 하는 워크플로우 이므로, false 로 지정
verbose | false | 디버깅을 위해 로그정보를 보고자할 경우, true 로 지정
### 엔진 선택
본 예제에서는 스트림 데이터를 입력받아 처리한 뒤 MongoDB에 적재하므로 **StreamToBatch** 엔진을 드래그앤 드롭합니다.
- 엔진 속성
순번 | 엔진 Type | NickName | RunType | 설명
--|---|---|---|--
1 | StreamToBatch | ProcessingEngine | 즉시실행 | 스트림 데이터를 MongoDB에 적재
#### Reader
HTTP 서버로부터 전달되어 오는 데이터를 입력 받기 위해 **HttpServerReader** 를 드래그 앤 드롭한 후 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
ip | 0.0.0.0 | HTTP 서버의 주소를 입력합니다.
port | 53001 | HTTP 서버의 포트번호를 입력합니다.
#### Writer
**MongodbWriter** 를 드래그앤 드롭한 후 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
serverAddress | localhost:27017 | MongoDB 서버 주소 및 포트
dbName | examples | DB 명
collectionName | data_from_http | 생성할 테이블 명
cleaningDataInconsistency | true | 기존 테이블 삭제 및 재생성 여부
#### Controller
**SparkSessionOrStreamController** 를 드래그앤 드롭한 후 아래 표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
setOperationPeriod | 3 | 스트리밍 처리 주기 (초 단위)
#### Runner
**SimpleSparkRunner** 를 드래그앤 드롭합니다. 디폴트 속성값을 사용합니다.
#### Operator
본 예제에서는 스트림 입력을 그대로 MongoDB에 적재하므로 Operator를 사용하지 않습니다. 만약 스트림 입력 데이터를 가공해야 할 경우, 필요한 Operator를 드래그앤 드롭하여 속성값을 지정한 후 사용할 수 있습니다.
![워크플로우 완성 화면](./images/2.5.1_workflow.png)
ksbuser@etri.re.kr 계정으로 접속하면 예제 워크플로우가 만들어져있습니다. **HttpToMongodbExample** 을 불러오기하여 사용할 수 있습니다.
![워크플로우 불러오기](./images/2.5.1_workflowLoad.png)
## 워크플로우 실행 및 모니터링하기
### 워크플로우 실행하기
위에서 작성한 워크플로우를 실행하기 위해서는 워크플로우 편집기 상단의 실행 버튼(▶)을 클릭합니다. 본 예제는 스트림 데이터를 처리하므로 **Batch** 체크 박스를 해제하고 워크플로우를 실행합니다.
![워크플로우 실행화면](./images/2.5.1_workflowStart.png)
### 워크플로우 모니터링 하기
#### 워크플로우 상태 확인
KSB 웹툴킷 상단의 **Monitoring** 메뉴를 클릭하여 진행내역/상태모니터링 화면으로 이동합니다. **Workflow** 탭에서 작성한 워크플로우가 실행 중 (Inprogress)인 것을 확인할 수 있습니다. 이 화면에서 실행 중인 워크플로우를 종료(◼)하거나, 다시 실행(▶)할 수 있습니다.
![워크플로우 동작 상태 확인](./images/2.5.1_workflowMonitoring.png)
#### 워크플로우 로그 보기
**WorkFlow History** 탭을 선택하면, KSB 인공지능 프레임워크에서 워크플로우가 동작하며 발생시킨 로그 정보를 확인 할 수 있습니다.
![워크플로우 히스토리](./images/2.5.1_workflowHistory.png)
![워크플로우 동작 로그](./images/2.5.1_workflowLog.png)
## 데이터 적재 결과 확인하기
**입력 데이터 준비하기** 에서 설명한 방법대로
./send-data-via-http.sh를 이용하여 http로 데이터를 전송합니다.
```sh
csle@csle1:~/ksb-csle/examples$ ./send-data-via-http.sh localhost:53001
send data to: localhost:53001
OK! I got it.
```
MongoDB 클라이언트 프로그램을 이용하여, 위에서 발생한 스트림 데이터가 MongoDB에 적재되었는지 확인합니다.
- 먼저 새로운 터미널을 열어 docker 컨테이너에 추가로 접속합니다.
- 그리고, MongoDB 클라이언트 프로그램이 설치된 디렉터리로 이동합니다.
```sh
docker exec -it csle1 bash
csle@csle1:/$ cd /home/csle/mongodb/bin
```
- MongoDB에 접속합니다.
```sh
$ mongo
```
![MongoDB](./images/2.5.1_mongoDB.png)
- 데이터베이스를 확인한 후 선택합니다.
```sh
> show dbs
> use examples
```
![MongoDB](./images/2.5.1_mongoDB3.png)
- 테이블 생성을 확인합니다.
```sh
> show collections
```
![MongoDB](./images/2.5.1_mongoDB4.png)
- 적재된 데이터를 확인합니다.
```sh
> db.data_from_http.find()
```
![MongoDB](./images/2.5.1_mongoDB5.png)
## 워크플로우 종료하기
본 예제는 지속적으로 스트림데이터가 입력되므로 사용자가 워크플로우를 종료해야 합니다.
KSB 웹툴킷 상단의 **Monitoring** 메뉴를 클릭하여 진행내역/상태모니터링 화면으로 이동합니다. **Workflow** 탭에서 실행 중인 워크플로우를 종료(◼)합니다.