SlideShare a Scribd company logo
Node.js로
IoT 플랫폼 만들기
Contents
1. Node.js 서버의 탄생
2. 데이터 수집 (node.js <-> mongoDB)
3. 데이터 제공 (node.js, RESTAPI, ExpressJS)
SAVE NOW SAVE FUTURE
자기 소개
• 지동현
• 울산대학교 컴퓨터 정보통신 공학부 07학번
• 엔엑스 테크놀로지
• 플랫폼 서비스 팀, 벡엔드 서비스 개발 담당
• Mail – dh1402@nxtcorp.co.kr
사물인터넷 기반으로 언제 어디서나
자동, 수동으로 장치 제어
enbrix는 클라우드 기반의 스마트 에너지 플랫폼에 연결되어
지속적으로 장치 상태를 모니터링하고 분석하여 상황에 맞게
실시간으로 동작하여 스스로 에너지를 절감합니다.
스마트 에너지 시스템 - enbrix
모든 건물에 쉽게 설치 (무선) 상황 맞춤형 적용과 운영 전기 관련 안전 사고 예방전기 요금 절감, 20% 이상
※ 적용 범위내 기준이며 상황에 따라 다름
클라우드 기반 서비스 (SW)
스마트 디바이스 (HW)
• 건물 내 설치
• 설치 환경 맞춤형
System Architecture 1
NBS (Network Bridge Server)
MySQL (Database)
PHP
Apache
Client (Web, Mobile)
Device, Gateway
성공적인 제품 런칭?
서울시 에코하우스 충북 괴산 휴향림(가로등)울산 산업 단지 S-Oil 외 5개사
인천 소재 S사 사옥
1년뒤…
NBS (Network Bridge Server)
비쥬얼 베이직
왜 Node.js 였나?
1. 서버 프로그램을 자바 스크립트로 작성 할 수 있다
왜 Node.js 였나?
 2011년 이후 가장 주목받는 웹 서버 플랫폼 중 하나
출처 https://d2.naver.com/helloworld/5644368
왜 Node.js 였나?
 이벤트 주도 및 논블록킹 I/O 모델
왜 Node.js 였나?
 활발한 버전 업데이트 – 매년 업데이트
 10월에 10.X ‘Active LTS’ 단계로 접어듬
출처 https://d2.naver.com/helloworld/5644368
왜 Node.js 였나?
 쉽게 개발 할 수 있는 환경 제공 (Package Ecosystem)
출처 https://d2.naver.com/helloworld/5644368
Node.js
npm init
package.json
대표님
지동현
주어진 시간은 3개월
MySQL (Database)
PHP
Apache
Client (Web, Mobile)
Device, Gateway
System Architecture 2
1. 메모리, CPU 사용률 감소
설치 장소: 엔엑스 테크놀로지 사무실
H/W 사양: 메모리 8GB, CPU i5 4Core
Node.js 전환 후
NBS 서버 Node.js 서버
2. 장치 제어 요청에 대한 응답 속도가 개선됨
Node.js 전환 후
내용 NBS Node.js
요청 DB를 이용하여 NBS 서버에 명령을 전달함 HTTP 통신을 이용,
서버로 명령 전달
응답 DB를 이용하여 Client에게 응답을 전달함 HTTP 통신을 이용,
Client로 응답 전송
결론 1. Device 명령 요청/ 응답이 느림
2. DB 부하 발생
1. Device 명령 요청/ 응답 속도 개선
2. 정확한 장치 상태 확인 가능
3. 서버 상태 로그 모니터링 가능
Node.js 전환 후
플랫폼 전면 교체
1. 엔엑스 테크놀로지 급격한 성장
 대용량 데이터 처리 기반 필요
 클라우드 서비스의 필요성
2. 다음 단계로 가기 위한 준비
 서비스 창출을 위한 데이터 분석 플랫폼 구축 필요
 API 구축
