<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator><link href="https://kranian.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://kranian.github.io/" rel="alternate" type="text/html" /><updated>2019-05-29T05:26:13+00:00</updated><id>https://kranian.github.io/feed.xml</id><title type="html">Yeo Song Blog</title><subtitle>백엔드 개발자 기술블로그</subtitle><author><name>Heo Yeo Song</name></author><entry><title type="html">JEUS Access Log 분석</title><link href="https://kranian.github.io/elasticsearch/2019/05/02/Custom_Access_LogAnalysis.html" rel="alternate" type="text/html" title="JEUS Access Log 분석" /><published>2019-05-02T00:00:00+00:00</published><updated>2019-05-02T00:00:00+00:00</updated><id>https://kranian.github.io/elasticsearch/2019/05/02/Custom_Access_LogAnalysis</id><content type="html" xml:base="https://kranian.github.io/elasticsearch/2019/05/02/Custom_Access_LogAnalysis.html">&lt;h1 id=&quot;0-요구-사항&quot;&gt;0. 요구 사항&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;아래 작업을 진행을 이해 하기 위해서는 엘라스틱 스택에 대한 사전 지식이 필요하다.&lt;/li&gt;
  &lt;li&gt;데이터 분석 엔지니어 나 장애 분석 엔지니어 라면 엘라스틱 스택에 대해 배울만한 가치가 있다고 생각한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;1-jeus-로거-샘플-포맷&quot;&gt;1. JEUS 로거 샘플 포맷&lt;/h1&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;JEUS 샘플 액세스 로그   
[2019.5.2 13:42:55] 192.168.102.3 &quot;GET /cse/orange/SAE-0.2.481.1.100.15.000044/cnt-0.2.481.1.100.15.000044/la&quot; 200 767ms
[2019.5.2 13:42:55] 192.168.102.3 &quot;GET /cse/orange/SAE-0.2.481.1.100.12.00168A/cnt-0.2.481.1.100.12.00168A/la&quot; 200 932ms
[2019.5.2 13:42:56] 192.168.102.3 &quot;GET /cse/orange/SAE-0.2.481.1.100.15.000037/cnt-0.2.481.1.100.15.000037/la&quot; 200 656ms
[2019.5.2 13:42:56] 192.168.102.3 &quot;GET /cse/orange/SAE-0.2.481.1.100.15.000064/cnt-0.2.481.1.100.15.000064/la&quot; 200 625ms
[2019.5.2 13:42:56] 192.168.102.3 &quot;GET /cse/orange/SAE-0.2.481.1.100.13.30013C/cnt-0.2.481.1.100.13.30013C/la&quot; 200 646ms
[2019.5.2 13:42:58] 192.168.102.3 &quot;GET /cse/orange/SAE-0.2.481.1.100.13.300149/cnt-0.2.481.1.100.13.300149/la&quot; 404 48ms

JEUS 샘플 액세스 
[시간] %{클라이언트IP} &quot;%{HTTP METHOD} %{URLPATH}&quot; %{HTTP STATUS CODE} %{Elapsed Time}
 - 시간 : 년.월.달 시간:분:초를 의미 하며 요청한 시간을 의미
 - 클라이언트IP : 요청한 클라이언트 IP
 - HTTP METHOD : HTTP Spec Request Method 
 - HTTP STATUS CODE : HTTP Spec Response Status Code 
 - Elapsed Time : 요청 처리 소용 시간을 의미 단위/ ms(Milisecond)     
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;목표
    &lt;ul&gt;
      &lt;li&gt;JEUS 액세스 로거로 남은 메세지를 라인당 파싱하여 엘라스틱 저장소에 넣고 키바나로 가시화 된 차트로 분석 한다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;2-엘라스틱-스택-파이프-라인-설명&quot;&gt;2. 엘라스틱 스택 파이프 라인 설명&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/assets/catpure/es-custom_access_loganalysis.png&quot; alt=&quot;pipeline&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;FileBeat 주의 사항은에서 한번 읽은 로그 파일은 FileBeat에서 읽었던 부분의 대한 정보를 offset로 관리함으로  다시 
 파일 정보를 로드 하기 위해서 FileBeat가 읽어던 파일Offset 정보를 초기화 해야 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;3-docker-elk-기동&quot;&gt;3. Docker ELK 기동&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;docker 와 docker-compose는 반드시 개인 PC에 설치가 되어 있어야한다. 설치 방법은 아래 사이트 링크에서 확인한다.&lt;/li&gt;
  &lt;li&gt;docker install
    &lt;ul&gt;
      &lt;li&gt;https://docs.docker.com/install/linux/docker-ce/ubuntu/&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;docker-compose Install
    &lt;ul&gt;
      &lt;li&gt;https://docs.docker.com/compose/install/&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;아래와 내용을  docker-compose.yml 로 저장한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;version: '3.2'
services:
 elk:
  image: sebp/elk:700
  environment:
   - LOGSTASH_START=0
   - KIBANA_START=1
   - ELASTICSEARCH_START=1
   - TZ=Asia/Seoul
   - ES_HEAP_SIZE=1g
   - LS_HEAP_SIZE=2g
  ports:
   - 5601:5601
   - 9200:9200
   - 5000:5000
  volumes:
   - elk-data:/var/lib/elasticsearch

volumes:
  elk-data:
 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;이제 아래 CLI 기반으로 elk 기동 한다.&lt;/li&gt;
  &lt;li&gt;아래 명령어를 터미널에 입력하자&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# docker elk 기동&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# 주의 사항은 docker-compose.yml 파일이 있는곳에서 반드시 실행 한다.  &lt;/span&gt;
docker-compose up &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# 그려면 기동 되는것을 확인 할수 있다. &lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h1 id=&quot;4-index-텀플릿-설정&quot;&gt;4. index 텀플릿 설정&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;터미널 아래 명령어 엘라스틱 서치 템플릿 설정 실행
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -v -XPUT -H &quot;Content-type: application/json&quot; -d '{
  &quot;order&quot;: 0,
  &quot;index_patterns&quot;: &quot;jeus_log-*&quot;,
  &quot;mappings&quot;: {
 &quot;properties&quot;: {
   &quot;geoip&quot;: {
     &quot;properties&quot;: {
       &quot;location&quot;: {
         &quot;type&quot;: &quot;geo_point&quot;
       }
     }
   },
   &quot;response&quot;: {
     &quot;type&quot;: &quot;long&quot;
   },
   &quot;status_code&quot; :{
     &quot;type&quot;: &quot;integer&quot;,
     &quot;fields&quot;: {
       &quot;keyword&quot;: {
         &quot;type&quot;: &quot;keyword&quot;
       }
     }
   }
 }
  }
}' 'http://localhost:9200/_template/access'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;성공하면 acknowledge : true 라고 나온다&lt;/li&gt;
  &lt;li&gt;이제 ElasticSearch에 넣을 준비가 끝났다
    &lt;ul&gt;
      &lt;li&gt;이 템플릿 작업은 DB와 비유 하자만 한 데이터 로우의 데이터 타입을 미리 정의 하는것 과 같다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;만약 이작업을 않하면 geo location 정보를 엘라스틱에서 타입을 알수 없어 다이나믹 데이터 포맷으로 자동 인식 된다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;5-filebeat-설치&quot;&gt;5. FileBeat 설치&lt;/h1&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# 리눅스용 다운로드 
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.0.0-linux-x86_64.tar.gz

# 압축 해제 
tar xzvf filebeat-7.0.0-linux-x86_64.tar.gz
# 파일비트 설치 경로 이동 
cd filebeat-7.0.0-linux-x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;filebeat.yml 파일 내용에 아래와 같이 설정한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#=========================== Filebeat inputs =============================&lt;/span&gt;
filebeat.inputs:
- &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;: log
  &lt;span class=&quot;c&quot;&gt;# 로그 분석 하고자 하는 곳의 디렉토리 및 로그 파일 패턴을 입력 하고 저장한다.  &lt;/span&gt;
  paths:
    - /home/kranian/project/elk/logs/&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.log &lt;span class=&quot;c&quot;&gt;# 로그 디렉토리 설정 및 패턴 설정, wildcard 패턴을 사용하여 로그를 입력하자&lt;/span&gt;

  &lt;span class=&quot;c&quot;&gt;# tail_files: true # filebeat 시작시점 기준 파일 끝에서부터 로깅을 읽기 시작&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;# ignore_older: 1m # filebeat 시작시점 기준 1분전의 내용은 무시        &lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;#----------------------------- Logstash output --------------------------------&lt;/span&gt;
output.logstash:
  &lt;span class=&quot;c&quot;&gt;# The Logstash hosts&lt;/span&gt;
  hosts: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1:5044&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;#================================ Logging =====================================&lt;/span&gt;
