01강_Node.js - Node.js 기초 과정 Kyunghoon Jang ( 주)Neuromeka

Slides:



Advertisements
Similar presentations
ⓒ 2015 NHN Entertainment Corp. Django 로 만드는 초간단 블로그 시스템운영팀 김영태 개발환경 구축.
Advertisements

Big Data & Hadoop. 1. Data Type by Sectors Expected Value using Big Data.
2016 유성환 Hybrid MOBILE.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
IoT(사물인터넷) 보안 2016년 2학기 4. 라즈베리파이 카메라.
Snort & Snorby.
2. 앱 개발환경 구축 Step by Step 안드로이드 프로그래밍 쉽게 시작하는 안드로이드 4.4 앱 개발.
Image & Video processing
ERP 전용 브라우저 설치 매뉴얼 (Windows 7)
Cross Compiler를이용한 커널 컴파일 및 포팅
MYSQL 설치.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
3조 오세혁 김문환 김용현.
CUDA Setting : Install & Compile
Ch. 1 LINUX SYSTEM.
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
한국골프대학 종합정보시스템 Windows Vista 사용자를 위한 Component 설치안내서
한국골프대학 종합정보시스템 Windows 7 사용자를 위한 Component 설치안내서
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Root Filesystem Porting
C / C++ Programming in multi platform
Root Filesystem Porting
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
소프트웨어 분석과 설계 Struts2 & JBOSS 설치하기
Cross Compiler 설치.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Grade Server Team14. Attention Seeker
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
Cross Compiler를이용한 커널 컴파일 및 포팅
AVR – ATmega103(ATMEL) Compilers & ISP
[INA470] Java Programming Youn-Hee Han
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
웹 어플리케이션 보안 2016년 2학기 10. Workflow tools.
인터넷응용프로그래밍 JavaScript(Intro).
2장. JSP 프로그래밍을 위한 환경구성 제2장.
솔라리스10 3장. 솔라리스 패키지 관리.
㈜시스원이 제공하는 시스템 관리 통합 솔루션 SysmanagerOne Agent설치 안내서
강의 개요. 2014년 가을학기 손시운 지도 교수: 문양세 교수님.
Device Driver 임베디드 시스템 I.
개발 환경 세팅.
IPython Notebook + Spark + TensorFlow on MacOS
영상처리 실습 인공지능연구실.
MEAN Stack Front to Back (MEANAuthApp)
Go Lang 리뷰 이동은.
ERP 전용 브라우저 설치 매뉴얼 (Windows 7)
툴 설치 가이드 PrimeTime SynopsysMentor.
툴 설치 가이드 Formality SynopsysMentor.
MEAN Stack Front to Back (MEANAuthApp)
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
웹디자인
리눅스 커널 프로그래밍 환경 구축 IT EXPERT 리눅스 커널 프로그래밍 Author : Byungki Kim
( Windows Service Application Debugging )
STS 에서 웹 서버 설치 방법.
OpenCV 설정 2.21 만든이 딩딩.
암호학 응용 Applied cryptography
웹 어플리케이션 보안 2016년 2학기 11. Enhancing Security.
암호학 응용 Applied cryptography
05. General Linear List – Homework
StyleCop 소개 SGS Framework 개발 팀.
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
 파일 아카이브와 압축 명령 익히기.
JSP Programming with a Workbook
9 브라우저 객체 모델.
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Docker Study 6~7.
SafeMSR 설정.
20 XMLHttpRequest.
1. 실습 시간에 수행한 avd 생성 및 실행, adb shell 접속 및 명령어 수행 결과를 제출한다.
Presentation transcript:

01강_Node.js - Node.js 기초 과정 Kyunghoon Jang ( 주)Neuromeka jkjang27@gmail.com

02강_Node.js - Node.js 기초 과정 Kyunghoon Jang ( 주)Neuromeka jkjang27@gmail.com

03강_Node.js - Node.js 기초 과정 Kyunghoon Jang ( 주)Neuromeka jkjang27@gmail.com

04강_Node.js - Node.js 기초 과정 Kyunghoon Jang ( 주)Neuromeka jkjang27@gmail.com