2014. 2 2015 2016 2017 2018
Quantum Jump!
Start
〮 인도 법인 설립
〮 인도 웨스트벵갈 주 정부와
MOU
〮 HPE 총판 계약
〮 인도 웨스트벵갈 도시개발공사 MOU
Telegraf Node.js
Device Device Device
MongoDB
InfluxDB Node.js Express
Client (web, mobile, 3rd party)
분석용 데이터 저장 : 시계열 데이터 저장
사용자, 지역, 장치 데이터 저장
데이터 제공을 위한 데이터 정형화
데이터 제공
API Server
프로토콜 분석,
MongoDB, Telegraf 데이터 저장
버퍼를 이용한 데이터 수집 관리
System Architecture 3
Node.js로 데이터 수집하기
moongoes vs mongodb native driver
 moongoes 사용하기 편리하게 되어 있는 모듈, 성능을 생각한다면 native driver
 Node.js driver 2.X 사용을 권장
Node.js로 데이터 수집하기
mongoDB에 데이터 삽입하기 – 개별 삽입(update, insert)
Node.js로 데이터 수집하기
mongoDB에 데이터 삽입하기 – 일괄 삽입(Bulk)
Node.js로 데이터 수집하기
Tip> 한번에 많은 데이터가 들어와서 처리해야 될 경우
개별 update 말고 bulk를 이용하여 한번에 삽입하자!
MongoDB 데이터 수집 구조 – Time Series Data (Time + Value)
A 방식 (이벤트)
{
device_mac: ”00:00:00:cc:de:08”,
device_type: ”outlet”,
power: 140,
ts: ISODate(“2018-10-26T01:00:000”)
}
_id device_mac device_type power ts
1 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:00:00.000”)
2 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:01:00.000”)
3 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:02:00.000”)
4 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:03:00.000”)
5 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:04:00.000”)
6 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:05:00.000”)
MongoDB 데이터 수집 구조 – Time Series Data
B 방식 (Document)
{
device_mac: ”00:00:00:cc:de:08”,
device_type: ”outlet”,
ts: ISODate(“2018-10-26T01:00:00.000”)
power: {
0: 20,
1: 40,
…,
58: 10,
59:3
}
}
_id device_mac device_type ts power
1 00:00:00:cc:de:08 outlet ISODate(“2018-10-26T01:00:00.000”) { 60 fields }
A 방식(이벤트) vs B 방식(Document)
 Write Differences:
 Read Differences:
MongoDB 데이터 수집 구조 – Time Series Data
A 방식 B 방식
60 writes 1 writes, 59 updates
A 방식 B 방식
60 read 1 read
Tip> Write, Read 모두 B 방식이 뛰어남
A방식(이벤트) vs B방식(Document)
하지만, 데이터 검색시 쿼리 사용의 어려움이 있음
 A 방식 db.collection.find({ "timestamp": { '$gte': ISODate("2018-10-26T13:03:00.000Z")} });
 B 방식 위처럼 검색 할 수 없음, aggregation 을 이용하여 데이터 조회를 복잡하게 해야됨