logging.level: debug
logging.selectors: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;설정 변경 후 filebeat 기동&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./filebeat -e -c filebeat.yml -d publish 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;위와 같이 설정파일을 작성한 다음 아래처럼 실행을 하면 엑세스 파일의 내용이 filebeat를 거치고 logstash를 거쳐 최종적으로 elasticsearch 에 도달하게 된다. 기존에 엑세스 로그가 양이 많다면 그 정보를 다 읽는 시간이 걸리므로 주의한다. (filebeat 자체적으로 해당 파일의 offset을 관리하기 때문)&lt;/li&gt;
  &lt;li&gt;파일의 offset 관리는 $FILE_BEAT_HOME/data/registry 관리 한다.&lt;/li&gt;
  &lt;li&gt;만약 리로드 하고 싶자면 registry 폴더를 삭제 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;6-logstatsh-설치&quot;&gt;6. logStatsh 설치&lt;/h1&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Java 기반 logstash라 Any Platform 임 다운로드   
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.0.0.tar.gz
# 압축 해제 
tar xzvf logstash-7.0.0.tar.gz
cd logstash-7.0.0
cd bin 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;logstash 설정 파일을 아래와 같이 생성 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Sample Logstash configuration for creating a simple
# Beats -&amp;gt; Logstash -&amp;gt; Elasticsearch pipeline.

input {
  beats {
    port =&amp;gt; 5044
  }
}

# grok 필터를 활용하여 엑세스로그 한줄을 아래처럼 파싱하겠다는 의미
# 해당 필터는 JEUS 로깅 설정에 의해 만들어지는 파일의 포멧에 맞추어 설정해야한다.
filter {
  grok {
    match =&amp;gt; { &quot;message&quot; =&amp;gt; [&quot;\[%{YEAR:year}.%{MONTHNUM:month}.%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minutes}:%{SECOND:second}\] %{IP:clientip:ip} \&quot;%{WORD:method} %{URIPATHPARAM:request}\&quot; %{NUMBER:status_code} %{NUMBER:response}&quot;] 
    }
  }
# IP 기준으로 geo location을 변환한다. 
# logstash에 내용 엔진에 해당 내용을 파싱한다.   
  geoip {
    source =&amp;gt; &quot;clientip&quot;
    target =&amp;gt; &quot;geoip&quot;
  } 
# 파싱 한 결과를 시간으로 변환하여 필드로 변환 하여 저장한다.  
  mutate {
        add_field =&amp;gt; { 
            &quot;timestamp&quot; =&amp;gt; &quot;%{year}.%{month}.%{day} %{hour}:%{minutes}:%{second}&quot;
        }
  } 
# timestamp 포맷을 설정한다.   
  date {
       match =&amp;gt; [ &quot;timestamp&quot; , &quot;yyyy.MM.dd HH:mm:ss&quot; ]
       locale =&amp;gt; &quot;ko&quot;
  }
  mutate {
      remove_field =&amp;gt; [ &quot;year&quot; ,&quot;month&quot;,&quot;day&quot;,&quot;hour&quot;,&quot;minutes&quot;,&quot;second&quot;,&quot;tags&quot;]
  } 
  
}