05강_Node.js - Node.js 기초 과정 Kyunghoon Jang ( 주)Neuromeka jkjang27@gmail.com

06강_Node.js - Node.js 기초 과정 Kyunghoon Jang ( 주)Neuromeka jkjang27@gmail.com

1. Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world. http://nodejs.org/en Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다. http://nodejs.org/ko Node.js는 javascript runtime 임. 이벤트기반 , 논블로킹 I/O모델을 사용함. Npm이라는 오픈소스라이브러리가 있음.

https://developers.google.com/v8/ 1. Node.js V8 is Google's open source high-performance JavaScript engine, written in C++ and used in Google Chrome, the open source browser from Google. It implements ECMAScript as specified in ECMA-262, 3rd edition, and runs on Windows XP or later, Mac OS X 10.5+, and Linux systems that use IA-32, ARM or MIPS processors. V8 can run standalone, or can be embedded into any C++ application. https://developers.google.com/v8/ Nodejs 는 chrome v8 javascript engine기반임. 다양한 플랫폼에 대한 지원을 하고 있음. 크롬 v8에 대한 자세한 내용은 https://developers.google.com/v8/ 참조

https://www.npmjs.com/package/you-dont-know-node 1. Node.js Event driven, non-blocking I/O 모델을 특징으로 함.

https://www.npmjs.com/package/you-dont-know-node 1. Node.js Blocking I/O 방식은 자원에 접근하는 사람이 늘어나게 되면 lock이 발생함. 즉 1개의 접근이 들어올 때는 문제가 없지만, 2개, 3개의 접근이 들어오게 되면 순차적으로 처리를 해야 하기 때문에 1번, 2번의 대기가 발생을 하게 됨.

https://www.npmjs.com/package/you-dont-know-node 1. Node.js Non-blocking I/O 방식은 자원에 접근하는 사람이 늘어나게 되어도 접근(요청) 자체가 queue를 통해 관리가 되고 처리 결과를 비동기로 전송하기 때문에 lock이 발생하지 않음.

^data1->Hello Capital One->data2->Hello SECON! 1. Node.js https://www.npmjs.com/package/you-dont-know-node Blocking Node.js Code console.log('Step: 1') for (var i = 1; i<1000000000; i++) {   // This will take 100-1000ms  } console.log('Step: 2') Blocking Node.js Code var fs = require('fs');   var contents = fs.readFileSync('accounts.txt','utf8'); console.log(contents); console.log('Hello Capital One\n'); var contents = fs.readFileSync('ips.txt','utf8'); console.log('Hello SECON!'); ^data1->Hello Capital One->data2->Hello SECON! 일반적으로 nodejs에서는 non-blocking I/O로 처리되는 것이 정석이나, 별도로 blocking I/O로 처리하는 경우도 있음. 이 예제의 readFileSync 함수는 readFile 함수의 Sync 버전임. fs.readfileSync(‘account.txt’,’utf8’){}); 처음 인자는 읽을 파일명, 두번째 인자는 읽을 형식임. 이 함수의 리턴 값이 파일 내용임. Blocking I/O 예제임. 위 코드의 실행 결과는 Step:1 > Step:2 아래 코드의 실행 결과는 Data1 > Hello Capital One > data2 > Hello SECON! 모든 코드가 순차적으로 실행이 됨.

Non-Blocking Node.js Code https://www.npmjs.com/package/you-dont-know-node Non-Blocking Node.js Code var fs = require('fs');   fs.readFile('accounts.txt','utf8', function(err,contents){    console.log(contents); }); console.log('Hello Capital One\n'); fs.readFile('ips.txt','utf8', function(err,contents){ console.log("Hello SECON!"); ^Hello Capital One->Hello SECON->data1->data2 Non-blocking I/O 예제임. fs.readfile(‘account.txt’,’utf8’,function(err.contents){}); 처음 인자는 읽을 파일명, 두번째 인자는 읽을 형식, 세번째 인자는 읽기 완료 후 실행 될 callback function임. readFile명령은 queue에 저장이 되어 순차적으로 실행이 되고, 실행 후 함수 실행 시 등록해 둔 callback 함수가 실행이 됨. 실행 결과는 Hello Capital One->Hello SECON->data1->data2

