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
우리가 가고 있는 방향
도전, 기회, 보람

CoreDot TechSeminar 2018 - Session2 Ji Donghyun

  • 1.
  • 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사 사옥
  • 7.
  • 8.
    NBS (Network BridgeServer) 비쥬얼 베이직
  • 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
  • 14.
  • 15.
  • 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 DeviceDevice MongoDB InfluxDB Node.js Express Client (web, mobile, 3rd party) 분석용 데이터 저장 : 시계열 데이터 저장 사용자, 지역, 장치 데이터 저장 데이터 제공을 위한 데이터 정형화 데이터 제공 API Server 프로토콜 분석, MongoDB, Telegraf 데이터 저장 버퍼를 이용한 데이터 수집 관리 System Architecture 3
  • 22.
    Node.js로 데이터 수집하기 moongoesvs 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 방식(이벤트) vsB 방식(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 웹 서버 구현
  • 45.
  • 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 DataAnalysis 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 우리가 가고 있는 방향
  • 51.