MongoDB 데이터 수집 구조 – Time Series Data
_id device_mac device_type power ts
1 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:00:00.000”)
2 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:01:00.000”)
3 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:02:00.000”)
4 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:03:00.000”)
_id device_mac device_type ts power
1 00:00:00:cc:de:08 outlet ISODate(“2018-10-26T01:00:00.000”) { 60 fields }
mongostat
MongoDB에서 발생하는 상황(쿼리 현황, 네트워크 사용 등) 을 모니터링 할 수 있음
MongoDB Performance Test Tool
htop
ubuntu os안에서 발생하는 작업, cpu 사용률, 메모리 사용률 등을 확인 할 수 있음, windows의 작업 관리자와 비슷함
MongoDB Performance Test Tool
top
ubuntu 시스템의 전반적인 것들을 모니터링 할 수 있다.
MongoDB Performance Test Tool
MongoDB Performance Test
MongoDB 테스트 - MS Azure, HP ML30
MongoDB Performance Test
성능에 영향을 주었던 부분
1) document 크기가 증가 할 수록 update 성능이 떨어짐 (mongodb rock 현상)
2) 클라우드상에서 IOPS가 제한되어 있어서 성능을 높여도 초당 장치 처리 갯수가
그대로 유지됨, 클라우드 서비스 사용시 참고!
MongoDB Performance Test
MongoDB 업데이트
mongoDB 3.4 -> 4.0 으로 업데이트 하니 처리 할 수 있는 장치 갯수가 5배정도
높아짐, 처리 속도가 많이 올라가서 놀라웠음!
MongoDB 보안 설정 필수
1. Admin 계정 생성
use admin
db.createUser ({
user: ”user_id",
pwd: ”user_password",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})
2. Security 설정
sudo vi /etc/mongod.conf
security:
authorization: enabled
매우 중요합니다!!
데이터 제공 어떻게 할까
Node.js Express
Client (web, mobile, 3rd party)
데이터 제공
API Server
MongoDB 사용자, 지역, 장치 데이터 저장
데이터 제공을 위한 데이터 정형화
REST API ?
1. REST (Representational state transfer)
2. REST API 왜 사용했는가?
 여러 플랫폼을 지원하기 위함 (3rd party, 타 플랫폼과의 연동)
 API로서 공개 되어야 할때 API에 대한 설명을 도와줌 (Self-descriptive)
 여러가지 문제들을 해결 할 수 있도록 함 (버전 문제, 언어 문제 등)
REST API 사용 방식
Device의 상태를 조회 하고 싶다 (정보)
URL : GET http://192.168.0.100/devices/:device_mac
 URL은 정보의 자원를 표현해야 한다. (/devices/:device_mac)
 자원에 대한 행위는 HTTP Method (GET, POST, PUT, DELETE 등)으로 표현한다.
Bad 
GET /devices/insert/abc
Method Description
GET 리소스를 조회, 해당 도큐먼트에 대한 자세한 정보를 가져옴
POST 리소스를 생성
PUT 리소스를 수정
DELETE 리소스를 삭제
Good
PUT /devices/adc
REST API 사용 방식
 장치 조회시 – 과거 API 형식
Method URL
GET /:getCommandType/:getCommandSubType/:getCommandContents/:userIdx/:randomIdx
 장치 조회시 – 현재 API 형식
Method URL
GET /devices/:device_mac
REST API 사용 쉬웠나?
단순하다
규칙 적음
쉽다?
아니, 어렵다
REST API를 구현하고 REST API라고 부른다. (도전!)
REST API 구현을 포기하고 HTTP API라고 부른다.
REST API가 아니지만 REST API라고 부른다.
REST API 사용 쉬웠나?
Front 개발자와 API 응답 양식을 맞추는 작업이 쉽지 않았음
Backend개발자
모든 API를 서버에서 다 만들어 주면
서버에 부하가 심하다!
(Front 개발자가 요구하는 포멧으로
만들려고 보니 너무 어렵다.. 서버
부하 정말 생기면 어쩌나..)
Frontend 개발자
웹, 모바일 성능이 그리 좋지 않다. 성능
좋은 서버 쪽에서 다 만들어 달라!
(저 포멧을 받으면 내가 엄청 고생 할 것
같은데 큰일이네.. 브라우져가 처리 할 수
있으려나)
REST API 사용 쉬웠나?
결론!
왠만하면 Front end 쪽에서 요청하는 걸로 맞춰주자
api를 오픈 했을때에도 다른 쪽에서 사용 한다고 생각하면 똑같이 어렵다.
Express.js
노드로 웹 어플리케이션 으로 구현 하는 것보다 간편하게 개발 할 수 있도록 만들어진
프레임워크 (http 요청 본문 파싱, 세션 관리, 라우팅 구성, 응답 헤더 설정 등)
Node.js 웹 서버 구현
Express 웹 서버 구현
Express.js
GET /users
전체 사용자 목록 조회
Express.js
app.get(‘/users’, (req, res) => {
// 관련 라우팅 로직 작성 부분
});
const express = require(‘express’);
const router = express.Router();
router.get(‘/users’, (req, res) => {
// 관련 라우팅 로직 작성 부분
})
module.exports = router;
Express.js Router
Express.js 데이터 조회
mongoDB에 데이터 조회하기
비동기 처리 중요함!
/app: 서버 기능
/api: api 로직을 담당
/user
index.js
user.controller.js
/device
/config: 서버가 구동하기 위한 환경 변수 정의
/db: 데이터 베이스 관련 함수 정의
Express.js – 폴더 구조
Data Collect Data Analysis Log Data Report Data
Hub/Device
Management
Hub/Device
Connectivity
Command &
Control
Software
Updates
Data Statistics
Data
Monitoring
User
Management
Policy
Management
REST API
Application Layer - Node.js, Express, MongoDB
Data Manager Layer - Node.js, MongoDB, Telegraf, InfluxDB
Interface Layer – Node.js, Express, API
NX & Echo system vendor IoT devices
우리가 가고 있는 방향
도전, 기회, 보람

More Related Content

What's hot

Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
JeongHun Byeon
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
Play node conference
Play node conferencePlay node conference
Play node conference
John Kim
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea Strike
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
Kris Jeong
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
YoungSu Son
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
Circulus
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
JeongHun Byeon
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
Goonoo Kim
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차
seung-hyun Park
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
Jongwon Kim
 
Node.js
Node.jsNode.js
Node.js
ymtech
 
좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자
좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자
좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자Suyeol Jeon
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
Hyosung Jeon
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
SeungWoo Lee
 
넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크
Rhea Strike
 
Mongo db intro &amp; tips
Mongo db intro &amp; tipsMongo db intro &amp; tips
Mongo db intro &amp; tips
InBum Kim
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
NAVER D2
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기
Paprikhan
 

What's hot (20)

Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
Node.js
Node.jsNode.js
Node.js
 
좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자
좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자
좋은 디자이너, 나쁜 프로젝트매니저, 이상한 개발자
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
 
넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크
 
Mongo db intro &amp; tips
Mongo db intro &amp; tipsMongo db intro &amp; tips
Mongo db intro &amp; tips
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기
 

Similar to CoreDot TechSeminar 2018 - Session2 Ji Donghyun

MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
민태 김
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
문기 박
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
수보 김
 
[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)
Sang Don Kim
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Hyunghun Cho
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
Devgear
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Hyunghun Cho
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
Internship backend
Internship backendInternship backend
Internship backend
Yein Sim
 
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
Amazon Web Services Korea
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
Sang Don Kim
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
Wooyoung Ko
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
NAVER D2
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
Tommy Lee
 
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
iFunFactory Inc.
 
2010 Microsoft @ Cloud Day 안준석 발표자료
2010 Microsoft @ Cloud Day 안준석 발표자료2010 Microsoft @ Cloud Day 안준석 발표자료
2010 Microsoft @ Cloud Day 안준석 발표자료TedAhn
 
How to build oneM2M application solution based on open source
How to build oneM2M application solution based on open sourceHow to build oneM2M application solution based on open source
How to build oneM2M application solution based on open source
KOREA ELECTRONICS TECHNOLOGY INSTITUTE
 
라즈베리파이로 보일러 제어하기
라즈베리파이로 보일러 제어하기라즈베리파이로 보일러 제어하기
라즈베리파이로 보일러 제어하기
Tai Hoon KIM
 
Azure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDBAzure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDB
rockplace
 

Similar to CoreDot TechSeminar 2018 - Session2 Ji Donghyun (20)

MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
Internship backend
Internship backendInternship backend
Internship backend
 
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
 
2010 Microsoft @ Cloud Day 안준석 발표자료
2010 Microsoft @ Cloud Day 안준석 발표자료2010 Microsoft @ Cloud Day 안준석 발표자료
2010 Microsoft @ Cloud Day 안준석 발표자료
 
How to build oneM2M application solution based on open source
How to build oneM2M application solution based on open sourceHow to build oneM2M application solution based on open source
How to build oneM2M application solution based on open source
 
라즈베리파이로 보일러 제어하기
라즈베리파이로 보일러 제어하기라즈베리파이로 보일러 제어하기
라즈베리파이로 보일러 제어하기
 
Azure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDBAzure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDB
 

CoreDot TechSeminar 2018 - Session2 Ji Donghyun

  • 2. Contents 1. Node.js 서버의 탄생 2. 데이터 수집 (node.js <-> mongoDB) 3. 데이터 제공 (node.js, RESTAPI, ExpressJS) SAVE NOW SAVE FUTURE
  • 3. 자기 소개 • 지동현 • 울산대학교 컴퓨터 정보통신 공학부 07학번 • 엔엑스 테크놀로지 • 플랫폼 서비스 팀, 벡엔드 서비스 개발 담당 • Mail – dh1402@nxtcorp.co.kr
  • 4. 사물인터넷 기반으로 언제 어디서나 자동, 수동으로 장치 제어 enbrix는 클라우드 기반의 스마트 에너지 플랫폼에 연결되어 지속적으로 장치 상태를 모니터링하고 분석하여 상황에 맞게 실시간으로 동작하여 스스로 에너지를 절감합니다. 스마트 에너지 시스템 - enbrix 모든 건물에 쉽게 설치 (무선) 상황 맞춤형 적용과 운영 전기 관련 안전 사고 예방전기 요금 절감, 20% 이상 ※ 적용 범위내 기준이며 상황에 따라 다름 클라우드 기반 서비스 (SW) 스마트 디바이스 (HW) • 건물 내 설치 • 설치 환경 맞춤형
  • 5. System Architecture 1 NBS (Network Bridge Server) MySQL (Database) PHP Apache Client (Web, Mobile) Device, Gateway
  • 6. 성공적인 제품 런칭? 서울시 에코하우스 충북 괴산 휴향림(가로등)울산 산업 단지 S-Oil 외 5개사 인천 소재 S사 사옥
  • 8. NBS (Network Bridge Server) 비쥬얼 베이직
  • 9. 왜 Node.js 였나? 1. 서버 프로그램을 자바 스크립트로 작성 할 수 있다
  • 10. 왜 Node.js 였나?  2011년 이후 가장 주목받는 웹 서버 플랫폼 중 하나 출처 https://d2.naver.com/helloworld/5644368
  • 11. 왜 Node.js 였나?  이벤트 주도 및 논블록킹 I/O 모델
  • 12. 왜 Node.js 였나?  활발한 버전 업데이트 – 매년 업데이트  10월에 10.X ‘Active LTS’ 단계로 접어듬 출처 https://d2.naver.com/helloworld/5644368
  • 13. 왜 Node.js 였나?  쉽게 개발 할 수 있는 환경 제공 (Package Ecosystem) 출처 https://d2.naver.com/helloworld/5644368
  • 16. MySQL (Database) PHP Apache Client (Web, Mobile) Device, Gateway System Architecture 2
  • 17. 1. 메모리, CPU 사용률 감소 설치 장소: 엔엑스 테크놀로지 사무실 H/W 사양: 메모리 8GB, CPU i5 4Core Node.js 전환 후 NBS 서버 Node.js 서버
  • 18. 2. 장치 제어 요청에 대한 응답 속도가 개선됨 Node.js 전환 후 내용 NBS Node.js 요청 DB를 이용하여 NBS 서버에 명령을 전달함 HTTP 통신을 이용, 서버로 명령 전달 응답 DB를 이용하여 Client에게 응답을 전달함 HTTP 통신을 이용, Client로 응답 전송 결론 1. Device 명령 요청/ 응답이 느림 2. DB 부하 발생 1. Device 명령 요청/ 응답 속도 개선 2. 정확한 장치 상태 확인 가능
  • 19. 3. 서버 상태 로그 모니터링 가능 Node.js 전환 후
  • 20. 플랫폼 전면 교체 1. 엔엑스 테크놀로지 급격한 성장  대용량 데이터 처리 기반 필요  클라우드 서비스의 필요성 2. 다음 단계로 가기 위한 준비  서비스 창출을 위한 데이터 분석 플랫폼 구축 필요  API 구축 2014. 2 2015 2016 2017 2018 Quantum Jump! Start 〮 인도 법인 설립 〮 인도 웨스트벵갈 주 정부와 MOU 〮 HPE 총판 계약 〮 인도 웨스트벵갈 도시개발공사 MOU
  • 21. Telegraf Node.js Device Device Device MongoDB InfluxDB Node.js Express Client (web, mobile, 3rd party) 분석용 데이터 저장 : 시계열 데이터 저장 사용자, 지역, 장치 데이터 저장 데이터 제공을 위한 데이터 정형화 데이터 제공 API Server 프로토콜 분석, MongoDB, Telegraf 데이터 저장 버퍼를 이용한 데이터 수집 관리 System Architecture 3
  • 22. Node.js로 데이터 수집하기 moongoes vs mongodb native driver  moongoes 사용하기 편리하게 되어 있는 모듈, 성능을 생각한다면 native driver  Node.js driver 2.X 사용을 권장
  • 23. Node.js로 데이터 수집하기 mongoDB에 데이터 삽입하기 – 개별 삽입(update, insert)
  • 24. Node.js로 데이터 수집하기 mongoDB에 데이터 삽입하기 – 일괄 삽입(Bulk)
  • 25. Node.js로 데이터 수집하기 Tip> 한번에 많은 데이터가 들어와서 처리해야 될 경우 개별 update 말고 bulk를 이용하여 한번에 삽입하자!
  • 26. MongoDB 데이터 수집 구조 – Time Series Data (Time + Value) A 방식 (이벤트) { device_mac: ”00:00:00:cc:de:08”, device_type: ”outlet”, power: 140, ts: ISODate(“2018-10-26T01:00:000”) } _id device_mac device_type power ts 1 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:00:00.000”) 2 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:01:00.000”) 3 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:02:00.000”) 4 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:03:00.000”) 5 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:04:00.000”) 6 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:05:00.000”)
  • 27. MongoDB 데이터 수집 구조 – Time Series Data B 방식 (Document) { device_mac: ”00:00:00:cc:de:08”, device_type: ”outlet”, ts: ISODate(“2018-10-26T01:00:00.000”) power: { 0: 20, 1: 40, …, 58: 10, 59:3 } } _id device_mac device_type ts power 1 00:00:00:cc:de:08 outlet ISODate(“2018-10-26T01:00:00.000”) { 60 fields }
  • 28. A 방식(이벤트) vs B 방식(Document)  Write Differences:  Read Differences: MongoDB 데이터 수집 구조 – Time Series Data A 방식 B 방식 60 writes 1 writes, 59 updates A 방식 B 방식 60 read 1 read Tip> Write, Read 모두 B 방식이 뛰어남
  • 29. A방식(이벤트) vs B방식(Document) 하지만, 데이터 검색시 쿼리 사용의 어려움이 있음  A 방식 db.collection.find({ "timestamp": { '$gte': ISODate("2018-10-26T13:03:00.000Z")} });  B 방식 위처럼 검색 할 수 없음, aggregation 을 이용하여 데이터 조회를 복잡하게 해야됨 MongoDB 데이터 수집 구조 – Time Series Data _id device_mac device_type power ts 1 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:00:00.000”) 2 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:01:00.000”) 3 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:02:00.000”) 4 00:00:00:cc:de:08 outlet 140 ISODate(“2018-10-26T01:03:00.000”) _id device_mac device_type ts power 1 00:00:00:cc:de:08 outlet ISODate(“2018-10-26T01:00:00.000”) { 60 fields }
  • 30. mongostat MongoDB에서 발생하는 상황(쿼리 현황, 네트워크 사용 등) 을 모니터링 할 수 있음 MongoDB Performance Test Tool
  • 31. htop ubuntu os안에서 발생하는 작업, cpu 사용률, 메모리 사용률 등을 확인 할 수 있음, windows의 작업 관리자와 비슷함 MongoDB Performance Test Tool
  • 32. top ubuntu 시스템의 전반적인 것들을 모니터링 할 수 있다. MongoDB Performance Test Tool
  • 33. MongoDB Performance Test MongoDB 테스트 - MS Azure, HP ML30
  • 34. MongoDB Performance Test 성능에 영향을 주었던 부분 1) document 크기가 증가 할 수록 update 성능이 떨어짐 (mongodb rock 현상) 2) 클라우드상에서 IOPS가 제한되어 있어서 성능을 높여도 초당 장치 처리 갯수가 그대로 유지됨, 클라우드 서비스 사용시 참고!
  • 35. MongoDB Performance Test MongoDB 업데이트 mongoDB 3.4 -> 4.0 으로 업데이트 하니 처리 할 수 있는 장치 갯수가 5배정도 높아짐, 처리 속도가 많이 올라가서 놀라웠음!
  • 36. MongoDB 보안 설정 필수 1. Admin 계정 생성 use admin db.createUser ({ user: ”user_id", pwd: ”user_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] }) 2. Security 설정 sudo vi /etc/mongod.conf security: authorization: enabled 매우 중요합니다!!
  • 37. 데이터 제공 어떻게 할까 Node.js Express Client (web, mobile, 3rd party) 데이터 제공 API Server MongoDB 사용자, 지역, 장치 데이터 저장 데이터 제공을 위한 데이터 정형화
  • 38. REST API ? 1. REST (Representational state transfer) 2. REST API 왜 사용했는가?  여러 플랫폼을 지원하기 위함 (3rd party, 타 플랫폼과의 연동)  API로서 공개 되어야 할때 API에 대한 설명을 도와줌 (Self-descriptive)  여러가지 문제들을 해결 할 수 있도록 함 (버전 문제, 언어 문제 등)
  • 39. REST API 사용 방식 Device의 상태를 조회 하고 싶다 (정보) URL : GET http://192.168.0.100/devices/:device_mac  URL은 정보의 자원를 표현해야 한다. (/devices/:device_mac)  자원에 대한 행위는 HTTP Method (GET, POST, PUT, DELETE 등)으로 표현한다. Bad  GET /devices/insert/abc Method Description GET 리소스를 조회, 해당 도큐먼트에 대한 자세한 정보를 가져옴 POST 리소스를 생성 PUT 리소스를 수정 DELETE 리소스를 삭제 Good PUT /devices/adc
  • 40. REST API 사용 방식  장치 조회시 – 과거 API 형식 Method URL GET /:getCommandType/:getCommandSubType/:getCommandContents/:userIdx/:randomIdx  장치 조회시 – 현재 API 형식 Method URL GET /devices/:device_mac
  • 41. REST API 사용 쉬웠나? 단순하다 규칙 적음 쉽다? 아니, 어렵다 REST API를 구현하고 REST API라고 부른다. (도전!) REST API 구현을 포기하고 HTTP API라고 부른다. REST API가 아니지만 REST API라고 부른다.
  • 42. REST API 사용 쉬웠나? Front 개발자와 API 응답 양식을 맞추는 작업이 쉽지 않았음 Backend개발자 모든 API를 서버에서 다 만들어 주면 서버에 부하가 심하다! (Front 개발자가 요구하는 포멧으로 만들려고 보니 너무 어렵다.. 서버 부하 정말 생기면 어쩌나..) Frontend 개발자 웹, 모바일 성능이 그리 좋지 않다. 성능 좋은 서버 쪽에서 다 만들어 달라! (저 포멧을 받으면 내가 엄청 고생 할 것 같은데 큰일이네.. 브라우져가 처리 할 수 있으려나)
  • 43. REST API 사용 쉬웠나? 결론! 왠만하면 Front end 쪽에서 요청하는 걸로 맞춰주자 api를 오픈 했을때에도 다른 쪽에서 사용 한다고 생각하면 똑같이 어렵다.
  • 44. Express.js 노드로 웹 어플리케이션 으로 구현 하는 것보다 간편하게 개발 할 수 있도록 만들어진 프레임워크 (http 요청 본문 파싱, 세션 관리, 라우팅 구성, 응답 헤더 설정 등) Node.js 웹 서버 구현 Express 웹 서버 구현
  • 46. Express.js app.get(‘/users’, (req, res) => { // 관련 라우팅 로직 작성 부분 });
  • 47. const express = require(‘express’); const router = express.Router(); router.get(‘/users’, (req, res) => { // 관련 라우팅 로직 작성 부분 }) module.exports = router; Express.js Router
  • 48. Express.js 데이터 조회 mongoDB에 데이터 조회하기 비동기 처리 중요함!
  • 49. /app: 서버 기능 /api: api 로직을 담당 /user index.js user.controller.js /device /config: 서버가 구동하기 위한 환경 변수 정의 /db: 데이터 베이스 관련 함수 정의 Express.js – 폴더 구조
  • 50. Data Collect Data Analysis Log Data Report Data Hub/Device Management Hub/Device Connectivity Command & Control Software Updates Data Statistics Data Monitoring User Management Policy Management REST API Application Layer - Node.js, Express, MongoDB Data Manager Layer - Node.js, MongoDB, Telegraf, InfluxDB Interface Layer – Node.js, Express, API NX & Echo system vendor IoT devices 우리가 가고 있는 방향