What can you make with 350,000 building blocks? 1. Node.js https://www.npmjs.com/ Build amazing things npm is the package manager for JavaScript. Find, share, and reuse packages of code from hundreds of thousands of developers — and assemble them in powerful new ways. What can you make with 350,000 building blocks? The npm registry hosts over a quarter million packages of reusable code — the largest code registry in the world.    Find Popular libraries like JQuery, Bootstrap, React, and Angular, and components from frameworks including Polymer.      Discover Packages for mobile, IoT, front end, back end, robotics… everything you need to start building amazing things. Build Assemble packages like building blocks to quickly develop awesome new projects. Npm은 현재 35만개 이상의 패키지가 모여있는 오픈소스 라이브러리임. node.js가 인기있는 이유중 하나가 엄청나게 많은 패키지들이 오픈되어 있다는 점임. 무엇을 만들지 생각하고, 필요한 것이 무엇일지 검토한 후에 검색된 모듈들을 활용하여 개발을 하면 됨. 너무나 많은 모듈이 있는 것이 문제점임. 검색된 패키지는 릴리즈 횟수. 다운로드 통계 등을 고려하여 선택하는 것이 좋음.

https://nodejs.org/en/download 1. Node.js https://nodejs.org/en/download Linux : NVM(Node Version Manager) https://github.com/creationix/nvm Install script $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash $ nvm ls-remote $ nvm ls $ nvm install 6.9.1 $ nvm install 4.6.1 $ nvm use 6.9.1 $ nvm uninstall 6.9.1 $ nvm install 0.12.15 $ nvm alias default 4.6.1 Nodejs는 다양한 버전이 존재하며 패키지들의 경우 특정 버전에서만 동작하는 경우도 있음. 또한 현재 사용중인 OS 버전에 따라 설치가 곤란한 버전도 있음. 실제 사용 시 다양한 버전의 nodejs 가 필요한 경우가 있음. Nvm 을 사용하게 되면 간단히 여러 버전을 설치하고 골라서 사용할 수 있음. 라즈베리파이, 비글본 등에서는 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash 명령을 통해 nvm을 설치할 수 있음. 설치 직후에는 환경설정이 되지 않아 동작하지 않을 수 있음. 사용하고 있는 shell 에 따라 환경설정이 자동으로 되니. Logout 후 log in 하면 정상 동작하게 됨. $ nvm ls-remote : 설치할 수 있는 버전 목록 보기 $ nvm ls : 설치된 버전 목록 보기 $ nvm install 6.9.1 : 버전 6.9.1 설치하기. -> 현재 시스템에 맞도록 미리 컴파일 된 배포본이 있는 경우 금방 설치가 되나, 배포본이 없는 경우 소스를 다운로드 하여 직접 컴파일을 하게 됨. 장비에 따라 1시간 이상 시간이 소요되기도 함. $ nvm use 6.9.1 : 설치되어 있는 nodejs 중 6.9.1을 사용하도록 세팅 함. Log out시 이 설정은 무시됨. $ nvm uninstall 6.9.1 : 설치되어 있느 nodejs 6.9.1 버전을 삭제함. $ nvm alias default 4.6.1 : 설치되어 있는 nodejs 4.6.1을 시스템 디폴트로 사용하도록 함. 시스템 리부팅 후에도 이 값은 유효함.

$ wget http://nodejs.org/dist/v0.12.15/node-v0.12.15.tar.gz 1. Node.js $ mkdir ~/nodejs $ cd ~/nodejs $ wget http://nodejs.org/dist/v0.12.15/node-v0.12.15.tar.gz $ tar zxvf node-v0.12.15.tar.gz $ cd node-v0.12.15 $ ./configure --without-snapshot --prefix=/usr $ make $ make install 비글본 또는 라즈베리파이에서 Nvm을 사용하지 않고 수동으로 특정 버전의 nodejs를 설치하는 예제임. Wget으로 소스를 받고, 압축을 해제한 후 컴파일/인스톨 하는 코드임.