output {
  stdout { codec =&amp;gt; rubydebug }
  elasticsearch {
    hosts =&amp;gt; [&quot;http://localhost:9200&quot;]
    index =&amp;gt; &quot;jeus_log-%{+YYYY.MM.dd}&quot;
   #user =&amp;gt; &quot;elastic&quot;
   #password =&amp;gt; &quot;changeme&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;logstash.conf 파일로 저장 하고 기동&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./logstash  &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; logstash.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;메시지 파싱을 디버깅 하고 싶을 경우 kibana 개발자 도구의 GROK 디버거를 사용하자
    &lt;ul&gt;
      &lt;li&gt;https://www.elastic.co/guide/en/kibana/current/grokdebugger-getting-started.html&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;아래 그림은 JEUS 메시지 파싱 디버깅 결과다&lt;br /&gt;
&lt;img src=&quot;/assets/catpure/log-grok-debuger.png&quot; alt=&quot;grok-debuger&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;잠시 후 logstash에 JEUS 로그가 적재 되면서 Elasticsearch 에 적재가 된다.&lt;/li&gt;
  &lt;li&gt;키바나의 매니지먼트 화면에서 Elasticsearch index management 에서 jeus_log-2019.04.30 패턴이 생성되었지 확인 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;7-kibana-에서-가시화-작업-진행&quot;&gt;7. Kibana 에서 가시화 작업 진행&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;해당 부분은 Kibana 교육 영상으로 대체 한다.&lt;/li&gt;
  &lt;li&gt;차트 만드는 방법은 아래 링크를 확인한다. kibana5이나 6는 차트 생성 방법이 동일하다.아래 링크를 통해 강의듣고 만들어 보아라
    &lt;ul&gt;
      &lt;li&gt;https://www.youtube.com/watch?v=xPjNtd8xUZo&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;8-최종-jeus-로그-기반-으로-가시화&quot;&gt;8. 최종 JEUS 로그 기반 으로 가시화&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;아래 키바나 차트 object를 키비나 관리 폐이지에서 import 한다.
    &lt;ol&gt;
      &lt;li&gt;JEUS 로그 기반으로 만든 키바나 차트 패키지 &lt;a href=&quot;/assets/attach/jeus-log-analysis.json&quot;&gt;jeus-log-analysis&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;그려면 DASHBOARD 메뉴에서 JEUS 로그 분석 대쉬보드가 나온다.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/catpure/kibana-jeus-log-analysis.png&quot; alt=&quot;log-analysis1&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;사용자 요청 및 방문자 수 가시화&lt;/li&gt;
  &lt;li&gt;응답 시간 분포도 확인 가시화&lt;/li&gt;
  &lt;li&gt;사용자 위치 확인 가시화&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/catpure/kibana-jeus-log-analysis-map.png&quot; alt=&quot;log-analysis2&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;지도에서 사용자 위치 확인&lt;/li&gt;
  &lt;li&gt;차트 만드는 방법도 가이드 하고 싶으나 시간 관계상 여기는 넣지 않는다.&lt;/li&gt;
  &lt;li&gt;나는 차트 만들때 https://demo.elastic.co/app/kibana 에 web traffic 대쉬보드를 참고 해 만들었다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/catpure/jeus-log-visual-ref.png&quot; alt=&quot;log-visual-ref&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;참고&quot;&gt;참고&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;docker-compose 설정 파일고 filebeat, logstash 설정 했던 파일들 github에 올려 놓았다.
    &lt;ul&gt;
      &lt;li&gt;https://github.com/kranian/es-jeus-log-analysis&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://taetaetae.github.io/2019/02/10/access-log-to-elastic-stack/&quot;&gt;누구나 할 수 있는 엑세스 로그 분석 따라 해보기 (by Elastic Stack)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="Es_Stack" /><summary type="html">0. 요구 사항 아래 작업을 진행을 이해 하기 위해서는 엘라스틱 스택에 대한 사전 지식이 필요하다. 데이터 분석 엔지니어 나 장애 분석 엔지니어 라면 엘라스틱 스택에 대해 배울만한 가치가 있다고 생각한다. 1. JEUS 로거 샘플 포맷 ``` JEUS 샘플 액세스 로그 [2019.5.2 13:42:55] 192.168.102.3 “GET /cse/orange/SAE-0.2.481.1.100.15.000044/cnt-0.2.481.1.100.15.000044/la” 200 767ms [2019.5.2 13:42:55] 192.168.102.3 “GET /cse/orange/SAE-0.2.481.1.100.12.00168A/cnt-0.2.481.1.100.12.00168A/la” 200 932ms [2019.5.2 13:42:56] 192.168.102.3 “GET /cse/orange/SAE-0.2.481.1.100.15.000037/cnt-0.2.481.1.100.15.000037/la” 200 656ms [2019.5.2 13:42:56] 192.168.102.3 “GET /cse/orange/SAE-0.2.481.1.100.15.000064/cnt-0.2.481.1.100.15.000064/la” 200 625ms [2019.5.2 13:42:56] 192.168.102.3 “GET /cse/orange/SAE-0.2.481.1.100.13.30013C/cnt-0.2.481.1.100.13.30013C/la” 200 646ms [2019.5.2 13:42:58] 192.168.102.3 “GET /cse/orange/SAE-0.2.481.1.100.13.300149/cnt-0.2.481.1.100.13.300149/la” 404 48ms</summary></entry><entry><title type="html">도커 활용하기</title><link href="https://kranian.github.io/tdd/2019/02/08/Docker.html" rel="alternate" type="text/html" title="도커 활용하기" /><published>2019-02-08T00:00:00+00:00</published><updated>2019-02-08T00:00:00+00:00</updated><id>https://kranian.github.io/tdd/2019/02/08/Docker</id><content type="html" xml:base="https://kranian.github.io/tdd/2019/02/08/Docker.html">&lt;h1 id=&quot;왜-도커를-써야-하나요&quot;&gt;왜 도커를 써야 하나요??&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.44bits.io/ko/post/why-should-i-use-docker-container&quot;&gt;왜 굳이 도커(컨테이너)를 써야 하나요?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ciokorea.com/news/39829&quot;&gt;ciokorea 도커의 장단점 설명&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;추천! &lt;a href=&quot;http://blog.drakejin.me/Docker-araboza-1/&quot;&gt;신입 개발자가쓴 도커의 장단점 설명&lt;/a&gt;
    &lt;h2 id=&quot;도커&quot;&gt;도커&lt;/h2&gt;
  &lt;/li&gt;
  &lt;li&gt;추천! &lt;a href=&quot;https://futurecreator.github.io/2018/11/16/docker-container-basics/?fbclid=IwAR3IZ5-uoWyWO0muzYqeBwsgidkqIQbhEzuJi-xX6EB4jFVpRj04nba_PmI&quot;&gt;개인-docker 기초 확실히 다지기&lt;/a&gt;
    &lt;h2 id=&quot;도커-트레이링-영문-강의&quot;&gt;도커 트레이링 영문 강의&lt;/h2&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://training.play-with-docker.com/&quot;&gt;docker play books&lt;/a&gt;
    &lt;h2 id=&quot;도커-활용&quot;&gt;도커 활용&lt;/h2&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://subicura.com/2017/02/25/container-orchestration-with-docker-swarm.html&quot;&gt;개인-Docker Swarm을 이용한 쉽고 빠른 분산 서버 관리&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.oracloud.kr/post/oke-1/&quot;&gt;오라클 클라우드 기술블러그-docker &amp;amp; kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="link" /><summary type="html">왜 도커를 써야 하나요?? 왜 굳이 도커(컨테이너)를 써야 하나요? ciokorea 도커의 장단점 설명 추천! 신입 개발자가쓴 도커의 장단점 설명 도커 추천! 개인-docker 기초 확실히 다지기 도커 트레이링 영문 강의 docker play books 도커 활용 개인-Docker Swarm을 이용한 쉽고 빠른 분산 서버 관리 오라클 클라우드 기술블러그-docker &amp;amp; kubernetes</summary></entry><entry><title type="html">엘라스틱 서치 6.5.5 -&amp;gt; 6.6.0 업그레이드 치트 키</title><link href="https://kranian.github.io/elasticsearch/2019/02/08/Elasticsearch_upgrade.html" rel="alternate" type="text/html" title="엘라스틱 서치 6.5.5 -&gt; 6.6.0 업그레이드 치트 키" /><published>2019-02-08T00:00:00+00:00</published><updated>2019-02-08T00:00:00+00:00</updated><id>https://kranian.github.io/elasticsearch/2019/02/08/Elasticsearch_upgrade</id><content type="html" xml:base="https://kranian.github.io/elasticsearch/2019/02/08/Elasticsearch_upgrade.html">&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1. Disable shard allocation
curl -X PUT &quot;http://localhost:9200/_cluster/settings&quot; -H 'Content-Type: application/json' -d'
{
  &quot;persistent&quot;: {
    &quot;cluster.routing.allocation.enable&quot;: &quot;none&quot;
  }
}
'
2. Stop non-essential indexing and perform a synced flush
curl -X POST &quot;localhost:9200/_flush/synced&quot;

3. Stop elastic search 

4. Upgrade the node you shut down.
  - 업그레이드 하기전에 x-pack 사용중지 elasticsearch-plugin remove x-pack

5. Start the upgraded node. 확인 
curl -X GET &quot;localhost:9200/_cat/nodes&quot;

6. Reenable shard allocation.
curl -X PUT &quot;localhost:9200/_cluster/settings&quot; -H 'Content-Type: application/json' -d'
{
  &quot;persistent&quot;: {
    &quot;cluster.routing.allocation.enable&quot;: null
  }
}
'
9. Wait for the node to recover. (양이 많아 엄청 오래 걸림 약 1시간 걸림)

while true 
 do
 echo &quot;-----------------------------------------------&quot;
 curl -X GET &quot;localhost:9200/_cat/health&quot; -w '\n'
 sleep 1
done 

Wait for the status column to switch from yellow to green. Once the node is green, all primary and replica shards have been allocated.

10. 각 인덱스 별 recovery 확인 
curl -X GET &quot;localhost:9200/_cat/recovery&quot;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;참고-문헌&quot;&gt;참고 문헌&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html&quot;&gt;공식문서 엘라스틱 업그레이드&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="Es_Stack" /><summary type="html">``` Disable shard allocation curl -X PUT “http://localhost:9200/_cluster/settings” -H ‘Content-Type: application/json’ -d’ { “persistent”: { “cluster.routing.allocation.enable”: “none” } } ‘ Stop non-essential indexing and perform a synced flush curl -X POST “localhost:9200/_flush/synced”</summary></entry><entry><title type="html">읽을거리 링크</title><link href="https://kranian.github.io/tdd/2019/02/08/TDD.html" rel="alternate" type="text/html" title="읽을거리 링크" /><published>2019-02-08T00:00:00+00:00</published><updated>2019-02-08T00:00:00+00:00</updated><id>https://kranian.github.io/tdd/2019/02/08/TDD</id><content type="html" xml:base="https://kranian.github.io/tdd/2019/02/08/TDD.html">&lt;h1 id=&quot;웹-api-파헤치기&quot;&gt;웹 API 파헤치기&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jungwoon.github.io/infra,%20api,%20cloud/2019/01/31/Api-Summary/&quot;&gt;API 관련 내용&lt;/a&gt;
    &lt;h1 id=&quot;인터뷰-후기&quot;&gt;인터뷰 후기&lt;/h1&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/aershov24/30-docker-interview-questions-to-ace-devops-engineer-interview-2277&quot;&gt;DevOps 인터뷰 30가지&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://velog.io/@tmmoond8/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EC%9D%B8%ED%84%B0%EB%B7%B0-%ED%9B%84%EA%B8%B0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC-%EC%9E%91%EC%84%B1-%EC%A4%91&quot;&gt;프론트엔드 개발자 인터뷰 후기&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://krksap.tistory.com/1136?fbclid=IwAR0vKYlldQKnskLxp_-2ToNxEG5XmDU94yqnX2WG2eJtBih48UKlfZYeCk8&quot;&gt;Java백엔드 코딩 면접 후기&lt;/a&gt;
    &lt;h1 id=&quot;힘내자-아자아자&quot;&gt;힘내자 아자아자&lt;/h1&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://velog.io/@chris/%EB%B2%88%EC%97%AD-2018%EB%85%84-%EB%82%B4%EA%B0%80-%EB%AA%A8%EB%A5%B4%EB%8A%94-%EA%B8%B0%EC%88%A0%EB%93%A4-rnjr3h8mgj&quot;&gt;2018년, 내가 모르는 기술들&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="link" /><summary type="html">웹 API 파헤치기 API 관련 내용 인터뷰 후기 DevOps 인터뷰 30가지 프론트엔드 개발자 인터뷰 후기 Java백엔드 코딩 면접 후기 힘내자 아자아자 2018년, 내가 모르는 기술들</summary></entry><entry><title type="html">포테이너 설치 하기</title><link href="https://kranian.github.io/tdd/2019/02/07/Portainer.html" rel="alternate" type="text/html" title="포테이너 설치 하기" /><published>2019-02-07T00:00:00+00:00</published><updated>2019-02-07T00:00:00+00:00</updated><id>https://kranian.github.io/tdd/2019/02/07/Portainer</id><content type="html" xml:base="https://kranian.github.io/tdd/2019/02/07/Portainer.html">&lt;h1 id=&quot;설치-환경&quot;&gt;설치 환경&lt;/h1&gt;
&lt;p&gt;Ubuntu 18.04 기반 Docker-CE 환경에서 S/W를 설치 한다.  Ubuntu 18.04 기반 Docker-CE 설치 방법은 참고 문헌 Portainer설치법 링크에 나와 있다.&lt;/p&gt;

&lt;h2 id=&quot;portainer-설치&quot;&gt;Portainer 설치&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Portainer로  현재 내 서버의 컨테이너 이미지 관리를 web UI로 간편하게 관리 할수 있다. 상세 내용은 &lt;a href=&quot;https://github.com/portainer/portainer&quot;&gt;Portainer 프로젝트&lt;/a&gt;를 참고한다.&lt;/li&gt;
  &lt;li&gt;특징은 도커 이미지 관리, 컨테이너 상태 관리, 컨테이너 템플릿 실행 기능이 들어가 있다. 작은 규모 컨테이너를 운영중이라 해당툴을 설치해 컨테이너 관리로 사용할 예정이다.&lt;/li&gt;
  &lt;li&gt;Command
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; docker volume create portainer_data
 docker run &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--restart&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;always &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt; portainer &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; 9001:9000 &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; /var/run/docker.sock:/var/run/docker.sock &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; /home/volumes/portainer_data:/data portainer/portainer:1.20.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;설치 결과&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;&lt;img src=&quot;/assets/swinstall/dashboard.png&quot; alt=&quot;dashboard&quot; /&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;1. 대쉬보드 화면&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;&lt;img src=&quot;/assets/swinstall/template.png&quot; alt=&quot;template&quot; /&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;2. 도커 템플릿 화면&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;&lt;img src=&quot;/assets/swinstall/container.png&quot; alt=&quot;container&quot; /&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;3. 컨테이너 관리 화면&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;&lt;img src=&quot;/assets/swinstall/hostinfo.png&quot; alt=&quot;hostinfo&quot; /&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;4. 설치된 호스트 정보 화면&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;ul&gt;
  &lt;li&gt;Web으로 서버의 컨테이너 관리 할수 있으며, 필요시 터미널 접속도 지원한다. 간단한 작업는 웹페이지에서 컨테이너 터미널 접속해 처리가 가능하다. 다양한 서버 이미지 템플릿을 제공하고 
 있어 필요시 생성해서 사용한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;참고문헌&quot;&gt;참고문헌&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://clouding.io/kb/en/install-portainer-on-ubuntu-18-04&quot;&gt;Portainer설치법&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="management" /><category term="node" /><summary type="html">설치 환경 Ubuntu 18.04 기반 Docker-CE 환경에서 S/W를 설치 한다. Ubuntu 18.04 기반 Docker-CE 설치 방법은 참고 문헌 Portainer설치법 링크에 나와 있다.</summary></entry><entry><title type="html">IoTKETI/oneM2MTester CLI 모드로 실행 하기</title><link href="https://kranian.github.io/onem2m/2019/01/31/onem2m_tester_cli.html" rel="alternate" type="text/html" title="IoTKETI/oneM2MTester CLI 모드로 실행 하기" /><published>2019-01-31T00:00:00+00:00</published><updated>2019-01-31T00:00:00+00:00</updated><id>https://kranian.github.io/onem2m/2019/01/31/onem2m_tester_cli</id><content type="html" xml:base="https://kranian.github.io/onem2m/2019/01/31/onem2m_tester_cli.html">&lt;h3 id=&quot;1-cli-mode-빌드&quot;&gt;1 CLI Mode 빌드&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# 테스트 케이스 소스 생성 &lt;/span&gt;
jskim@aisop_2_0:~/IdeaProjects&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git https://github.com/IoTKETI/oneM2MTester.git
jskim@aisop_2_0:~/IdeaProjects&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;oneM2MTester 
jskim@aisop_2_0:~/IdeaProjects/oneM2MTester&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;makefilegen &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-g&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-t&lt;/span&gt; oneM2MTester.tpd

&lt;span class=&quot;c&quot;&gt;# 테스트 케이스 빌드 &lt;/span&gt;
jskim@aisop_2_0:~/IdeaProjects/oneM2MTester&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;bin 
jskim@aisop_2_0:~/IdeaProjects/oneM2MTester/bin&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make
&lt;span class=&quot;c&quot;&gt;# 테스트 케이스 빌드 성공 후 바이너리 생성된다. &lt;/span&gt;
jskim@aisop_2_0:~/IdeaProjects/oneM2MTester/bin&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-ltr&lt;/span&gt;  
...
&lt;span class=&quot;nt&quot;&gt;-rw-rw-r--&lt;/span&gt; 1 jskim jskim  2485944 Jan 31 16:54 OneM2M_Testcases_CSE_Release_1.o
&lt;span class=&quot;nt&quot;&gt;-rw-rw-r--&lt;/span&gt; 1 jskim jskim 63010152 Jan 31 16:56 OneM2M_Types.o
&lt;span class=&quot;nt&quot;&gt;-rwxrwxr-x&lt;/span&gt; 1 jskim jskim 52715504 Jan 31 16:56 oneM2MTester &amp;lt;&lt;span class=&quot;nt&quot;&gt;---&lt;/span&gt; 이파일이 생성된다. 

&lt;span class=&quot;c&quot;&gt;# 해당파일 실행 하면 테스트 케이스 목록이 조회됨&lt;/span&gt;
jskim@aisop_2_0:~/IdeaProjects/oneM2MTester/bin&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;./oneM2MTester &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt;
...
OneM2M_Testcases_CSE_Release_2.TC_CSE_SUB_UPD_008
OneM2M_Testcases_CSE_Release_2.TC_CSE_SUB_UPD_009
OneM2M_Testcases_CSE_Release_2.TC_CSE_SUB_DEL_002
OneM2M_Testcases_CSE_Release_2.TC_CSE_SUB_DEL_003
OneM2M_Testcases_CSE_Release_2.TC_CSE_ANNC_001_ACP_UPD
OneM2M_Testcases_CSE_Release_2.TC_CSE_ANNC_001_ACP_CRE
OneM2M_Testcases_CSE_Release_2.TC_CSE_ANNC_001_CNT_UPD
OneM2M_Testcases_CSE_Release_2.TC_CSE_ANNC_001_CNT_CRE
OneM2M_Testcases_CSE_Release_2.TC_CSE_ANNC_001_GRP_UPD
OneM2M_Testcases_CSE_Release_2.TC_CSE_ANNC_001_GRP_CRE
OneM2M_Testcases_CSE_Release_2.TC_CSE_ANNC_001_CIN_CRE

&lt;span class=&quot;c&quot;&gt;# 위 목록은 타이탄 마스터 컨트롤에서 하나씩 테스트케이스를 실행 할때 필요함&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# 빌드는 한번만 하여 생성 하면 종료 된다.  &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;2-cli-mode-실행&quot;&gt;2. CLI Mode 실행&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/assets/tester/mc_cli_mode.png&quot; alt=&quot;runtime&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
1. 마스터 컨트롤 환경 설정 기반으로 실행  
jskim@aisop_2_0:~/IdeaProjects/oneM2MTester&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;mctr_cli oneM2MTester/Configs/oneM2MTesterConfig.cfg 
 

&lt;span class=&quot;k&quot;&gt;*************************************************************************&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; TTCN-3 Test Executor - Main Controller 2                              &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Version: CRL 113 200/6 R4A                                            &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; Copyright &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; 2000-2018 Ericsson Telecom AB                           &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; All rights reserved. This program and the accompanying materials      &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; are made available under the terms of the Eclipse Public License v1.0 &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; which accompanies this distribution, and is available at              &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; http://www.eclipse.org/legal/epl-v10.html                             &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*************************************************************************&lt;/span&gt;

Using configuration file: oneM2MTester/Configs/oneM2MTesterConfig.cfg
MC@aisop_2_0: Unix server socket created successfully.
MC@aisop_2_0: Listening on TCP port 9580.
MC2&amp;gt; cmtc
Waiting &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;HC to connect...

2. 마스터 컨트롤 접속 
jskim@aisop_2_0:~/IdeaProjects/oneM2MTester/bin&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;./oneM2MTester 127.0.0.1 9580 
TTCN-3 Host Controller &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;parallel mode&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, version CRL 113 200/6 R4A
The address of MC was &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;to a &lt;span class=&quot;nb&quot;&gt;local &lt;/span&gt;IP address. This may cause incorrect behavior &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;a HC from a remote host also connects to MC.

&lt;span class=&quot;c&quot;&gt;# 주의사항으로 oneM2MTester 실행시 반드시 바이너리 파일이 있는 곳에서 실행 한다. &lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# 안그려면 oneM2M 테스트 케이스 실행시 테스트기 에서 보내는 리소스 정보의 속성값들이 shortname 이 변환이 안된다. &lt;/span&gt;
 
MC@aisop_2_0: New HC connected from 127.0.0.1 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;127.0.0.1]. aisop_2_0: Linux 4.15.0-43-generic on x86_64.
MC@aisop_2_0: Downloading configuration file to all HCs.
MC@aisop_2_0: Configuration file was processed on all HCs.
MC@aisop_2_0: Creating MTC on host 127.0.0.1.
MC@aisop_2_0: MTC is created.

3. 테스트 케이스 실행
MC2&amp;gt; smtc OneM2M_Testcases_CSE_Release_1.TC_CSE_GEN_RET_001_CSR  
...
MTC@aisop_2_0: Test &lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; TC_CSE_GEN_RET_001_CSR finished. Verdict: pass
MC@aisop_2_0: Test execution finished.

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;참고&quot;&gt;참고&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/IoTKETI/oneM2MTester/blob/master/doc/oneM2MTester_User_Manual/oneM2MTester_User_Guide_ver2_1_0.pdf&quot;&gt;oneM2MTester 설치 메뉴얼&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="test" /><category term="eclipse" /><category term="java" /><summary type="html">1 CLI Mode 빌드 ```bash 테스트 케이스 소스 생성 jskim@aisop_2_0:~/IdeaProjects$ git https://github.com/IoTKETI/oneM2MTester.git jskim@aisop_2_0:~/IdeaProjects$ cd oneM2MTester jskim@aisop_2_0:~/IdeaProjects/oneM2MTester$ makefilegen -f -g -t oneM2MTester.tpd</summary></entry><entry><title type="html">IoTKETI/oneM2MTester 설치 하기</title><link href="https://kranian.github.io/onem2m/2019/01/31/onem2m_tester_install.html" rel="alternate" type="text/html" title="IoTKETI/oneM2MTester 설치 하기" /><published>2019-01-31T00:00:00+00:00</published><updated>2019-01-31T00:00:00+00:00</updated><id>https://kranian.github.io/onem2m/2019/01/31/onem2m_tester_install</id><content type="html" xml:base="https://kranian.github.io/onem2m/2019/01/31/onem2m_tester_install.html">&lt;h1 id=&quot;배경&quot;&gt;배경&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;나는 IoTKETI/oneM2MTester 메뉴얼에 적힌 OS 환경이 달라 이력 사항으로 설치 이력을 아래와 같이 남긴다.  &lt;br /&gt;
 참고사항으로 IoTKETI/oneM2MTester 메뉴얼에 적힌 환경 정보는 &lt;strong&gt;Ubuntu 16.04&lt;/strong&gt; 기반이며 Titan Core 바이너리 또한 Ubuntu 16.04 기반만 배포 하고 있다. 
 만약 처음 설치 하시는 유저는 Ubuntu 16.04에 하는걸 권고한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;해당 툴을 처음 설치하는 분들게 설치에 도움이 되길 희망 한다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;1-설치-환경-정보&quot;&gt;1. 설치 환경 정보&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/assets/tester/osinfo.png&quot; alt=&quot;os&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# 환경 정보&lt;/span&gt;
OS : Ubuntu 18.04 x86_64 , Linux 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h1 id=&quot;2-onem2mtester-runtime-environment&quot;&gt;2. oneM2MTester Runtime Environment&lt;/h1&gt;
&lt;p&gt;테스트 환경을 설정 하기 하기 다음 4가지 설정이 필요하다.&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Java 1.8 설치&lt;/li&gt;
  &lt;li&gt;Eclipse 와 plugins install&lt;/li&gt;
  &lt;li&gt;Titan Core install&lt;/li&gt;
  &lt;li&gt;Configurations : Eclipse 설정&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;21-java-jdk-인스톨&quot;&gt;2.1. Java JDK 인스톨&lt;/h2&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;add-apt-repository ppa:openjdk-r/ppa
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get update
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get install openjdk-8-jdk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;22-eclipse-와-titan-plugins-install&quot;&gt;2.2 Eclipse 와 Titan plugins install&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/assets/tester/eclipse_download.png&quot; alt=&quot;eclise&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;eclipse ide 2018-12 설치&lt;/li&gt;
  &lt;li&gt;인스톨러에서 java developer 플러그인 설치&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/tester/titan_plugin_download.png&quot; alt=&quot;eclise&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;이클립스 타이탄 플러그인 설치 : 6.5.0 설치&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;23-titan-core-install&quot;&gt;2.3 Titan Core install&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/assets/tester/titan_download.png&quot; alt=&quot;titan&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;6.4.0 소스 다운로드 후 소스 컴파일&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# 타이탄 코어 소스 에 필요한 컴파일 도구 설치 &lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt install build-essential
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get install automake
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get install g++ expect libssl-dev libxml2-dev libncurses5-dev flex bison
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get install xutils-dev
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get install ant xsltproc

&lt;span class=&quot;c&quot;&gt;# 빌드 소스 환경 만들기   &lt;/span&gt;
mkdir ~/titan.core

&lt;span class=&quot;c&quot;&gt;# 빌드 소스 다운로드  &lt;/span&gt;
wget https://github.com/eclipse/titan.core/archive/6.4.0.tar.gz

&lt;span class=&quot;c&quot;&gt;# 타이탄 소스 풀기 &lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;tar &lt;/span&gt;xvfz xvf 6.4.0.tar.gz &lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt; ~/titan.core/

&lt;span class=&quot;c&quot;&gt;# 빌드 하기 위해 타이탄 소스로 이동  &lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/titan.core/titan.core-6.4.0

&lt;span class=&quot;c&quot;&gt;# 빌드 바이너리 개인 설정 추가 &lt;/span&gt;
~/titan.core/titan.core-6.4.0&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; Makefile.personal
TTCN3_DIR :&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; /home/jskim/titan.core/Install  
XMLDIR :&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; /usr
OPENSSL_DIR :&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; /usr
JNI :&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; no

&lt;span class=&quot;c&quot;&gt;# 빌드&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# 소스 빌드 시간은 CPU 사양이 낮으면 1~2시간 소용된다. 여기에서는 약 10분내외로 컴파일 되었다.    &lt;/span&gt;
~/titan.core/titan.core-6.4.0&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make &lt;span class=&quot;nt&quot;&gt;-j&lt;/span&gt; 24
~/titan.core/titan.core-6.4.0&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make all 
~/titan.core/titan.core-6.4.0&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make install 

&lt;span class=&quot;c&quot;&gt;# 빌드 성공 후 확인  &lt;/span&gt;
~/titan.core/titan.core-6.4.0/Install# &lt;span class=&quot;nb&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-lt&lt;/span&gt;
drwxr-xr-x 3 xxx xxx 4096 Jan 31 09:40 man
drwxr-xr-x 4 xxx xxx 4096 Jan 31 09:40 include
drwxr-xr-x 2 xxx xxx 4096 Jan 31 09:40 lib
drwxr-xr-x 5 xxx xxx 4096 Jan 31 09:40 etc
drwxr-xr-x 2 xxx xxx 4096 Jan 31 09:40 bin
drwxr-xr-x 5 xxx xxx 4096 Jan 31 09:40 &lt;span class=&quot;nb&quot;&gt;help
&lt;/span&gt;drwxr-xr-x 2 xxx xxx 4096 Jan 31 09:40 demo

&lt;span class=&quot;c&quot;&gt;# 타이탄 코어 실행을 위한 환경 설정 추가  &lt;/span&gt;
~/.bashrc 파일 안에 다음 환경 설정 추가 
...
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;TTCN3_DIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/home/jskim/bin/titan.core
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;TTCN3_DIR&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/bin:&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt; 
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;TTCN3_DIR&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/lib:&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;
.. 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;24-이클립스-환경-설정&quot;&gt;2.4 이클립스 환경 설정&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;이클립스 에서 타이탄 코어 설치 위치 설정 
&lt;img src=&quot;/assets/tester/eclipse_titan_config.png&quot; alt=&quot;titan_config&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;25-onem2mtester-테스터-소스-eclipse에-import&quot;&gt;2.5 oneM2Mtester 테스터 소스 Eclipse에 import&lt;/h2&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# oneM2Mtester 소스 다운로드
git https://github.com/IoTKETI/oneM2MTester.git 

# local eclipse workspace에 해당 소스 workspace에 import  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;26-eclipse-자동-빌드-확인&quot;&gt;2.6 Eclipse 자동 빌드 확인&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/assets/tester/onem2m_tester_builder.png&quot; alt=&quot;onem2m_titan_config&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;27-onem2m-환경-설정&quot;&gt;2.7 oneM2M 환경 설정&lt;/h2&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;공식 메뉴얼에는 src &amp;gt; oneM2MTestConfig.cfg 파일을 시험기 환경 설정에 맞추어 설정 하라고 가이드 하고 있다.   
아래 기본 설정들은 Mobius 에 맞추어 있다.
 
[MAIN_CONTROLLER]
# The options herein control the behavior of MC.
TCPPort := 9580
KillTimer := 10.0

[LOGGING]
LogFile 			:= &quot;../logs/%e.%h-%r.%s&quot;
FileMask 			:= LOG_ALL | DEBUG | ERROR | USER | WARNING | TESTCASE | STATISTICS | MATCHING |VERDICTOP_SETVERDICT
ConsoleMask 		:= TESTCASE | PORTEVENT | ERROR | STATISTICS | MATCHING | VERDICTOP_SETVERDICT | DEBUG
LogSourceInfo 	    := Yes
AppendFile 		    := No
TimeStampFormat 	:= DateTime
LogEventTypes 	    := Yes
SourceInfoFormat 	:= Single
LogEntityName 	    := Yes

[TESTPORT_PARAMETERS]
// mcaPort 
system.mcaPort.defaultListeningPort				:= &quot;0&quot;               // Allow to use specific port number      
system.mcaPort.map_behavior						:= &quot;connect&quot;  
system.mcaPort.RemotePort						:= &quot;7579&quot;	  		 // SUT - Port
system.mcaPort.RemoteHost						:= &quot;192.168.19.147&quot;   // SUT - IP    
system.mcaPort.lazy_conn_id_handling			:= &quot;yes&quot;  
system.mcaPort.debug                            := &quot;yes&quot;
system.mcaPort.map_protocol                     := &quot;tcp&quot;

// mccPort
system.mccPort.defaultListeningPort				:= &quot;0&quot;  
system.mccPort.map_behavior						:= &quot;connect&quot;  
system.mccPort.RemotePort						:= &quot;7579&quot;	  		  // SUT - Port
system.mccPort.RemoteHost						:= &quot;192.168.19.147&quot;   // SUT - IP    
system.mccPort.lazy_conn_id_handling			:= &quot;yes&quot;  
system.mccPort.debug                            := &quot;yes&quot;
system.mcaPort.map_protocol                     := &quot;tcp&quot;

// utPort, this port is used to perform the AE testing.
system.utPort.defaultListeningPort				:= &quot;0&quot;  
system.utPort.map_behavior						:= &quot;connect&quot;  
system.utPort.RemotePort						:= &quot;3000&quot;	  		 // UpperTester - Port
system.utPort.RemoteHost						:= &quot;192.168.19.147&quot;   // UpperTester - IP    
system.utPort.lazy_conn_id_handling				:= &quot;yes&quot;  
system.utPort.debug                             := &quot;yes&quot;  

// mcaPortIn 
system.mcaPortIn.defaultListeningPort			:= &quot;62590&quot;           // Allow to use specific port number      
system.mcaPortIn.map_behavior					:= &quot;listen&quot;   
system.mcaPortIn.debug                          := &quot;yes&quot;
system.mcaPortIn.map_protocol                   := &quot;tcp&quot; 

[MODULE_PARAMETERS]
	
#OneM2M_Constants.tsp_connectionParams 		:=  {&quot;{SUT-SERVER-IP}&quot;, Integer_port, &quot;TEST-SYSTEM-IP&quot;, Integer_port};
OneM2M_Constants.tsp_connectionParams 		:=  {&quot;192.168.0.153&quot;, 7579, &quot;192.168.19.145&quot;, 27689};

OneM2M_Pixits.PX_SERIALIZATION 				:= &quot;JSON&quot;; ## json or xml  
-----------------------------&amp;gt; 시험기 데이타 타입 설정 
OneM2M_Pixits.PX_PROTOCOL_BINDING 			:= &quot;HTTP&quot;; ## coap or http or mqtt 
-----------------------------&amp;gt; 시험기 프로토콜 설정 

OneM2M_Pixits.PX_RUN_POSTAMBLE 						:= true;
    
# SUT M2M-Service Provider ID
OneM2M_Pixits.PX_SP_ID								:= &quot;//keti.re.kr&quot;; 
-----------------------------&amp;gt; 시험기 절대 주소체계 설정
   
# Primtive scope could only either be 'e_cseRelative', 'e_spRelative', or 'e_absolute'
OneM2M_Pixits.PX_PRIMITIVE_SCOPE					:= e_cseRelative; 
-----------------------------&amp;gt; 시험기 주소체계 설정 
    
# Addressing format can only either be 'e_hierarchical' or 'e_nonHierarchical'
OneM2M_Pixits.PX_ADDRESSING_METHOD 					:= e_hierarchical; 
-----------------------------&amp;gt; 시험기 주소체계 설정


OneM2M_Pics.PICS_STRUCTURED_CSE_RELATIVE_RESOURCE_ID_FORMAT 	:= true;	  // hierarcahial CSE-relative resource format support declaration
// OneM2M_Pics.PICS_UNSTRUCTURED_CSE_RELATIVE_RESOURCE_ID_FORMAT 	:= false; // set to 'true' only when 'PX_ADDRESSING_METHOD' is set to 'e_nonHierarchical'
    	
OneM2M_Pics.PICS_ACP_SUPPORT 									:= true;
OneM2M_Pics.PICS_IN_CSE 										:= true;	

# Which component do you want to test (IN or MN)?
OneM2M_Pixits.PX_IN_CSE	:= true;
OneM2M_Pixits.PX_MN_CSE	:= false; 	
OneM2M_Pixits.PX_ASN_CSE:= false; 

# Checking utTrigger port for the automated testing
OneM2M_Pixits.PX_UT_IMPLEMENTED := false;
       
# Parameter settings for the SUT
OneM2M_Pixits.PX_CSE_ID						:= &quot;/Mobius&quot;;// SP-relative_CSE-ID;   
--------------------&amp;gt; 시험기 CSE ID 설정
OneM2M_Pixits.PX_CSE_NAME					:= &quot;Mobius&quot;; // CSEBase resource name 
--------------------&amp;gt; 시험기 CSE Name 설정 
OneM2M_Pixits.PX_CSE_RESOURCE_ID			:= &quot;Mobius&quot;; // CSE-relative_CSE-ID; 
    
OneM2M_Pixits.PX_SUT_ADDRESS				:= &quot;192.168.35.34:7579&quot;; 
--------------------&amp;gt; IUT 주소 수정 
OneM2M_Pixits.PX_AE1_ADDRESS				:= &quot;192.168.19.147:62590&quot;; // poa for notification url
OneM2M_Pixits.PX_AE2_ADDRESS				:= &quot;192.168.19.147:62590&quot;; // poa for notification url

	
OneM2M_Pixits.PX_AE1_ID_STEM				:= &quot;C_AE_ID_STEM_1&quot;; // AE-ID-STEM has to start 'C' or 'S' 
--------------------&amp;gt; 시험기 설정 
OneM2M_Pixits.PX_AE2_ID_STEM				:= &quot;C_AE_ID_STEM_2&quot;; // AE-ID-STEM has to start 'C' or 'S'
OneM2M_Pixits.PX_APP_ID 					:= &quot;0.2.481.2.0001.001.62590&quot;; 
--------------------&amp;gt; 시험기 설정  
    
OneM2M_Pixits.PX_RESOURCES_TO_BE_DELETED 	:= {&quot;MyAe&quot;}; // {MyAe, MyAe2, ...}
// OneM2M_Pixits.PX_RESOURCE_TO_BE_DELETED 	:= &quot;MyAe&quot;;
    
OneM2M_Pixits.PX_SUPER_AE_ID				:= &quot;/Superman&quot;; // Superuser, CSE Minimum Provisioning
OneM2M_Pixits.PX_SUPER_CSE_ID				:= &quot;/Superman&quot;; 

// &quot;all&quot; access control policy is used for a few testcases: 
// TC_CSE_SEC_ACP_004 series, TC_CSE_DMR_UPD_016_CSR_ET, TC_CSE_DMR_UPD_016_CSR_RR
// OneM2M_Pixits.PX_ACOR	 					:= {&quot;Mobius&quot;, &quot;/Mobius&quot;, &quot;C_AE_ID_STEM_1&quot;, &quot;C_AE_ID_STEM_2&quot;}; 
OneM2M_Pixits.PX_ACOR                       := {&quot;all&quot;};

OneM2M_Pixits.PX_ALLOWED_C_AE_IDS := {&quot;C-AllowedAPX_ACOReId&quot;};

# These parameters are used for &amp;lt;remoteCSE&amp;gt;
OneM2M_Pixits.PX_CSE1_ADDRESS				:= &quot;192.168.35.34:7579&quot;;
OneM2M_Pixits.PX_CSE1_NAME 					:= &quot;Mobius&quot;;
OneM2M_Pixits.PX_CSE1_ID 					:= &quot;/Mobius&quot;;

# supportedResourceTypes check of SUT
OneM2M_Pixits.PX_SRT := {int1, int2, int3, int4, int5, int9, int10, int13, int14, int16, int17, int23};
OneM2M_Pixits.PX_POA := {&quot;http://192.168.19.147:7579&quot;};

# Parameter that are not used for the moment (Designed for test location management)
OneM2M_Pixits.PX_IS_LOC_CONTAINER			:= false;
OneM2M_Pixits.PX_XML_NAMESPACE 				:= &quot;m2m=&quot;&quot;http://www.onem2m.org/xml/protocols&quot;&quot;&quot;;
OneM2M_Pixits.PX_LOCATION_TARGET_ID			:= &quot;{LOCATION-TARGET-ID}&quot;; // SUPPOSE TO BE RECEIVED FROM LOCATION SERVER
OneM2M_Pixits.PX_LOCATION_SERVER_ADDRESS	:= &quot;{LOCATION-SERVER-ADDRESS}&quot;;	
OneM2M_Pixits.PX_LOCATION_UPDATE_PERIOD		:= &quot;PT10M10S&quot; ;// 10 Minute 10 Seconds
OneM2M_Pixits.PX_LOCATION_CONTAINER_NAME	:= &quot;myLocContainer&quot;;
 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;참고&quot;&gt;참고&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/IoTKETI/oneM2MTester/blob/master/doc/oneM2MTester_User_Manual/oneM2MTester_User_Guide_ver2_1_0.pdf&quot;&gt;oneM2MTester 설치 메뉴얼&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="test" /><category term="eclipse" /><category term="java" /><summary type="html">배경 나는 IoTKETI/oneM2MTester 메뉴얼에 적힌 OS 환경이 달라 이력 사항으로 설치 이력을 아래와 같이 남긴다. 참고사항으로 IoTKETI/oneM2MTester 메뉴얼에 적힌 환경 정보는 Ubuntu 16.04 기반이며 Titan Core 바이너리 또한 Ubuntu 16.04 기반만 배포 하고 있다. 만약 처음 설치 하시는 유저는 Ubuntu 16.04에 하는걸 권고한다. 해당 툴을 처음 설치하는 분들게 설치에 도움이 되길 희망 한다. 1. 설치 환경 정보</summary></entry><entry><title type="html">마이크로파이썬 네임태그 앱 이식 하기(IBM Developer Meetup 2018)</title><link href="https://kranian.github.io/meetup/2019/01/27/IOTBadge.html" rel="alternate" type="text/html" title="마이크로파이썬 네임태그 앱 이식 하기(IBM Developer Meetup 2018)" /><published>2019-01-27T00:00:00+00:00</published><updated>2019-01-27T00:00:00+00:00</updated><id>https://kranian.github.io/meetup/2019/01/27/IOTBadge</id><content type="html" xml:base="https://kranian.github.io/meetup/2019/01/27/IOTBadge.html">&lt;h2 id=&quot;1-개발-환경-정보&quot;&gt;1. 개발 환경 정보&lt;/h2&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; - Ubuntu 18.04 Destkop amd64  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;2-개발-환경-준비사항&quot;&gt;2. 개발 환경 준비사항&lt;/h2&gt;
&lt;p&gt;picocom 설치&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  sudo apt-get install picocom   
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;webrepl 다운로드&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  git clone https://github.com/micropython/webrepl  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;developer-badge-2018-apps 다운로드&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  git clone https://github.com/IBM-Developer-Korea/developer-badge-2018-apps
  developer-badge-2018-apps/apps/nametag 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;3-webrepl-cli-방식으로-업로드-수행&quot;&gt;3. webrepl CLI 방식으로 업로드 수행&lt;/h2&gt;

&lt;p&gt;업로드를 수행 하기전 IOT뱃지와 같은 네트워크 대역대로 설정 하자. 
참고로 IOT뱃지는 2.4HZ 기반만 Wifi만 지원 한다. 공유기가 2.4HZ를 지원하는지 체크 한다.&lt;/p&gt;

&lt;p&gt;업로드 수행 방법은  CLI 방식과 Web 방식으로 하는 경우가 있는데 web 방식은 단점이 있어 CLI방식으로 사용했다.&lt;/p&gt;

&lt;p&gt;Web 방식은 한번 보낸 후 같을 파일을 보내고자 할 경우 다른 파일을 선택 하고 다시 선택 한다. 강사님 말씀으로는 이게 버그란다.&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;vi&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;편집기를&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;오픈&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;하여&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;네임&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;태그&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;름&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;바꾸기&lt;/span&gt; 
&lt;span class=&quot;n&quot;&gt;vi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;~/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;developer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;badge&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2018&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;apps&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;apps&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nametag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tagmain&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;py&lt;/span&gt;

&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;ujson&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;uos&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;util&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;network&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;utime&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;urequests&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;ugfx&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;home&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;styles&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TagMain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;IS_TEST&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;# Labels&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'허여송'&lt;/span&gt;           &lt;span class=&quot;c&quot;&gt;## 이미지 출력 하단 이름 변경 수정 &lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;org&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'(주)아이렉스넷'&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;## 이미지 출력 상단 이름 변경  수정 &lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;# Nametag Image Server&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'https://2018-devday-nametag.au-syd.mybluemix.net/nametag'&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;     &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__init__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;         &lt;span class=&quot;c&quot;&gt;# initialize ugfx&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;         &lt;span class=&quot;n&quot;&gt;ugfx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;         &lt;span class=&quot;c&quot;&gt;# Container&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;         &lt;span class=&quot;n&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ugfx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;         &lt;span class=&quot;n&quot;&gt;height&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ugfx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;         &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;container&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ugfx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;styles&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ibm_st&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;         &lt;span class=&quot;c&quot;&gt;# Status box&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;         &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;create_status_box&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;33&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;34&lt;/span&gt;         &lt;span class=&quot;c&quot;&gt;# Nametag Image&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;35&lt;/span&gt;         &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'/nametag.gif'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; 
~/iot_sensor/src/webrepl/webrepl_cli.py &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; aaaa ~/iot_sensor/src/developer-badge-2018-apps/apps/nametag/__init__.py 192.168.2.21:/apps/nametag/ 
op:put, host:192.168.2.21, port:8266, passwd:aaaa.
/home/kranian/iot_sensor/src/developer-badge-2018-apps/apps/nametag/__init__.py -&amp;gt; /apps/nametag/__init__.py
Remote WebREPL version: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1, 9, 4&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
Sent 107 of 107 bytes


~/iot_sensor/src/webrepl/webrepl_cli.py &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; aaaa ~/iot_sensor/src/developer-badge-2018-apps/apps/nametag/tagmain.py 192.168.2.21:/apps/nametag/
op:put, host:192.168.2.21, port:8266, passwd:aaaa.

~/iot_sensor/src/developer-badge-2018-apps/apps/nametag/tagmain.py -&amp;gt; /apps/nametag/tagmain.py
Remote WebREPL version: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1, 9, 4&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
Sent 3712 of 3712 bytes

~/iot_sensor/src/webrepl/webrepl_cli.py &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; aaaa ~/iot_sensor/src/developer-badge-2018-apps/apps/nametag/app.json 192.168.2.21:/apps/nametag/ 
op:put, host:192.168.2.21, port:8266, passwd:aaaa.
~/src/developer-badge-2018-apps/apps/nametag/app.json -&amp;gt; /apps/nametag/app.json
Remote WebREPL version: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;1, 9, 4&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
Sent 71 of 71 bytes



여기서 주의사항은 파일 전송시 원격 호스트의 디렉토리 입력시 /app/nametag , /app/nametag/ 하고 차이가 있다.

/app/nametag : 로컬 파일을 다른 파일이름&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;nametag&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;로 전송
/app/nametag/ : 로컬 파일을 nametag 디렉토리로 전송 한다는 의미

이 차이점을 꼭 이해 하자   
 
   

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;4시리얼-연결-후-디렉토리-조회-명령으로-정상-업로드-여부-확인&quot;&gt;4.시리얼 연결 후 디렉토리 조회 명령으로 정상 업로드 여부 확인&lt;/h2&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo picocom -b 115200 -r -l /dev/ttyUSB0  
&amp;gt;&amp;gt;&amp;gt; uos.listdir('/apps/nametag')
['tagmain.py', '__init__.py', 'app.json']
&amp;gt;&amp;gt;&amp;gt; run('tagmain')
Restrt to run app tagmain
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;5재부팅-후-앱-실행&quot;&gt;5.재부팅 후 앱 실행&lt;/h2&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;I (1773) network: CONNECTED
[Errno 2] ENOENT
nametag image file (/nametag.gif) loading failure
---open_status_box---
---set_status_text---:Wait for network
I (3623) event: sta ip: 192.168.2.21, mask: 255.255.255.0, gw: 192.168.2.1
I (3623) network: GOT_IP
---set_status_text---:Network is ready
---set_status_text---:Your device ID is 240AC423C8FC

몇분 후 Network을 통해 이미지를 가져와 이미지를 출력한다.   
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;6결과&quot;&gt;6.결과&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/assets/catpure/iot_nametag.jpg&quot; alt=&quot;nametag&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;7-행사-참여-후기&quot;&gt;7. 행사 참여 후기&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;이식만 하는데 파일 전송 부분에서 삽질 했다. 해결 과정은 페이북에 공개된 강사 분들의 영상을 보고 문제를 해결 했다.&lt;/li&gt;
  &lt;li&gt;IOT 뱃지 하드웨어,펌웨어,앱을 공개해 주신 IBM 디벨로퍼 애드보케이트(Developer Advocate팀)에 감사드린다.&lt;/li&gt;
  &lt;li&gt;마지막으로 IBM 공진기 에반젤리스트님은 전체 프로젝트의 개념과 과정을 앞으로 해당 프로젝트가 사용자들 간의 사용 후기와 해당 오픈 프로젝트가 활성화되었으면 좋겠다고 했다.&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="iot" /><category term="micropython" /><summary type="html">1. 개발 환경 정보 - Ubuntu 18.04 Destkop amd64 2. 개발 환경 준비사항 picocom 설치 sudo apt-get install picocom webrepl 다운로드</summary></entry><entry><title type="html">스카우터 페이퍼 토폴로지 그룹핑 텍스트 중복 현상 수정</title><link href="https://kranian.github.io/github/2019/01/24/Scouter-Papaper.html" rel="alternate" type="text/html" title="스카우터 페이퍼 토폴로지 그룹핑 텍스트 중복 현상 수정" /><published>2019-01-24T00:00:00+00:00</published><updated>2019-01-24T00:00:00+00:00</updated><id>https://kranian.github.io/github/2019/01/24/Scouter%20Papaper</id><content type="html" xml:base="https://kranian.github.io/github/2019/01/24/Scouter-Papaper.html">&lt;p&gt;&lt;a href=&quot;https://github.com/scouter-contrib/scouter-paper/issues/114&quot;&gt;스카우터 페이퍼 이슈 #114&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;지난해 10월경 스카우터 메일링 리스트에서 gunlee01 님이 리뷰 요청하는 글을 봤다. 이슈는 내용은 토폴로지 차트가 움직이면 
중복으로 텍스트가 나타는 현상이었다.&lt;/li&gt;
  &lt;li&gt;이전에도 이런 비슷한 경험을 해본 적이 있어 해당 프로젝트에 이슈 분석을 도전을 해봤다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/catpure/gihtub_scouter-paper.png&quot; alt=&quot;issue&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;1-수정&quot;&gt;1. 수정&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;왜 이런 현상 발생 하는지 재현 테스트를 시도 해봤다.
    &lt;ol&gt;
      &lt;li&gt;일단 중복으로 텍스트가 나오는 클래스의 이름을 찾아봤다. 
&lt;img src=&quot;/assets/catpure/gihtub_scouter-paper1.png&quot; alt=&quot;issue2&quot; /&gt;&lt;/li&gt;
      &lt;li&gt;CSS 클래스명이 .node-inst-count 확인했고 해당 클래스로 조작하는 소스를 찾아 수정 시도했다.&lt;/li&gt;
      &lt;li&gt;의심 되는 대상을 찾아 d3 속성 class 이름 값 .node-inst-count -&amp;gt; node-inst-count 수정&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;2-원인&quot;&gt;2. 원인&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;그럼 왜 이런 현상 발생했을까? 이는 간단했다. d3 텍스트 렌더링 속성에 설정을 잘못 해 발생한 것으로 파악됐다.&lt;/li&gt;
  &lt;li&gt;API 문서를 체크 해 보니  일반적인 설정이 아래와 같았다. 
&lt;img src=&quot;/assets/catpure/gihtub_scouter-paper2.png&quot; alt=&quot;issue3&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;3-소스-수정-후-풀-리퀘스-요청&quot;&gt;3. 소스 수정 후 풀 리퀘스 요청&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/assets/catpure/gihtub_scouter-paper3.png&quot; alt=&quot;issue4&quot; /&gt; 
&lt;img src=&quot;/assets/catpure/gihtub_scouter-paper4.png&quot; alt=&quot;issue5&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;리퀘스 수락 되어 머지가 되었다. &lt;a href=&quot;https://github.com/scouter-contrib/scouter-paper/pull/116/files&quot;&gt;풀리퀘스트내역 #114&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;4-후기&quot;&gt;4. 후기&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;분석 시간만 소요됐고 그외에 소스 수정은 많지는 않았다.&lt;/li&gt;
  &lt;li&gt;항상 느끼는 거지만 이슈 재현만 된다면 문제 되는 지점을 찾는 것은 시간과의 싸움인 것 같다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;참고&quot;&gt;참고&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story&quot;&gt;github풀리퀘스 하는 방법&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="issue,review" /><summary type="html">스카우터 페이퍼 이슈 #114 지난해 10월경 스카우터 메일링 리스트에서 gunlee01 님이 리뷰 요청하는 글을 봤다. 이슈는 내용은 토폴로지 차트가 움직이면 중복으로 텍스트가 나타는 현상이었다. 이전에도 이런 비슷한 경험을 해본 적이 있어 해당 프로젝트에 이슈 분석을 도전을 해봤다.</summary></entry><entry><title type="html">통합 플랫폼 UI 개발 목표 지표</title><link href="https://kranian.github.io/onem2m/2019/01/22/GWP_UI.html" rel="alternate" type="text/html" title="통합 플랫폼 UI 개발 목표 지표" /><published>2019-01-22T00:00:00+00:00</published><updated>2019-01-22T00:00:00+00:00</updated><id>https://kranian.github.io/onem2m/2019/01/22/GWP_UI</id><content type="html" xml:base="https://kranian.github.io/onem2m/2019/01/22/GWP_UI.html">&lt;h1 id=&quot;3-통합-플랫폼--ui-동작-환경-개발&quot;&gt;3. 통합 플랫폼  UI 동작 환경 개발&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;아래 OS 플랫폼에서 동작 확인
    &lt;ul&gt;
      &lt;li&gt;윈도우즈&lt;/li&gt;
      &lt;li&gt;리눅스&lt;/li&gt;
      &lt;li&gt;안드로이드&lt;/li&gt;
      &lt;li&gt;IOS&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;8플랫폼-응답-속도&quot;&gt;8.플랫폼 응답 속도&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;시험 환경 준비 
&lt;img src=&quot;/assets/gwp/2.cert.png&quot; alt=&quot;env1&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;GWP: 테스트 횟수 총 5회 시도&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;목표 : 통합플랫폼UI에서 Create 요청 후 3초 이내에 응답이 와야함
&lt;img src=&quot;/assets/gwp/1.cert.png&quot; alt=&quot;env2&quot; /&gt;&lt;/li&gt;
      &lt;li&gt;테스트 준비
        &lt;ol&gt;
          &lt;li&gt;저장소 생성 : 0.2.481.1.999.1.2.3.Cert
            &lt;ul&gt;
              &lt;li&gt;resource address : /base/SAE-0.2.481.1.999.1.2.3.Cert/cnt-0.2.481.1.999.1.2.3.Cert&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;테스트 시작 
&lt;img src=&quot;/assets/gwp/3.record.png&quot; alt=&quot;env3&quot; /&gt;
        &lt;ol&gt;
          &lt;li&gt;0.2.481.1.999.1.2.3.Cert &lt;cnt&gt; 자식 리소스 &lt;cin&gt; 생성 / 총 5번 수행&lt;/cin&gt;&lt;/cnt&gt;&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;테스트 근거 자료
        &lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;904&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nio&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8087&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;ResourceController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;138&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;http:&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//220.123.184.53:8080/base/SAT-kranian1&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;953&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nio&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8087&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;util&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;OkHttpFactoryUtil&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;$HttpLogger&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;127&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;+-------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;--&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;POST&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;http:&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//220.123.184.53:8080/base/SAT-kranian1&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;Type:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;utf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;Length:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M2M&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;Origin:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;kranian2&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M2M&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;RI:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AiSOP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ddf02679d932e12857b8c2d883193e04f9e5fab&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;Accept:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;m2m:cnt&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;rn&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;kranian2&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;--&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;END&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;POST&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;--&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;201&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Created&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;http:&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//220.123.184.53:8080/base/SAT-kranian1 (47ms)&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;Server:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Apache&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Coyote&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M2M&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;RSC:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2001&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M2M&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;RI:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AiSOP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ddf02679d932e12857b8c2d883193e04f9e5fab&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;Location:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;incse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SAT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kranian1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kranian2&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M2M&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;Origin:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;incse&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M2M&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;OT:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20190121&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T160501&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;Type:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;Length:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;223&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;Date:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Mon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Jan&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt; &lt;span class=&quot;mo&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;01&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;GMT&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;m2m:cnt&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;rn&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;kranian2&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ty&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ri&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/incse/63d0FNATEne8SqXOYB2Lte&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;pi&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/incse/SSAT-kranian1&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ct&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;20190121T160501&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;lt&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;20190121T160501&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;et&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;99991231T235959&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;st&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cr&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;kranian2&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;mia&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2592000&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cni&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cbs&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;--&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;END&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;HTTP&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;223&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;+-------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mo&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;953&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nio&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8087&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;ResourceController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;142&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;duration&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ms&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name>Heo Yeo Song</name></author><category term="ux,test,performance" /><summary type="html">3. 통합 플랫폼 UI 동작 환경 개발 아래 OS 플랫폼에서 동작 확인 윈도우즈 리눅스 안드로이드 IOS 8.플랫폼 응답 속도 시험 환경 준비</summary></entry></feed>