SlideShare a Scribd company logo
1 of 98
Opensource H/W + Node JS
IoT 따라잡기
Day 1
Internet Of Things
IoT 개요
오픈 소스 하드웨어
(open-source hardware)
오픈 소스 문화의 일부로 다음과 같은 것을 가리키는 말이다.
해당 제품과 똑같은 모양 및 기능을 가진 제품을 만드는 데
필요한 모든 것(회로도, 자재 명세서, 인쇄 회로 기판 도면 등)
을 대중에게 공개한 전자제품
하드웨어 기술 언어가 대중에게 공개된 프로그래머블 논리
소자
IoT 개요
Opensource H/W 개요
오픈 소스 하드웨어
(open-source hardware)
오픈 소스 문화의 일부로 다음과 같은 것을 가리키는 말이다.
해당 제품과 똑같은 모양 및 기능을 가진 제품을 만드는 데
필요한 모든 것(회로도, 자재 명세서, 인쇄 회로 기판 도면 등)
을 대중에게 공개한 전자제품
하드웨어 기술 언어가 대중에게 공개된 프로그래머블 논리
소자
Opensource H/W
Opensource H/W
ETC
Why raspbbery pi
Name Arduino
Raspberry Pi
A+
Raspberry Pi
B+
Raspberry Pi
2
Beaglebone
Black
Price $29.95 $20 $35 $35 $45
Processor ATMega 328 ARM 11
ARM
Cortex A7
ARM
Cortex A8
Clock Speed 16Mhz 700 Mhz 900 Mhz
1 Ghz
RAM 2KB 256MB 512MB 1GB 512MB
Multi Core Single Single Single Quad Single
Flash 32KB SD Card SD Card SD Card SD Card
GPIO 26 40 40 40 92
Ethernet N/A 10/100 10/100 10/100 10/100
USB N/A USB 2.0 x 1 USB 2.0 x 4 USB 2.0 x4 USB 2.0 x 1
Video Out N/A HDMI, Composite N/A
Audio Out N/A HDMI, Analog Analog
Raspberry Pi
The maker culture is a contemporary culture or subculture
representing a technology-based extension of DIY culture.
Typical interests enjoyed by the maker culture include
engineering-oriented pursuits such as electronics, robotics,
3-D printing, and the use of CNC tools,[1] as well as more
traditional activities such as metalworking, woodworking,
and traditional arts and crafts. The subculture stresses new
and unique applications of technologies, and encourages
invention and prototyping.[2] There is a strong focus on
using and learning practical skills and applying them
creatively
Maker
Maker
Maker
ExpressJS + Socket.IO
ExpressJS + Socket.IO
ExpressJS + Socket.IO
ExpressJS + Socket.IO
Raspberry Pi OS
XMBC
Minecraft
Neogeo
OS 설치하기
Raspberry Pi OS
Rasbian
- Debian Linux 계열 리눅스
(ubuntu linux 도 debian linux 계열)
- 패키지 지원 및 관련 라이브러리들이 풍부함
- 라즈베리파이 OS 중 가장 많이 활용되고 있음
- 관련 블로그, 학습서, 고객지원이 가장 많은 OS 임
Download
- 최신 Raspbian 다운로드
http://downloads.raspberrypi.org/raspbian_latest
- 기타 OS 다운로드
http://www.raspberrypi.org/downloads/
Rasbian 설치
윈도우 설치
- Win32 Disk Imager 추천
- http://sourceforge.net/projects/win32diskimager/
Rasbian 설치
Mac 설치
$ unzip ~/2014-12-24-wheezy-raspbian.zip
마운트 장치 보기
$ df –h
쓸 장치 추가 후 마운트 장치 확인
$ df –h (/dev/disk2s1 이라는 식으로 장치 추가)
장치 마운트 하기 (마운트 하고 난 후 이름이 바뀜)
$ sudo diskutil unmount /dev/disk2s1
(/dev/disk2s1 -> /dev/rdisk2)
디스크에 기록하기
$ sudo dd bs=4M if=~/2014-12-24-wheey-raspbian.img
of=/dev/rdisk2
메모리 카드 꺼내기
$ sudo diskutil eject /dev/rdisk3
Rasbian 설치
Linux 설치
$ unzip ~/2014-12-24-wheezy-raspbian.zip
마운트 장치 보기
$ df –h
쓸 장치 추가 후 마운트 장치 확인
$ df –h (/dev/sdd1 이라는 식으로 장치 추가)
장치 마운트 하기
$ umount /dev/sdd1
디스크에 기록하기
$ dd bs=4M if=~/2014-12-24-wheey-raspbian.img
of=/dev/sdd
기록 확인 [메모리 저장소 비우기]
$ sudo sync
기본 환경 설정
Rasbian 설치
기본 설정 하기
$ sudo raspi-config
그래픽 인터페이스 (x-window) 실행
$ startx
프로그램 패키지 목록 업데이트
$ sudo apt-get update
설치된 프로그램 중 버전 업 된 프로그램 업데이트
$ sudo apt-get upgrade
Rasbian 설치
OS 재부팅
$ sudo reboot
$ sudo shutdown –r now
OS 종료
$ sudo halt
$ sudo shutdown –h now
Rasbian 설정
파일 시스템 확장하기
Rasbian 설정
키보드 설정하기
Rasbian 설정
패스워드 변경
Rasbian 설정
로케일 설정
Rasbian 설정
패스워드 설정
Rasbian 설정
메모리 할당
Linux 기초
Linux 기본 명령
현재 위치 확인
$ pwd
/home/pi
현재 디렉토리에 담겨있는 내용 확인
$ ls
$ ls –a // 숨김파일 표시
q빈 파일 만들기
touch raspberry
touch pi
디렉토리 만들기
$ mkdir mypi
Linux 기본 명령
파일 이동하기
$ mv [원본 파일명] [대상 파일명]
$ mv pi mypi
경로 이동하기
$ cd [이동할 디렉토리]
$ cd mypi
파일 복사하기
$ cp [원본 파일명] [대상 파일명]
$ cp pi pi2
디렉토리 복사하기
$ cp –r [원본 디렉토리] [대상 디렉토리]
$ cp –r pi1 pi2
Linux 기본 명령
파일 삭제하기
$ rm [파일 명]
$ rm pi1
디렉토리 삭제하기
$ rm –r pi2
$ rm –rf pi2
절대 경로와 상대 경로
절대 경로
- / 로 시작하는 절대 경로 지정
- 시스템의 어느 위치에서도 절대 경로는 동일한 위치를 나
타냄
- 어디에서든지 같은 방향으로 이동
상대 경로
- 파일명, 디렉토리명, 점으로 시작하는 상대경로
-
파일 찾기
시스템에 위치하고 있는 파일을 찾기 위해서는 find 명령을
이용한다.
$ find /home/pi –name index.js
root 디렉터리 부터 검색을 시작할수 있다 (이 경우 오랜시간
이 걸린다.)
$ find / -name index.js
히스토리 확인
이전에 입력했던 명령을 다시 입력하지 않고, 이전 명령을
반복해서 실행하고 싶은 경우, 상하 화살표를 이용하여 이전
명령을 수행하거나 history 명령을 이용할 수 있다.
$ history
이전에 실행한 특정명령을 사용하고자 하는 경우 grep 명령
을 이용해 필터링할 수 있다.
$ history | grep apt-get
프로그램 실행
Foreground 실행 : 일반적인 실행 방법으로 해당 프로그램
동작을 화면에서 확인한다. 다른 프로세스를 실행하기 위해
서는 현재 프로세스를 강제로 종료해야 한다.
$ top
Background 실행 : 현재 프로그램을 Background 로 실행한
다. 다른 프로세스를 실행하기 위해 현재 프로세스를 종료할
필요가 없다. 명령어 뒤에 & 를 붙여주면 된다.
$ top &
백그라운드 프로세스를 Forground 로 되게 하려면 fg 명령
을 활용한다
$fg
Linux 권한
파일 권한
누가 파일에 접근해도 되는지, 안되는 지, 어디까지 가능한지
를 결정하는 기준이 파일 권한 임
1.읽기 권한 : 파일을 읽을 수 있느냐 없느냐
2.쓰기 권한 : 파일을 쓸 수 있느냐 없느냐
3.실행 권한 : 파일을 실행할 수 있느냐 없느냐
User : 파일의 소유자를 가리킨다
Group : 파일을 소유한 그룹을 가리킨다
Others : 다른 사용자를 의미한다.
파일 권한
1. 사용자 명이 해당 파일의 소유자와 같다면, 이 파일에 접
근 할때 사용자 권한이 적용됨
2. 해당 파일의 소유자는 아니여도 파일 그룹에 소속되어 있
다면 그룹 권한을 적용함
3. 해당 파일의 소유자도 아니고 같은 그룹에 소속되지도 않
았다면 다른 사용자에 역할에 비롯된 권한만 적용 됨
파일 권한
권한 설정 부분 가능한 인수
역할 u 사용자
g 그룹
o 다른 사용자 / 다른 세계
a 전부
적용 방법 + 추가
- 제거
= 분명하게 설정
적용 가능한 것 r 읽기
w 쓰기
x 실행
바로 가기 / 링크
1. Soft Link : 윈도우에서 사용되는 바로가기 형태와 유사함.
소프트링크는 실제 파일이 존재하는 디스크의 실제 위치
를 가리키기만 하는 포인터 파일을 만듦.
$ ln –s pi pi2
1. Hard Link : 파일은 하나인데, 이름을 두 개 가질 수 있는
방법임. 원래 파일과 전혀 구별되지 않음. 같은 위치를 가
리키는 이름이 두개라는 의미
$ ln pi pi2
권한
root는 파일시스템의 시작점을 일기도 하며 시스템의 총 관
리를 책임지는 사용자를 의미하기 도 함. 시스템 차원의 기
능 또는 관리 차원의 기능을 위해서는 루트로 신원을 확인
받아야 함
sudo 명령을 이용하면 슈퍼사용자가 되어 root 의 권한을 부
여 받을 수 있음
$ sudo visudo
마이너스(-) 기호는 해당 환경으로 로그인 하겠다는 것을 나
타내며, 다른인수가 붙지 안으면 슈퍼 사용자로 로그인
$ sudo su –
$ sudo -i
RFTM
Read The Flaming Manual (설명서에 다 있어. 읽어봐!)
모르는 명령이 있을때 어플리케이션에 대부분 설명서가 딸
려 있다.
$ man sudoers
Linux 관리
시스템 리소스 모니터링
시스템 관리자가 해야할 주요 업무중 하나는 시스템 리소스
사용 현황을 모니터링 하는 ㅇㄹ임
$ top
작동 시간과 로드 평균
현재 시간과 시스템이 동작한 시간을 알 수 있음.
로드 평균은 CPU 사용량을 나타내는 백분율을 현재 ㅅ용가
능한 컴퓨팅 리소스를 얼마나 사용하고 있는지에 대한 척도.
컴퓨터 리소스 사용량과 CPU 사용 요규량 모두 비교함
태스크
전체 프로세스 수
현재 실행되고 있는 프로세스 수
백그라운드에서 잠자고 있는(대기 모드) 프로세스 수
중단된 프로세스 수
좀비 프로세스의 수
cpu 사용 백분율
us : 사용자 애플리케이션에 할당 됨
sy : 시스템 애플리케이션에 할당 됨
ni : CPU 우선순위를 낮추기 위해 nice 된 프로세스에 할당됨
id : idle 을 나타냄
wa : I/O를 기다리는 프로레스에 할당 됨
hi : 소프트웨어 인터럽트를 기다리는 프로세스에 할당 됨
si : 소프트웨어 인터럽트를 기다리는 프로세스에 할당 됨
st : 하이퍼바이저 (가상 플랫폼을 실행하는 소프트웨어)에
빼앗긴 시간을 표시함
프로세스 테이블
PID : 프로세스의 id 번호
USER : 프로세스를 소유한 사용자
PR : 프로세스의 우선 순위
NI : 프로세스의 nice 값
VIRT : 프로세스가 소비하는 가상 메모리의 양
RES : 실제 상주하는 가상 메모리의 크기
SHR : 프로세스가 사용하고 있는 공유 메모리의 양
S : 프로세스 상태 (가령, 잠자기 상태, 실행 중 상태, 좀비 상
태)
%CPU : CPU 사용 백분율
%MEM : 램 사용 백분율
TIME+ : 태스크가 시작된 이후 사용한 CPU 시간
COMMAND : 명령의 실제 이름
메모리/디스크 사용량 확인
$ free –m
디스크 사용량은 df (Disk Free) 명령을 사용. 이해하기 쉽게
하기 위해서는 –h (Human) 옵션을 활용
$ df
$ df –h
디렉토리의 각 파일 사용량을 상세하게 보기 위해서는 du
(Disk Usage) 명령을 이용
$ du
$ du –h
$ sudo du –sh /var/log
연결된 장치 확인
라즈베리파이의 USB 포트에 연결된 모든 장치를 확인하고자
할때 lsusb 명령을 사용. 자세히 보고자 하면 –v 옵션 이용
$ lsusb
$ lsusb –v
부팅 시 로드되어 있는 하드웨어 장비 리스트를 확인하고자
할때 lspci 명령을 사용. 자세히 보고자 하면 –v 옵션 ㅇ용
$ lspci
$ lspci -v
프로세스 관리하기
ps (processes snapshot) 실행중인 프로세스를 관리하는 데
이용
$ ps
시스템의 모든 프로세스를 표준방식으로 보고자 할때
$ ps –ef
화면밖으로 벗어나지 않도록 보고자 할때 less 를 추가. 위아
래 화살표키로 조절할 수 있음
$ ps –ef | less
프로세스 관리하기
명령 결합으로 특정 애플리케이션의 프로세스를 검색할 수
있음
$ ps –ef | grep sshd
grep 명령이 보이므로 –v 옵션을 활용하면 grep 이 없는 모
든 행을 리턴 받을 수 있음
$ ps –ef | grep sshd | grep –v grep
결과를 좁히기 위해 awk 명령이용한다.
$1 은 첫번 째 텍스트를 가리키고 $2 는 두번 째 텍스트를
가리킨다
$ ps –ef | grep ssh | grep –v grep | awk ‘{print $2}’
프로세스 관리하기
xargs 명령을 사용하면 이전에 실행된 명령의 출력행을 다른
명령의 개별 인수로 사용할 수 있음
ps –ef | grep ssh | grep –v grep | awk ‘{print $2}’ | xargs kill
-l
cron 명령
cron 은 시간에 따라 명령을 싱행하는 애플리케이션임.
어떤 시간 규칙을 전달하면 그에 따라 명령을 실행해 주는
것
현재 등록되어 있는 목록 (crontab) 확인
$ crontab –l
크론탭 항목이 어떻게 구성되는지 알려주는 주석 확인
$ crontab –e
[몇분] [몇시(24)] [몇일] [몇월] [요일번호(일요일0, 토요일6)]
프로세스 관리하기
UID 포로세스의 소유자
PID 프로세스의 PID 번호
PPID 부모 프로세스의 PID 번호
C 프로세스의 CPU 사용량
STIME 프로세스의 시작 시간
TTY 프로세스를 제어하는 터미널
TIME 프로세스가 소비한 누적 CPU 시간
CMD 프로세스의 커맨드 라인 수
프로세스 관리하기
Kill 은 프로세스를 죽이는 동작을 수행. 프로세스를 죽이는
동작이외에 어플리케이션에 신호를 보내고, 어플리케이션에
그 신호에 응답 하는 부분이 있는 경우, 해당 동작을 수행함
Raspbian 에서 총 64 가지의 신호를 보낼 수 있음
신호 목록 보기
$ kill –l
프로세스 죽이기
$ kill <signal> <PID>
$ kill -9 <PID>
프로세스 죽이기
1 SIGHUP hang-up 을 줄인 말. 애플리케이션
에 현재 연결을 끊으라고 알린다. 애
플리케이션을 재 초기화 할 때 사용
3 SIGQUIT quit 애플리케이션에 정상 종료하라
고 알림
6 SIGABRT about 프로그램이 중단된다고 알림.
프로그램은 곧바로 닫힘
9 SIGKILL 강제로 애플리케이셔을 종료 함
프로세스 죽이기
Kill 은 프로세스를 죽이는 동작을 수행. 프로세스를 죽이는
동작이외에 어플리케이션에 신호를 보내고, 어플리케이션에
그 신호에 응답 하는 부분이 있는 경우, 해당 동작을 수행함
Raspbian 에서 총 64 가지의 신호를 보낼 수 있음
신호 목록 보기
$ kill –l
프로세스 죽이기
$ kill <signal> <PID>
$ kill -9 <PID>
Linux 에디터
파일 편집하기
리눅스 콘솔에서 텍스트 파일을 편집하는데, vim 과 nano 가
많이 이용 됨
nano : 사용하기 쉬운 초 경량 텍스트 에디터. 사용하기 쉬우
면서 쓸모있는 기능을 많이 제공
vim : 사용하기 어려우나 강력함. nano 에서 할 수 있는 모두
할 수 있을 뿐만 아니라 비교 기능, 잘라넣기, 붙여넣기, 하이
라이트등 강력한 기능을 제공한다.
$ nano test.txt
단축키
표시 단축 키 동작
^G CTRL + G CTRL + G
^O CTRL + O Write Out
^Y CTRL + Y Prev Page
^K CTRL + K Cut Text
^C CTRL + C Cursor Position
^X CTRL + X Exit
^W CTRL + W Where Is
^V CTRL + V Next Page
^V CTRL + U Un cut text
^T CTRL + T To Spell
NodeJS
Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사
이드) 개발에 사용되는 소프트웨어 플랫폼이다. Node.js는
작성언어로 자바스크립트를 활용하며 Non-blocking I/O와
단일 스레드 이벤트 루프를 통한 높은 처리성능을 가지고 있
다.
Node.js는 내장 HTTP 서버 라이브러리를 포함하고 있어 웹
서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것
이 가능하며 이를 통해 웹서버의 동작에 있어 더 많은 통제
를 가능케 한다.
NodeJS
ExpressJS + Socket.IO
NodeJS Download
짝수 버전은 stable, 홀수 버전은 unstable
case 1. 직접 다운로드 및 컴파일
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential libssl-dev pkg-confi
$ wget http://nodejs.org/dist/v0.10.35/node-v0.10.35.tar.gz
$ tar –zxf node-v.10.24.tar.gz
$ ./configure
$ make && sudo make install
case 2. 배포판 설치
$ wget http://node-
arm.herokuapp.com/node_latest_armhf.deb
$ sudo dpkg -i node_latest_armhf.deb
Hello world 테스트
매우 간단하게 Hello World 를 구축할 수 있음
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World on Raspberry Pi!n');
}).listen(80, '127.0.0.1');
console.log('Server running at http://127.0.0.1:80/');
패키지 설치
전역 설치 /usr/local/node-modules
$ npm install –g <패키지명>
지역 모드
$ npm install <패키지명>
버전 설치
$ npm install <패키지명>@<버전>
$ npm install jshint@1.1.0 // 1.1.0 설치
$ npm install jshint@1.1.x // 해당 Branch의 최신 배포판
$ npm install jshint@”<2.0” // 하위 버전
$ npm install jshint@”>=0.1.0<2.1” // 0.1과 2.1사이의 최신
배포판
패키지 삭제/업데이트
전역 설치 제거 /usr/local/node-modules
$ npm uninstall –g <패키지명>
지역 설치 제거
$ npm uninstall <패키지명>
업데이트
$ npm update <패키지명>
$ npm –g update <패키지명>
모듈 만들기
var sum = function(a,b){
return a+b;
}
exports.sum = sum;
혹은
exports.sum = function(a,b){
return a+b;
}
식으로 직접 선언할 수 있음. 불러오는 법은
var sum = require(‘./sum.js’);
console.log(sum.sum(1,2));
모듈 만들기
var sum = function(a,b){
return a+b;
}
exports.sum = sum;
혹은
exports.sum = function(a,b){
return a+b;
}
식으로 직접 선언할 수 있음. 불러오는 법은
var sum = require(‘./sum.js’);
console.log(sum.sum(1,2));
모듈 로딩
코어 모듈 : nodejs 배포판에 미리 컴파일 된 모듈
var http = require(‘http’);
모듈 명 만으로 참조함. 같은 이름의 서드파티 모듈이 존재
하더라도 우선적으로 로딩 됨
파일 모듈 로딩 : 절대/상대 경로로 로딩하면 로딩 가능
/home/a/b.js
var module = require(‘/home/a/b’);
var module = require(‘./b.js’);
var module = require(‘./b’);
모듈 로딩
코어 모듈 : nodejs 배포판에 미리 컴파일 된 모듈
var http = require(‘http’);
모듈 명 만으로 참조함. 같은 이름의 서드파티 모듈이 존재
하더라도 우선적으로 로딩 됨
파일 모듈 로딩 : 절대/상대 경로로 로딩하면 로딩 가능
/home/a/b.js
var module = require(‘/home/a/b’);
var module = require(‘./b.js’);
var module = require(‘./b’);
모듈 로딩
폴더 모듈 로딩
var module = require(‘./moduleDir’);
해당 폴더 내에서 모듈을 찾음
패키지라고 가정하며, package.json 을 찾는다.
package.json 의 main 속성을 분석해 상대경로를 찾는다.
package.json 파일이 없으면 index.js 를 찾는다
모듈 로딩
폴더 모듈 로딩
var module = require(‘./moduleDir’);
해당 폴더 내에서 모듈을 찾음
패키지라고 가정하며, package.json 을 찾는다.
package.json 의 main 속성을 분석해 상대경로를 찾는다.
package.json 파일이 없으면 index.js 를 찾는다
node_modules 폴더를 이용한 로딩
var module = require(‘myModule.js’)
위와 같이 작성하면 해당 경로
의 ./node_modules/myModule.js 를 차음
그랟 없으면 상위의 node_modules 를 찾음.
위의 방식으로 root 폴더까지 탐색 후 없으면 오류 반환
내장 객체
processs
프로그램과 관련된 정보를 나타내는 객체
브라우저에는 존재하지 않음
argv : 실행 매개변수 – 어떤 파일에서 실행 된 것인지?
env : 컴퓨터 환경 관련 정보
version : Node.JS 버전 0.10.35
arch : 프로그램 아키텍쳐 32bit, 64bit
platform : 플랫폼
memoryUsage() : 메모리 사용량
upime() : 프로그램 실행된 시간
exit() : 프로그램 종료
내장 모듈
os
운영 체제와 관련된 유틸리티 함수들
require(‘os’) 로 사용
tmpdir() : 시스템의 기본 임시 폴더를 리턴
hostname() : 운영체제의 호스트 이름
type() : 운영체제의 이름
platform() : 운영체제
arch() : CPU 아키텍쳐
uptime() : 운영체제 실행된 시간
loadavg() : 운영체제 loadaverage
totalmem() : 메모리
freemem() : 가용 메모리
cpus() : cpu
getNetworkInterfaces() : 네트워크 환경
암호화 모듈
.crypto 모듈은 해시 생성과 암호화를 생성하는 모듈임
id/password 를 저장하는 서버에서 매우 중요
해시화 한 결과 값만 저장하기 때문에 해커가 결과값을 가지
고 있어도 정보를 보호할 수 있음
암호화 모듈
.var crypto = require(‘crypto’);
var key = ‘websecretkey’;
var input = ‘12345678’;
var cipher = crypto.createCipher(‘aes192’,key);
cipher.update(input, ‘utf-8’, ‘base64’);
var cipherOutput = cipher.final(‘base64’);
var decipher = crypto.createDecipher(‘aes192’,key);
decipher.update(cipherOutput, ‘base64’, ‘utf-8’);
var decipherOutput = decipher.final(‘utf-8’);
console.log(‘input : ‘ + input);
console.log(‘cipherOutput : ‘ + cipherOutput);
console.log(‘decipherOutput : ‘ + decipherOutput);
Express JS
Expressjs
.nodejs 를 위한 웹 애플리케이션 프레임워크로, 하나 혹인
여러 웹 페이지를 만들거나 하이브리드 웹 어플리케이션을
위한 기능들을 제공함
var express = require(‘express’);
var app = express();
app.get(‘/’, function(req, res){
res.send(‘hello world!’)
});
var server = app.listen(3000, function(){
var host = server.address().address;
var port = server.address().port;
console.log(‘ExpressJS example at http://$s:$s’, host, port);
});
기본 라우팅
.HTTP 요청 메소드 GET, POST, PUT, DELETE 에 대해 기본적
인 기능으로 간단하게 구현 가능
// respond with "Hello World!" on the homepage
app.get('/', function (req, res) {
res.send('Hello World!');
});
// accept POST request on the homepage
app.post('/', function (req, res) {
res.send('Got a POST request');
});
// accept PUT request at /user
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user');
});
// accept DELETE request at /user
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user');
});
기본 라우팅
.HTTP 요청 메소드 GET, POST, PUT, DELETE 에 대해 기본적
인 기능으로 간단하게 구현 가능
// a middleware sub-stack which handles GET requests to /user/:id
app.get('/user/:id', function (req, res, next) {
// if user id is 0, skip to the next route
if (req.params.id == 0) next('route');
// else pass the control to the next middleware in this stack
else next(); //
}, function (req, res, next) {
// render a regular page
res.render('regular');
});
// handler for /user/:id which renders a special page
app.get('/user/:id', function (req, res, next) {
res.render('special');
});
고급 라우팅
.4.x 부터 새롭게 추가된 router 기능을 활용할 수 있음
var app = express();
var router = express.Router();
// a middleware with no mount path, gets executed for every request to the router
router.use(function (req, res, next) {
console.log('Time:', Date.now()); next();
});
// a middleware sub-stack shows request info for any type of HTTP request to /user/:id
router.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
고급 라우팅
.4.x 부터 새롭게 추가된 router 기능을 활용할 수 있음
// a middleware sub-stack which handles GET requests to /user/:id
router.get('/user/:id', function (req, res, next) {
// if user id is 0, skip to the next router
if (req.params.id == 0) next('route');
// else pass the control to the next middleware in this stack
else next(); //
}, function (req, res, next) {
// render a regular page
res.render('regular');
});
// handler for /user/:id which renders a special page
router.get('/user/:id', function (req, res, next) {
console.log(req.params.id);
res.render('special');
});
// mount the router on the app
app.use('/', router);
Express JS 자동 프로젝트
자동 생성 툴을 활용하면, 샘플 프로젝트를 자동으로 생성해
줌. 샘플 프로젝트를 이용하여, 개발을 수행할 수 있음
$ npm install express-generator –g
샘플 프로젝트 생성
$ express myapp
고급 라우팅
create : myapp
create : myapp/package.json
create : myapp/app.js
create : myapp/public
create : myapp/public/javascripts
create : myapp/public/images
create : myapp/routes
create : myapp/routes/index.js
create : myapp/routes/users.js
create : myapp/public/stylesheets
create : myapp/public/stylesheets/style.css
create : myapp/views
create : myapp/views/index.jade
create : myapp/views/layout.jade
create : myapp/views/error.jade
create : myapp/bin
create : myapp/bin/www
install dependencies:
$ cd myapp && npm install
run the app:
$ DEBUG=myapp ./bin/www
Socket.IO
SocketIO
Unicast Multicast
BroadcastAnycast
SocketIO
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.on('ferret', function (name, fn) {
fn('woot');
});
});
Server side example
SocketIO
var io = require(‘socket.io’).listen(80);
io.sockets.on(‘connection’, function (socket) {
socket.broadcast.emit(‘user connected’);
});
Server side example
Expand your dimension
Circulus (http://www.circul.us) Since 2013
Park Jonggun, Lee Yunjai, Ki Yeonah, Lee Jonghee

More Related Content

What's hot

IoT with Raspberry Pi + Node JS - Chapter 3
IoT with Raspberry Pi + Node JS - Chapter 3IoT with Raspberry Pi + Node JS - Chapter 3
IoT with Raspberry Pi + Node JS - Chapter 3
Park Jonggun
 
caanoo Ernice
caanoo Ernicecaanoo Ernice
caanoo Ernice
jumiss
 

What's hot (20)

Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?
 
PI day in COREA
PI day in COREAPI day in COREA
PI day in COREA
 
IoT with Raspberry Pi + Node JS - Chapter 2
IoT with Raspberry Pi + Node JS - Chapter 2IoT with Raspberry Pi + Node JS - Chapter 2
IoT with Raspberry Pi + Node JS - Chapter 2
 
Ipython server(Jupyter Server) 만들기
Ipython server(Jupyter Server) 만들기Ipython server(Jupyter Server) 만들기
Ipython server(Jupyter Server) 만들기
 
사물인터넷 노트4_라즈베리파이기본
사물인터넷 노트4_라즈베리파이기본사물인터넷 노트4_라즈베리파이기본
사물인터넷 노트4_라즈베리파이기본
 
About raspberrypi
About raspberrypiAbout raspberrypi
About raspberrypi
 
라즈베리파이 IoT 시작하기
라즈베리파이 IoT 시작하기라즈베리파이 IoT 시작하기
라즈베리파이 IoT 시작하기
 
라즈베리파이로 시작하는 Iot세상
라즈베리파이로 시작하는 Iot세상라즈베리파이로 시작하는 Iot세상
라즈베리파이로 시작하는 Iot세상
 
IoT with Raspberry Pi + Node JS - Chapter 3
IoT with Raspberry Pi + Node JS - Chapter 3IoT with Raspberry Pi + Node JS - Chapter 3
IoT with Raspberry Pi + Node JS - Chapter 3
 
Docker설치
Docker설치Docker설치
Docker설치
 
Start io t_with_raspberrypi
Start io t_with_raspberrypiStart io t_with_raspberrypi
Start io t_with_raspberrypi
 
라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강
 
Raspberry pi 개발환경 구축
Raspberry pi 개발환경 구축Raspberry pi 개발환경 구축
Raspberry pi 개발환경 구축
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
caanoo Ernice
caanoo Ernicecaanoo Ernice
caanoo Ernice
 
라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드
 
Maker 오해와 진실
Maker 오해와 진실Maker 오해와 진실
Maker 오해와 진실
 
리눅스 환경에서 SonarQube 간단하게 사용해보기
리눅스 환경에서 SonarQube 간단하게 사용해보기리눅스 환경에서 SonarQube 간단하게 사용해보기
리눅스 환경에서 SonarQube 간단하게 사용해보기
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
Sonar 설치
Sonar 설치Sonar 설치
Sonar 설치
 

Viewers also liked

[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술
[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술
[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술
uxzeitgeist
 
신용카드 전략 Best Output
신용카드 전략 Best Output신용카드 전략 Best Output
신용카드 전략 Best Output
nceo
 

Viewers also liked (18)

Internet of things
Internet of thingsInternet of things
Internet of things
 
Nodejs 기본 아키텍쳐
Nodejs 기본 아키텍쳐Nodejs 기본 아키텍쳐
Nodejs 기본 아키텍쳐
 
[가상편] 하드웨어에 생명을 주는 아두이노
[가상편] 하드웨어에 생명을 주는 아두이노[가상편] 하드웨어에 생명을 주는 아두이노
[가상편] 하드웨어에 생명을 주는 아두이노
 
Internet of Things
Internet of ThingsInternet of Things
Internet of Things
 
아두이노 2강 maker_school
아두이노 2강 maker_school아두이노 2강 maker_school
아두이노 2강 maker_school
 
3D 프린터와 아두이노
3D 프린터와 아두이노3D 프린터와 아두이노
3D 프린터와 아두이노
 
1장 사물인터넷과 라즈베리 파이
1장 사물인터넷과 라즈베리 파이1장 사물인터넷과 라즈베리 파이
1장 사물인터넷과 라즈베리 파이
 
[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술
[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술
[SK UX-HCI] 퍼스널 빅데이터와 라이프로그 HCI-UX 관점의 IOT 기술
 
3장 라즈베리 파이와 gpio
3장 라즈베리 파이와 gpio3장 라즈베리 파이와 gpio
3장 라즈베리 파이와 gpio
 
[1차]모바일결제와 삼성페이(151003)
[1차]모바일결제와 삼성페이(151003)[1차]모바일결제와 삼성페이(151003)
[1차]모바일결제와 삼성페이(151003)
 
Credit Card Industry Analysis
Credit Card Industry AnalysisCredit Card Industry Analysis
Credit Card Industry Analysis
 
삼성페이 개선
삼성페이 개선삼성페이 개선
삼성페이 개선
 
우리나라는 간편결제가 왜 어려운가
우리나라는 간편결제가 왜 어려운가우리나라는 간편결제가 왜 어려운가
우리나라는 간편결제가 왜 어려운가
 
간편결제 시스템 구상
간편결제 시스템 구상간편결제 시스템 구상
간편결제 시스템 구상
 
신용카드 전략 Best Output
신용카드 전략 Best Output신용카드 전략 Best Output
신용카드 전략 Best Output
 
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
 
Samsung Pay, The future of Pay
Samsung Pay, The future of PaySamsung Pay, The future of Pay
Samsung Pay, The future of Pay
 
Home automation using raspberry pi
Home automation using raspberry piHome automation using raspberry pi
Home automation using raspberry pi
 

Similar to IoT with Raspberry Pi + Node JS - Chapter 1

caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driver
jumiss
 

Similar to IoT with Raspberry Pi + Node JS - Chapter 1 (20)

Introduction to Linux #1
Introduction to Linux #1Introduction to Linux #1
Introduction to Linux #1
 
shell and process
shell and processshell and process
shell and process
 
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
 
Linux programming study
Linux programming studyLinux programming study
Linux programming study
 
Network researching
Network researchingNetwork researching
Network researching
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편
 
Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10
 
Linux tutorial
Linux tutorialLinux tutorial
Linux tutorial
 
Raspberry Pi Basic Usage
Raspberry Pi Basic UsageRaspberry Pi Basic Usage
Raspberry Pi Basic Usage
 
망고100 보드로 놀아보자 13
망고100 보드로 놀아보자  13망고100 보드로 놀아보자  13
망고100 보드로 놀아보자 13
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driver
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
리눅스 시작하기
리눅스 시작하기리눅스 시작하기
리눅스 시작하기
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제
 
(140407) #fitalk d trace를 이용한 악성코드 동적 분석
(140407) #fitalk   d trace를 이용한 악성코드 동적 분석(140407) #fitalk   d trace를 이용한 악성코드 동적 분석
(140407) #fitalk d trace를 이용한 악성코드 동적 분석
 
리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1
 
linux1
linux1linux1
linux1
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
오픈 플랫폼 타이젠과 컨트리부션하기(연세대 오픈소스 미니콘서트)
오픈 플랫폼 타이젠과 컨트리부션하기(연세대 오픈소스 미니콘서트)오픈 플랫폼 타이젠과 컨트리부션하기(연세대 오픈소스 미니콘서트)
오픈 플랫폼 타이젠과 컨트리부션하기(연세대 오픈소스 미니콘서트)
 

More from Park Jonggun

More from Park Jonggun (16)

Start IoT with jQueryMobile - 기초6
Start IoT with jQueryMobile - 기초6Start IoT with jQueryMobile - 기초6
Start IoT with jQueryMobile - 기초6
 
Start IoT with jQueryMobile - 기초5
Start IoT with jQueryMobile - 기초5Start IoT with jQueryMobile - 기초5
Start IoT with jQueryMobile - 기초5
 
Start IoT with jQueryMobile - 기초4
Start IoT with jQueryMobile - 기초4Start IoT with jQueryMobile - 기초4
Start IoT with jQueryMobile - 기초4
 
Start IoT with jQueryMobile - 기초3
Start IoT with jQueryMobile - 기초3Start IoT with jQueryMobile - 기초3
Start IoT with jQueryMobile - 기초3
 
Start IoT with jQueryMobile - 기초2
Start IoT with jQueryMobile - 기초2Start IoT with jQueryMobile - 기초2
Start IoT with jQueryMobile - 기초2
 
Start IoT with jQueryMobile - 기초1
Start IoT with jQueryMobile - 기초1Start IoT with jQueryMobile - 기초1
Start IoT with jQueryMobile - 기초1
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2
 
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1
 
Start IoT with JavaScript - 3.제어
Start IoT with JavaScript - 3.제어Start IoT with JavaScript - 3.제어
Start IoT with JavaScript - 3.제어
 
Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
[SCSA] Thinker 에서 Maker 로
[SCSA] Thinker 에서 Maker 로[SCSA] Thinker 에서 Maker 로
[SCSA] Thinker 에서 Maker 로
 
누구나코딩을 V0.04
누구나코딩을 V0.04누구나코딩을 V0.04
누구나코딩을 V0.04
 
Circulus Introduction
Circulus IntroductionCirculus Introduction
Circulus Introduction
 

Recently uploaded

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Recently uploaded (7)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 

IoT with Raspberry Pi + Node JS - Chapter 1

  • 1. Opensource H/W + Node JS IoT 따라잡기 Day 1
  • 4. 오픈 소스 하드웨어 (open-source hardware) 오픈 소스 문화의 일부로 다음과 같은 것을 가리키는 말이다. 해당 제품과 똑같은 모양 및 기능을 가진 제품을 만드는 데 필요한 모든 것(회로도, 자재 명세서, 인쇄 회로 기판 도면 등) 을 대중에게 공개한 전자제품 하드웨어 기술 언어가 대중에게 공개된 프로그래머블 논리 소자 IoT 개요
  • 6. 오픈 소스 하드웨어 (open-source hardware) 오픈 소스 문화의 일부로 다음과 같은 것을 가리키는 말이다. 해당 제품과 똑같은 모양 및 기능을 가진 제품을 만드는 데 필요한 모든 것(회로도, 자재 명세서, 인쇄 회로 기판 도면 등) 을 대중에게 공개한 전자제품 하드웨어 기술 언어가 대중에게 공개된 프로그래머블 논리 소자 Opensource H/W
  • 8. ETC
  • 9. Why raspbbery pi Name Arduino Raspberry Pi A+ Raspberry Pi B+ Raspberry Pi 2 Beaglebone Black Price $29.95 $20 $35 $35 $45 Processor ATMega 328 ARM 11 ARM Cortex A7 ARM Cortex A8 Clock Speed 16Mhz 700 Mhz 900 Mhz 1 Ghz RAM 2KB 256MB 512MB 1GB 512MB Multi Core Single Single Single Quad Single Flash 32KB SD Card SD Card SD Card SD Card GPIO 26 40 40 40 92 Ethernet N/A 10/100 10/100 10/100 10/100 USB N/A USB 2.0 x 1 USB 2.0 x 4 USB 2.0 x4 USB 2.0 x 1 Video Out N/A HDMI, Composite N/A Audio Out N/A HDMI, Analog Analog
  • 11. The maker culture is a contemporary culture or subculture representing a technology-based extension of DIY culture. Typical interests enjoyed by the maker culture include engineering-oriented pursuits such as electronics, robotics, 3-D printing, and the use of CNC tools,[1] as well as more traditional activities such as metalworking, woodworking, and traditional arts and crafts. The subculture stresses new and unique applications of technologies, and encourages invention and prototyping.[2] There is a strong focus on using and learning practical skills and applying them creatively Maker
  • 12. Maker
  • 13. Maker
  • 19. XMBC
  • 24. Rasbian - Debian Linux 계열 리눅스 (ubuntu linux 도 debian linux 계열) - 패키지 지원 및 관련 라이브러리들이 풍부함 - 라즈베리파이 OS 중 가장 많이 활용되고 있음 - 관련 블로그, 학습서, 고객지원이 가장 많은 OS 임 Download - 최신 Raspbian 다운로드 http://downloads.raspberrypi.org/raspbian_latest - 기타 OS 다운로드 http://www.raspberrypi.org/downloads/
  • 25. Rasbian 설치 윈도우 설치 - Win32 Disk Imager 추천 - http://sourceforge.net/projects/win32diskimager/
  • 26. Rasbian 설치 Mac 설치 $ unzip ~/2014-12-24-wheezy-raspbian.zip 마운트 장치 보기 $ df –h 쓸 장치 추가 후 마운트 장치 확인 $ df –h (/dev/disk2s1 이라는 식으로 장치 추가) 장치 마운트 하기 (마운트 하고 난 후 이름이 바뀜) $ sudo diskutil unmount /dev/disk2s1 (/dev/disk2s1 -> /dev/rdisk2) 디스크에 기록하기 $ sudo dd bs=4M if=~/2014-12-24-wheey-raspbian.img of=/dev/rdisk2 메모리 카드 꺼내기 $ sudo diskutil eject /dev/rdisk3
  • 27. Rasbian 설치 Linux 설치 $ unzip ~/2014-12-24-wheezy-raspbian.zip 마운트 장치 보기 $ df –h 쓸 장치 추가 후 마운트 장치 확인 $ df –h (/dev/sdd1 이라는 식으로 장치 추가) 장치 마운트 하기 $ umount /dev/sdd1 디스크에 기록하기 $ dd bs=4M if=~/2014-12-24-wheey-raspbian.img of=/dev/sdd 기록 확인 [메모리 저장소 비우기] $ sudo sync
  • 29. Rasbian 설치 기본 설정 하기 $ sudo raspi-config 그래픽 인터페이스 (x-window) 실행 $ startx 프로그램 패키지 목록 업데이트 $ sudo apt-get update 설치된 프로그램 중 버전 업 된 프로그램 업데이트 $ sudo apt-get upgrade
  • 30. Rasbian 설치 OS 재부팅 $ sudo reboot $ sudo shutdown –r now OS 종료 $ sudo halt $ sudo shutdown –h now
  • 38. Linux 기본 명령 현재 위치 확인 $ pwd /home/pi 현재 디렉토리에 담겨있는 내용 확인 $ ls $ ls –a // 숨김파일 표시 q빈 파일 만들기 touch raspberry touch pi 디렉토리 만들기 $ mkdir mypi
  • 39. Linux 기본 명령 파일 이동하기 $ mv [원본 파일명] [대상 파일명] $ mv pi mypi 경로 이동하기 $ cd [이동할 디렉토리] $ cd mypi 파일 복사하기 $ cp [원본 파일명] [대상 파일명] $ cp pi pi2 디렉토리 복사하기 $ cp –r [원본 디렉토리] [대상 디렉토리] $ cp –r pi1 pi2
  • 40. Linux 기본 명령 파일 삭제하기 $ rm [파일 명] $ rm pi1 디렉토리 삭제하기 $ rm –r pi2 $ rm –rf pi2
  • 41. 절대 경로와 상대 경로 절대 경로 - / 로 시작하는 절대 경로 지정 - 시스템의 어느 위치에서도 절대 경로는 동일한 위치를 나 타냄 - 어디에서든지 같은 방향으로 이동 상대 경로 - 파일명, 디렉토리명, 점으로 시작하는 상대경로 -
  • 42. 파일 찾기 시스템에 위치하고 있는 파일을 찾기 위해서는 find 명령을 이용한다. $ find /home/pi –name index.js root 디렉터리 부터 검색을 시작할수 있다 (이 경우 오랜시간 이 걸린다.) $ find / -name index.js
  • 43. 히스토리 확인 이전에 입력했던 명령을 다시 입력하지 않고, 이전 명령을 반복해서 실행하고 싶은 경우, 상하 화살표를 이용하여 이전 명령을 수행하거나 history 명령을 이용할 수 있다. $ history 이전에 실행한 특정명령을 사용하고자 하는 경우 grep 명령 을 이용해 필터링할 수 있다. $ history | grep apt-get
  • 44. 프로그램 실행 Foreground 실행 : 일반적인 실행 방법으로 해당 프로그램 동작을 화면에서 확인한다. 다른 프로세스를 실행하기 위해 서는 현재 프로세스를 강제로 종료해야 한다. $ top Background 실행 : 현재 프로그램을 Background 로 실행한 다. 다른 프로세스를 실행하기 위해 현재 프로세스를 종료할 필요가 없다. 명령어 뒤에 & 를 붙여주면 된다. $ top & 백그라운드 프로세스를 Forground 로 되게 하려면 fg 명령 을 활용한다 $fg
  • 46. 파일 권한 누가 파일에 접근해도 되는지, 안되는 지, 어디까지 가능한지 를 결정하는 기준이 파일 권한 임 1.읽기 권한 : 파일을 읽을 수 있느냐 없느냐 2.쓰기 권한 : 파일을 쓸 수 있느냐 없느냐 3.실행 권한 : 파일을 실행할 수 있느냐 없느냐 User : 파일의 소유자를 가리킨다 Group : 파일을 소유한 그룹을 가리킨다 Others : 다른 사용자를 의미한다.
  • 47. 파일 권한 1. 사용자 명이 해당 파일의 소유자와 같다면, 이 파일에 접 근 할때 사용자 권한이 적용됨 2. 해당 파일의 소유자는 아니여도 파일 그룹에 소속되어 있 다면 그룹 권한을 적용함 3. 해당 파일의 소유자도 아니고 같은 그룹에 소속되지도 않 았다면 다른 사용자에 역할에 비롯된 권한만 적용 됨
  • 48. 파일 권한 권한 설정 부분 가능한 인수 역할 u 사용자 g 그룹 o 다른 사용자 / 다른 세계 a 전부 적용 방법 + 추가 - 제거 = 분명하게 설정 적용 가능한 것 r 읽기 w 쓰기 x 실행
  • 49. 바로 가기 / 링크 1. Soft Link : 윈도우에서 사용되는 바로가기 형태와 유사함. 소프트링크는 실제 파일이 존재하는 디스크의 실제 위치 를 가리키기만 하는 포인터 파일을 만듦. $ ln –s pi pi2 1. Hard Link : 파일은 하나인데, 이름을 두 개 가질 수 있는 방법임. 원래 파일과 전혀 구별되지 않음. 같은 위치를 가 리키는 이름이 두개라는 의미 $ ln pi pi2
  • 50. 권한 root는 파일시스템의 시작점을 일기도 하며 시스템의 총 관 리를 책임지는 사용자를 의미하기 도 함. 시스템 차원의 기 능 또는 관리 차원의 기능을 위해서는 루트로 신원을 확인 받아야 함 sudo 명령을 이용하면 슈퍼사용자가 되어 root 의 권한을 부 여 받을 수 있음 $ sudo visudo 마이너스(-) 기호는 해당 환경으로 로그인 하겠다는 것을 나 타내며, 다른인수가 붙지 안으면 슈퍼 사용자로 로그인 $ sudo su – $ sudo -i
  • 51. RFTM Read The Flaming Manual (설명서에 다 있어. 읽어봐!) 모르는 명령이 있을때 어플리케이션에 대부분 설명서가 딸 려 있다. $ man sudoers
  • 53. 시스템 리소스 모니터링 시스템 관리자가 해야할 주요 업무중 하나는 시스템 리소스 사용 현황을 모니터링 하는 ㅇㄹ임 $ top 작동 시간과 로드 평균 현재 시간과 시스템이 동작한 시간을 알 수 있음. 로드 평균은 CPU 사용량을 나타내는 백분율을 현재 ㅅ용가 능한 컴퓨팅 리소스를 얼마나 사용하고 있는지에 대한 척도. 컴퓨터 리소스 사용량과 CPU 사용 요규량 모두 비교함
  • 54. 태스크 전체 프로세스 수 현재 실행되고 있는 프로세스 수 백그라운드에서 잠자고 있는(대기 모드) 프로세스 수 중단된 프로세스 수 좀비 프로세스의 수 cpu 사용 백분율 us : 사용자 애플리케이션에 할당 됨 sy : 시스템 애플리케이션에 할당 됨 ni : CPU 우선순위를 낮추기 위해 nice 된 프로세스에 할당됨 id : idle 을 나타냄 wa : I/O를 기다리는 프로레스에 할당 됨 hi : 소프트웨어 인터럽트를 기다리는 프로세스에 할당 됨 si : 소프트웨어 인터럽트를 기다리는 프로세스에 할당 됨 st : 하이퍼바이저 (가상 플랫폼을 실행하는 소프트웨어)에 빼앗긴 시간을 표시함
  • 55. 프로세스 테이블 PID : 프로세스의 id 번호 USER : 프로세스를 소유한 사용자 PR : 프로세스의 우선 순위 NI : 프로세스의 nice 값 VIRT : 프로세스가 소비하는 가상 메모리의 양 RES : 실제 상주하는 가상 메모리의 크기 SHR : 프로세스가 사용하고 있는 공유 메모리의 양 S : 프로세스 상태 (가령, 잠자기 상태, 실행 중 상태, 좀비 상 태) %CPU : CPU 사용 백분율 %MEM : 램 사용 백분율 TIME+ : 태스크가 시작된 이후 사용한 CPU 시간 COMMAND : 명령의 실제 이름
  • 56. 메모리/디스크 사용량 확인 $ free –m 디스크 사용량은 df (Disk Free) 명령을 사용. 이해하기 쉽게 하기 위해서는 –h (Human) 옵션을 활용 $ df $ df –h 디렉토리의 각 파일 사용량을 상세하게 보기 위해서는 du (Disk Usage) 명령을 이용 $ du $ du –h $ sudo du –sh /var/log
  • 57. 연결된 장치 확인 라즈베리파이의 USB 포트에 연결된 모든 장치를 확인하고자 할때 lsusb 명령을 사용. 자세히 보고자 하면 –v 옵션 이용 $ lsusb $ lsusb –v 부팅 시 로드되어 있는 하드웨어 장비 리스트를 확인하고자 할때 lspci 명령을 사용. 자세히 보고자 하면 –v 옵션 ㅇ용 $ lspci $ lspci -v
  • 58. 프로세스 관리하기 ps (processes snapshot) 실행중인 프로세스를 관리하는 데 이용 $ ps 시스템의 모든 프로세스를 표준방식으로 보고자 할때 $ ps –ef 화면밖으로 벗어나지 않도록 보고자 할때 less 를 추가. 위아 래 화살표키로 조절할 수 있음 $ ps –ef | less
  • 59. 프로세스 관리하기 명령 결합으로 특정 애플리케이션의 프로세스를 검색할 수 있음 $ ps –ef | grep sshd grep 명령이 보이므로 –v 옵션을 활용하면 grep 이 없는 모 든 행을 리턴 받을 수 있음 $ ps –ef | grep sshd | grep –v grep 결과를 좁히기 위해 awk 명령이용한다. $1 은 첫번 째 텍스트를 가리키고 $2 는 두번 째 텍스트를 가리킨다 $ ps –ef | grep ssh | grep –v grep | awk ‘{print $2}’
  • 60. 프로세스 관리하기 xargs 명령을 사용하면 이전에 실행된 명령의 출력행을 다른 명령의 개별 인수로 사용할 수 있음 ps –ef | grep ssh | grep –v grep | awk ‘{print $2}’ | xargs kill -l
  • 61. cron 명령 cron 은 시간에 따라 명령을 싱행하는 애플리케이션임. 어떤 시간 규칙을 전달하면 그에 따라 명령을 실행해 주는 것 현재 등록되어 있는 목록 (crontab) 확인 $ crontab –l 크론탭 항목이 어떻게 구성되는지 알려주는 주석 확인 $ crontab –e [몇분] [몇시(24)] [몇일] [몇월] [요일번호(일요일0, 토요일6)]
  • 62. 프로세스 관리하기 UID 포로세스의 소유자 PID 프로세스의 PID 번호 PPID 부모 프로세스의 PID 번호 C 프로세스의 CPU 사용량 STIME 프로세스의 시작 시간 TTY 프로세스를 제어하는 터미널 TIME 프로세스가 소비한 누적 CPU 시간 CMD 프로세스의 커맨드 라인 수
  • 63. 프로세스 관리하기 Kill 은 프로세스를 죽이는 동작을 수행. 프로세스를 죽이는 동작이외에 어플리케이션에 신호를 보내고, 어플리케이션에 그 신호에 응답 하는 부분이 있는 경우, 해당 동작을 수행함 Raspbian 에서 총 64 가지의 신호를 보낼 수 있음 신호 목록 보기 $ kill –l 프로세스 죽이기 $ kill <signal> <PID> $ kill -9 <PID>
  • 64. 프로세스 죽이기 1 SIGHUP hang-up 을 줄인 말. 애플리케이션 에 현재 연결을 끊으라고 알린다. 애 플리케이션을 재 초기화 할 때 사용 3 SIGQUIT quit 애플리케이션에 정상 종료하라 고 알림 6 SIGABRT about 프로그램이 중단된다고 알림. 프로그램은 곧바로 닫힘 9 SIGKILL 강제로 애플리케이셔을 종료 함
  • 65. 프로세스 죽이기 Kill 은 프로세스를 죽이는 동작을 수행. 프로세스를 죽이는 동작이외에 어플리케이션에 신호를 보내고, 어플리케이션에 그 신호에 응답 하는 부분이 있는 경우, 해당 동작을 수행함 Raspbian 에서 총 64 가지의 신호를 보낼 수 있음 신호 목록 보기 $ kill –l 프로세스 죽이기 $ kill <signal> <PID> $ kill -9 <PID>
  • 67. 파일 편집하기 리눅스 콘솔에서 텍스트 파일을 편집하는데, vim 과 nano 가 많이 이용 됨 nano : 사용하기 쉬운 초 경량 텍스트 에디터. 사용하기 쉬우 면서 쓸모있는 기능을 많이 제공 vim : 사용하기 어려우나 강력함. nano 에서 할 수 있는 모두 할 수 있을 뿐만 아니라 비교 기능, 잘라넣기, 붙여넣기, 하이 라이트등 강력한 기능을 제공한다. $ nano test.txt
  • 68. 단축키 표시 단축 키 동작 ^G CTRL + G CTRL + G ^O CTRL + O Write Out ^Y CTRL + Y Prev Page ^K CTRL + K Cut Text ^C CTRL + C Cursor Position ^X CTRL + X Exit ^W CTRL + W Where Is ^V CTRL + V Next Page ^V CTRL + U Un cut text ^T CTRL + T To Spell
  • 70. Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사 이드) 개발에 사용되는 소프트웨어 플랫폼이다. Node.js는 작성언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리성능을 가지고 있 다. Node.js는 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것 이 가능하며 이를 통해 웹서버의 동작에 있어 더 많은 통제 를 가능케 한다. NodeJS
  • 72. NodeJS Download 짝수 버전은 stable, 홀수 버전은 unstable case 1. 직접 다운로드 및 컴파일 $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install build-essential libssl-dev pkg-confi $ wget http://nodejs.org/dist/v0.10.35/node-v0.10.35.tar.gz $ tar –zxf node-v.10.24.tar.gz $ ./configure $ make && sudo make install case 2. 배포판 설치 $ wget http://node- arm.herokuapp.com/node_latest_armhf.deb $ sudo dpkg -i node_latest_armhf.deb
  • 73. Hello world 테스트 매우 간단하게 Hello World 를 구축할 수 있음 var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World on Raspberry Pi!n'); }).listen(80, '127.0.0.1'); console.log('Server running at http://127.0.0.1:80/');
  • 74. 패키지 설치 전역 설치 /usr/local/node-modules $ npm install –g <패키지명> 지역 모드 $ npm install <패키지명> 버전 설치 $ npm install <패키지명>@<버전> $ npm install jshint@1.1.0 // 1.1.0 설치 $ npm install jshint@1.1.x // 해당 Branch의 최신 배포판 $ npm install jshint@”<2.0” // 하위 버전 $ npm install jshint@”>=0.1.0<2.1” // 0.1과 2.1사이의 최신 배포판
  • 75. 패키지 삭제/업데이트 전역 설치 제거 /usr/local/node-modules $ npm uninstall –g <패키지명> 지역 설치 제거 $ npm uninstall <패키지명> 업데이트 $ npm update <패키지명> $ npm –g update <패키지명>
  • 76. 모듈 만들기 var sum = function(a,b){ return a+b; } exports.sum = sum; 혹은 exports.sum = function(a,b){ return a+b; } 식으로 직접 선언할 수 있음. 불러오는 법은 var sum = require(‘./sum.js’); console.log(sum.sum(1,2));
  • 77. 모듈 만들기 var sum = function(a,b){ return a+b; } exports.sum = sum; 혹은 exports.sum = function(a,b){ return a+b; } 식으로 직접 선언할 수 있음. 불러오는 법은 var sum = require(‘./sum.js’); console.log(sum.sum(1,2));
  • 78. 모듈 로딩 코어 모듈 : nodejs 배포판에 미리 컴파일 된 모듈 var http = require(‘http’); 모듈 명 만으로 참조함. 같은 이름의 서드파티 모듈이 존재 하더라도 우선적으로 로딩 됨 파일 모듈 로딩 : 절대/상대 경로로 로딩하면 로딩 가능 /home/a/b.js var module = require(‘/home/a/b’); var module = require(‘./b.js’); var module = require(‘./b’);
  • 79. 모듈 로딩 코어 모듈 : nodejs 배포판에 미리 컴파일 된 모듈 var http = require(‘http’); 모듈 명 만으로 참조함. 같은 이름의 서드파티 모듈이 존재 하더라도 우선적으로 로딩 됨 파일 모듈 로딩 : 절대/상대 경로로 로딩하면 로딩 가능 /home/a/b.js var module = require(‘/home/a/b’); var module = require(‘./b.js’); var module = require(‘./b’);
  • 80. 모듈 로딩 폴더 모듈 로딩 var module = require(‘./moduleDir’); 해당 폴더 내에서 모듈을 찾음 패키지라고 가정하며, package.json 을 찾는다. package.json 의 main 속성을 분석해 상대경로를 찾는다. package.json 파일이 없으면 index.js 를 찾는다
  • 81. 모듈 로딩 폴더 모듈 로딩 var module = require(‘./moduleDir’); 해당 폴더 내에서 모듈을 찾음 패키지라고 가정하며, package.json 을 찾는다. package.json 의 main 속성을 분석해 상대경로를 찾는다. package.json 파일이 없으면 index.js 를 찾는다 node_modules 폴더를 이용한 로딩 var module = require(‘myModule.js’) 위와 같이 작성하면 해당 경로 의 ./node_modules/myModule.js 를 차음 그랟 없으면 상위의 node_modules 를 찾음. 위의 방식으로 root 폴더까지 탐색 후 없으면 오류 반환
  • 82. 내장 객체 processs 프로그램과 관련된 정보를 나타내는 객체 브라우저에는 존재하지 않음 argv : 실행 매개변수 – 어떤 파일에서 실행 된 것인지? env : 컴퓨터 환경 관련 정보 version : Node.JS 버전 0.10.35 arch : 프로그램 아키텍쳐 32bit, 64bit platform : 플랫폼 memoryUsage() : 메모리 사용량 upime() : 프로그램 실행된 시간 exit() : 프로그램 종료
  • 83. 내장 모듈 os 운영 체제와 관련된 유틸리티 함수들 require(‘os’) 로 사용 tmpdir() : 시스템의 기본 임시 폴더를 리턴 hostname() : 운영체제의 호스트 이름 type() : 운영체제의 이름 platform() : 운영체제 arch() : CPU 아키텍쳐 uptime() : 운영체제 실행된 시간 loadavg() : 운영체제 loadaverage totalmem() : 메모리 freemem() : 가용 메모리 cpus() : cpu getNetworkInterfaces() : 네트워크 환경
  • 84. 암호화 모듈 .crypto 모듈은 해시 생성과 암호화를 생성하는 모듈임 id/password 를 저장하는 서버에서 매우 중요 해시화 한 결과 값만 저장하기 때문에 해커가 결과값을 가지 고 있어도 정보를 보호할 수 있음
  • 85. 암호화 모듈 .var crypto = require(‘crypto’); var key = ‘websecretkey’; var input = ‘12345678’; var cipher = crypto.createCipher(‘aes192’,key); cipher.update(input, ‘utf-8’, ‘base64’); var cipherOutput = cipher.final(‘base64’); var decipher = crypto.createDecipher(‘aes192’,key); decipher.update(cipherOutput, ‘base64’, ‘utf-8’); var decipherOutput = decipher.final(‘utf-8’); console.log(‘input : ‘ + input); console.log(‘cipherOutput : ‘ + cipherOutput); console.log(‘decipherOutput : ‘ + decipherOutput);
  • 87. Expressjs .nodejs 를 위한 웹 애플리케이션 프레임워크로, 하나 혹인 여러 웹 페이지를 만들거나 하이브리드 웹 어플리케이션을 위한 기능들을 제공함 var express = require(‘express’); var app = express(); app.get(‘/’, function(req, res){ res.send(‘hello world!’) }); var server = app.listen(3000, function(){ var host = server.address().address; var port = server.address().port; console.log(‘ExpressJS example at http://$s:$s’, host, port); });
  • 88. 기본 라우팅 .HTTP 요청 메소드 GET, POST, PUT, DELETE 에 대해 기본적 인 기능으로 간단하게 구현 가능 // respond with "Hello World!" on the homepage app.get('/', function (req, res) { res.send('Hello World!'); }); // accept POST request on the homepage app.post('/', function (req, res) { res.send('Got a POST request'); }); // accept PUT request at /user app.put('/user', function (req, res) { res.send('Got a PUT request at /user'); }); // accept DELETE request at /user app.delete('/user', function (req, res) { res.send('Got a DELETE request at /user'); });
  • 89. 기본 라우팅 .HTTP 요청 메소드 GET, POST, PUT, DELETE 에 대해 기본적 인 기능으로 간단하게 구현 가능 // a middleware sub-stack which handles GET requests to /user/:id app.get('/user/:id', function (req, res, next) { // if user id is 0, skip to the next route if (req.params.id == 0) next('route'); // else pass the control to the next middleware in this stack else next(); // }, function (req, res, next) { // render a regular page res.render('regular'); }); // handler for /user/:id which renders a special page app.get('/user/:id', function (req, res, next) { res.render('special'); });
  • 90. 고급 라우팅 .4.x 부터 새롭게 추가된 router 기능을 활용할 수 있음 var app = express(); var router = express.Router(); // a middleware with no mount path, gets executed for every request to the router router.use(function (req, res, next) { console.log('Time:', Date.now()); next(); }); // a middleware sub-stack shows request info for any type of HTTP request to /user/:id router.use('/user/:id', function(req, res, next) { console.log('Request URL:', req.originalUrl); next(); }, function (req, res, next) { console.log('Request Type:', req.method); next(); });
  • 91. 고급 라우팅 .4.x 부터 새롭게 추가된 router 기능을 활용할 수 있음 // a middleware sub-stack which handles GET requests to /user/:id router.get('/user/:id', function (req, res, next) { // if user id is 0, skip to the next router if (req.params.id == 0) next('route'); // else pass the control to the next middleware in this stack else next(); // }, function (req, res, next) { // render a regular page res.render('regular'); }); // handler for /user/:id which renders a special page router.get('/user/:id', function (req, res, next) { console.log(req.params.id); res.render('special'); }); // mount the router on the app app.use('/', router);
  • 92. Express JS 자동 프로젝트 자동 생성 툴을 활용하면, 샘플 프로젝트를 자동으로 생성해 줌. 샘플 프로젝트를 이용하여, 개발을 수행할 수 있음 $ npm install express-generator –g 샘플 프로젝트 생성 $ express myapp
  • 93. 고급 라우팅 create : myapp create : myapp/package.json create : myapp/app.js create : myapp/public create : myapp/public/javascripts create : myapp/public/images create : myapp/routes create : myapp/routes/index.js create : myapp/routes/users.js create : myapp/public/stylesheets create : myapp/public/stylesheets/style.css create : myapp/views create : myapp/views/index.jade create : myapp/views/layout.jade create : myapp/views/error.jade create : myapp/bin create : myapp/bin/www install dependencies: $ cd myapp && npm install run the app: $ DEBUG=myapp ./bin/www
  • 96. SocketIO var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.on('ferret', function (name, fn) { fn('woot'); }); }); Server side example
  • 97. SocketIO var io = require(‘socket.io’).listen(80); io.sockets.on(‘connection’, function (socket) { socket.broadcast.emit(‘user connected’); }); Server side example
  • 98. Expand your dimension Circulus (http://www.circul.us) Since 2013 Park Jonggun, Lee Yunjai, Ki Yeonah, Lee Jonghee