console.log('Hello World'); 1. Node.js //app.js console.log('Hello World'); $ node app.js $ node -v Vi 또는 nano 등을 이용하여 아래 1줄 코드를 내용으로 하는 app.js 파일을 생성함. Node app.js 하게 되면 Hello World 가 출력됨. Nodejs가 동작하는 것을 확인 할 수 있음. 참고로 현재 node 버전을 확인 하려면 $ node -v

var http = require('http'); 1. Node.js //app.js var http = require('http'); var server = http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type' : 'text/plain' }); res.end('Hello World'); }); server.listen(8000); $ node app.js http://192.168.7.2:8000 5줄 짜리 웹서버 Hello World를 출력하는 웹 서버임. 포트는 8000으로 설정함. 위 파일을 실행 시킨 후 브라우저에서 웹서버IP:8000 으로 접속하면 Hello World가 나오는 것을 확인 할 수 있음.

var http = require('http'); var url = require("url"); 1. Node.js //app.js var http = require('http'); var url = require("url"); var server = http.createServer(function (req, res) { var pathname = url.parse(req.url).pathname; res.writeHead(200, { 'Content-Type' : 'text/plain' }); switch (pathname) { case "/": res.end("Hello World"); break; default: res.end("Hello " + pathname.substring(1)); break; } }); server.listen(8000); $ node app.js http://192.168.7.2:8000 http://192.168.7.2:8000/Kim 앞의 예제는 모든 url 에 대해서 Hello World를 출력해 주는 서버였음. 이번 예제를 실행 후 http://192.168.7.2:8000 을 호출하는 경우에는 Hello World가 출력이 되고 http://192.168.7.2:8000/Kim 을 호출하게 되면 hello Kim 이 출력됨. 사용자가 요청한 URL 정보를 활용하기 위해서는 “url” 패키지(모듈)을 활용 하여야 함. http, url은 nodejs에서 기본 제공되는 모듈이므로 nodejs document에 API 설명이 포함되어 있음.

var express = require('express') , http = require('http') 1. Node.js //app.js var express = require('express') , http = require('http') , app = express() , server = http.createServer(app); app.get('/', function (req, res) { res.send('Hello World'); }); app.get('/users', function (req, res) { res.send('Hello Users'); server.listen(8000, function() { console.log('Express server listening on port ' + server.address().port); $ node app.js http://192.168.7.2:8000 http://192.168.7.2:8000/Kim http://192.168.7.2:8000/users Express 라는 웹 플랫폼 모듈을 사용한 예임. http://192.168.7.2:8000 을 호출하는 경우에는 Hello World가 출력이 되고 http://192.168.7.2:8000/users 을 호출하게 되면 Hello Users 가 출력됨. http://192.168.7.2:8000/Kim 을 호출한 경우에는 404 에러 페이지를 보여주게 됨. Express 모듈(패키지)을 사용하게 되면 기본적인 웹서버가 가져야 할 틀을 모두 잡아 주기 때문에 쉽게 웹 서비스 개발이 가능함.

Fast, unopinionated, minimalist web framework for Node.js http://expressjs.com/ Fast, unopinionated, minimalist web framework for Node.js $ npm install –g express $ npm install –g express-generator Express는 nodejs에서 많이 사용되는 웹 프레임워크임 Express-generator를 이용하면 간단히 express형태의 웹 프로젝트를 시작할 수 있음.

$ express –ejs http://www.embeddedjs.com/ $ npm install $ npm start 1. Node.js $ express –ejs $ npm install $ npm start http://www.embeddedjs.com/ Express –ejs 실행시 기본 디렉토리 형태가 생성 됨. Npm install로 기본적으로 필요한 모듈(패키지)들을 설치하게 됨. Npm start로 기본 앱 시작. Package.json 파일 내에 start 에 관련된 스크립트가 정의되어 있음.

1. Node.js 기본 디렉토리 구성은 정적 html 모듈들이 위치할 public 폴더 Routes 를 처리할 routes 폴더 화면 구성을 처리할 views 폴더 로 구성됨. 정적 모듈은 이미지, 자바스크립트(브라우저단에서 실행 될 스크립트임), CSS 파일 등으로 구성됨