공개 SW 솔루션설치 & 활용가이드 시스템 SW > SW 공학도구 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 Chrome V8 JavaScript 엔진으로빌드된 JavaScript 런타임 이벤트기반, 논블로킹 I/O 모델을사용하여가볍고효율적 Node.js 패키지생태계인 npm 은세계에서가장큰오픈소스라이브러리환경 주요기능 JavaScript 서버, 모바일, 단말로직개발가능 대분류 시스템 SW 소분류 SW 공학도구 라이선스형태 MIT License 사전설치솔루션 N/A 운영체제 Linux, macos, Microsoft Windows, SmartOS, FreeBSD, IBM AIX 버전 10.12.0(2018-04 최신 ) 8.12.0( 권장버전 ) 특징보안취약점개발회사 / 커뮤니티공식홈페이지 한가지언어 (JavaScript) 로 server-side, client-side 모두개발가능 Single Thread기반의비동기 IO 처리방식으로작업속도빠름 취약점 ID : CVE-2017-15896 심각도 : 9.1 CRITICAL(V3) 취약점설명 : Node.js 는 TLS 핸드셰이크실패때문에 SSL_read() 를사용하고있어 OpenSSL 취약점 CVE-2017-3737 에영향을받음, 그결과활성화된네트워크공격자가 TLS 인증과암호화를우회하는방식으로 TLS 나 HTTP2 모듈을사용해애플리케이션의데이터를 Node.js 로보낼수있음 대응방안 : OpenSSL-1.0.2n 버전을 Node.js 에적용 참고경로 : https://nodejs.org/en/blog/vulnerability/december-2017-security-releases Node.js Foundation https://nodejs.org
- 4-1. 개요 Node.js는 2009년에 Ryan Dahl이만든 server-side 개발도구 파일업로드가진행되는동안다른작업을수행할수없는서버의문제를해결하기위해고안 이벤트기반의비동기방식모델을사용함으로써데이터를주고받는데효율적이며그러한이유로데이터송수신이빈번한실시간어플리케이션제작적합
- 5-2. 기능요약 WEB 기술스택중가장유명한 JavaScript를사용함으로써언어장벽낮음 서버와클라이언트사이드모두에 runtime 환경제공 비동기와이벤트기반처리방식 빠른실행속도 단일스레드 / 높은확장성 Node.js의패키지생태환경 (npm) 을통한간편한패키지접근 활용가능분야 - 디스크또는네트워크입출력이잦은응용프로그램 - 데이터스트리밍응용프로그램 - 데이터집약적인실시간응용프로그램 (DIRT) - JSON APIs 기반의응용프로그램 <node.js 위한다양한 web framework 및관련항목 >
- 6-3. 실행환경 지원형태 (Support type) - Tier 1: Node.js 코어팀과광범위한커뮤니티에의해전범위테스트와유지보수지원 - Tier 2: 전범위테스트를지원하지만유지보수가제한되며빈번하게플랫폼의공급업체가지원하는경우있음 - Experimental: 안정적으로컴파일할수없거나 test suite 을통과하지못할수있음적어도한명이적극적으로유지보수를지원하며팀은신뢰할수있는품질좋은지원을광범위하게제공노력 출처 : https://github.com/nodejs/node/blob/master/building.md#fn2
- 7-4. 설치및실행 세부목차 4.1 Window 4.2 Linux(Ubuntu)
- 8-4. 설치및실행 4.1 Windows 설치 (1/3) Node.js 의홈페이지 (https://nodejs.org/en/download/) 에접속하여사용자의컴퓨터환경 (32bit or 64bit) 에적합한버전선택
- 9-4. 설치및실행 4.1 Windows 설치 (2/3) 경로를확인후 Next 및 Install 버튼을클릭하여설치완료
- 10-4. 설치및실행 4.1 Windows 설치 (3/3) cmd.exe 실행 버전정보를확인하는명령어 node v 를이용하여 node.js가정상설치확인 node 명령어를이용하여 node.js 실행 node.js의 console.log함수를이용하여 hello world 출력.exit를입력하여 node.js 에서빠져나옴
- 11-4. 설치및실행 4.2 Linux(Ubuntu) (1/2) 터미널실행 'sudo apt-get install node.js' 를입력하여 node.js 설치
- 12-4. 설치및실행 4.2 Linux(Ubuntu) (2/2) node 명령어를이용하여 node.js 실행 node.js의 console.log함수를이용하여 hello world 출력 정상적으로 log가출력확인.exit를입력하여 node.js 에서빠져나옴 window's installer 와는달리 linux 는 node.js 를설치하는동안 npm 이함께설치되지않음 'sudo apt-get install npm' 을이용하여 npm 설치 npm -v 나 npm 명령어를이용하여 npm 이정상설치확인
- 13-5. 기능소개 세부목차 5.1 Node.js 구성요소소개 5.1.1 NPM 사용및모듈가져오기 (require) 5.1.2 기본모듈소개
- 14-5. 기능소개 5.1.1 모듈가져오기 (require) 프로그램에필요한모듈임포트 - 수천개의다양한모듈을간단한명령어를통해 npm에서검색, 설치, 삭제가능 - require 를사용하여다음과같이응용프로그램개발에필요한모듈을외부에서가져올수있음 - 기본모듈이아닐경우위와같이 npm 을통해 install 후 require 가능
- 15-5. 기능소개 5.1.2 기본모듈소개 node.js 에서제공하는모든기본모듈은 API 문서를통해확인 (http://nodejs.org/api/)
- 16-5. 기능소개 5.1.2 기본모듈소개 (File System) fs 모듈은파일시스템을다루는데사용하는 API 제공 사용방법 : var fs = require('fs'); 파일읽기 파일쓰기
- 17-5. 기능소개 5.1.2 기본모듈소개 (OS) os 모듈은여러가지운영체제관련유틸리티메소드제공 사용방법 : var os = require('os');
- 18-5. 기능소개 5.1.2 기본모듈소개 (Console) 콘솔모듈은웹브라우저에서제공하는 JavaScript 콘솔메커니즘과유사한, 간단한디버깅콘솔을함 Console.log (), console.error () 및 console.warn () 과같은메소드를사용하여모든 Node.js 스트림에 쓸수있는 Console 클래스 process.stdout 및 process.stderr 에기록하도록구성된 global console 인스턴스이며 global console 은 require ( 'console') 를호출하지않고사용 global console 예제 Console class 예제
- 19-5. 기능소개 5.1.2 기본모듈소개 (http) http 모듈을이용해웹서버구현이가능하며, 그러나일반적인 HTTP applications 을다루기에는 낮은수준의모듈이어서보통은 express 나 sails 와같은 web framework 이용 사용방법 : var http = require('http');
- 20-5. 기능소개 5.1.2 기본모듈소개 (URL) 서버에들어온 client 요청 url 을파싱하여서버내에존재하는리소스접근원활 사용방법 : var http = require('url');
- 21-6. 활용예제 세부목차 6.1 Node.js 응용프로그램생성 6.1.1 에디터소개 6.1.2 express를활용한사이트띄우기 6.1.3 사이트띄워보기
- 22-6. 활용예제 6.1.1 에디터소개 (1/3) Visual Studio Code - Microsoft사에서만든오픈소스기반편집도구 - Node.js를기본적으로지원하며, 무료사용 - 사이트메인 or 'https://code.visualstudio.com/download' 에서설치파일을받을수있음
- 23-6. 활용예제 6.1.1 에디터소개 (2/3) Visual Studio Code
- 24-6. 활용예제 6.1.1 에디터소개 (3/3) Visual Studio Code - 프로그램내부에서 TERMINAL 을통해 cmd 동작을수행할수있으므로코드작성화면에서코딩후에 TERMINAL 에서바로수행
- 25-6. 활용예제 6.1.2 express 를활용한사이트띄우기 express를활용하여사이트를만들기위해우선다음명령어를이용하여 express 설치 - npm install -g express-generator stylus를사용하는 express 사이트기틀을 'express_ex' 디렉터리하위생성 - express -c stylus express_ex express_ex 하위에, 다음과같이 app.js, bin, package.json 등기본적인사이트형성에필요한 디렉터리와파일이생성확인
- 26-6. 활용예제 6.1.3 사이트띄워보기 (1/7) 응용프로그램부팅을위해 express_ex 디렉터리내에서다음명령실행 - npm install 다음명령어를이용하여응용프로그램부팅 - window : set DEBUG=express_ex:* & npm start - XOS or LINUX : DEBUG=express_ex:* npm start localhost:3000 에접근했을때, 다음과같은화면이보이면, 정상적으로설치및실행확인
- 27-6. 활용예제 6.1.3 사이트띄워보기 (2/7) 일반적으로 Node.js 사이트를개발시변경사항을적용할때마다응용프로그램을다시시작해야하지만, nodemon을이용하면변경사항이감지될때마다응용프로그램을알아서다시로드하므로응용프로그램을재시작할필요가없고, 다음을이용하여 nodemon 설치 - npm install -g nodemon 다음명령어를이용하여서버를시작하고, localhost:3000 에접속하면결과변함없음 - set DEBUG=express_ex:* & nodemon start
- 28-6. 활용예제 6.1.3 사이트띄워보기 (3/7) localhost:3000 의기본화면을변경하기위해 /views/layout.jade 에있는기본소스대신 다음소스입력
- 29-6. 활용예제 6.1.3 사이트띄워보기 (4/7) 링크이동을위해 /views/layout.jade 와동일위치에 layout.jade 를복사한후이름을각각 about.jade, contact.jade 로변경하고소스를다음과같이수정
- 30-6. 활용예제 6.1.3 사이트띄워보기 (5/7) css 적용을위해 /stylesheets/style.styl 에있는기본소스대신다음소스입력 링크이동을위해 /routes/index.js 에있는 기본소스대신다음소스입력
- 31-6. 활용예제 6.1.3 사이트띄워보기 (6/7) nodemon 에의해변경한소스는자동반영되므로접속되어있던 localhost:3000 페이지에서 F5 를눌러페이지리프레시후메인화면이아래와같이변경확인
- 32-6. 활용예제 6.1.3 사이트띄워보기 (7/7) localhost:3000/about 으로접근하거나 About 링크를클릭하면다음페이지이동 localhost:3000/contact 으로접근하거나 Contact 링크를클릭하면다음페이지이동
- 33-7. FAQ Q Node.js 를웹서버라고말할수있나요? A Node.js는 Java의 JRE와같은런타임환경입니다. Node.js는웹이외의응용프로그램에서점점더많이사용되고있습니다. Node.js에는웹서버를쉽게만들수있는매우높은수준의네이티브함수 (http.createserver (...) ) 가있으나, 이를추가하지않는한은웹서버기능이없습니다. 따라서 Node.js 자체는웹서버가아닙니다. Q Node.js 를사용하여어떤종류의응용프로그램을만들수있나요? A 사실, Node.js로무엇이든만들수있지만그것이항상현명한선택은아닙니다. Node.js가능가하는곳은여러 I / O 작업과실시간시스템을다루는곳입니다. 이벤트기반의특성으로인해다른언어나프레임워크보다훨씬효율적이고빠르게처리할수있습니다.
- 34-7. FAQ Q 어떤경우에 Node.js 를사용하면안되나요? A Node.js 는 CPU 가많은소프트웨어와잘맞지않습니다. 장기실행계산은 들어오는요청을차단하므로성능이저하될수있습니다. Q Node.js 를기계학습에사용할수있나요? A Node.js는무엇이든사용할수있지만기계학습을위한최상의도구는아닙니다. 단일스레드특성으로인해노드응용프로그램은특히기계학습과같은과중한작업계산에특히좋지않습니다. 경우에따라 Node.js는기본회귀, 분류또는피쳐추출과같은부분에서나쁘지않은성과를보일수는있습니다. 그러나기계학습관련응용프로그램을개발하려면 Tensorflow 또는 Theano와함께 Python을고려해보는것이좋습니다.
- 35-8. 용어정리 용어 Chrome V8 JavaScript 콜백 test suite 스트리밍데이터 설명 V8 엔진 (Chrome V8) 은웹브라우저를만드는데기반을제공하는오픈소스응용프로그램프레임워크, 구글크롬브라우저와안드로이드브라우저에탑재, V8 로줄여불리기도하며, 현재라스백이책임프로그래머 ECMAScript(ECMA - 262) 3rd Edition 규격의 C++ 로작성되었으며, 독립적으로실행이가능, 또한 C++ 로작성된응용프로그램의일부로작동 프로그래밍에서콜백 (callback) 은다른코드의인수로서넘겨주는실행가능한코드, 콜백을넘겨받는코드는이콜백을필요에따라즉시실행할수도있고, 아니면나중에실행 소프트웨어개발에서일반적으로 ' 검증스위트 ' 로불리는테스트스위트는소프트웨어프로그램이특정동작집합을갖고있음을보여주기위해테스트하는데사용되는테스트사례모음, 테스트슈트는종종테스트케이스의각컬렉션에대한상세한지침이나목표및테스트중에사용될시스템구성에대한정보를포함, 테스트케이스그룹은전제조건또는단계및다음테스트에대한설명을포함 스트리밍데이터는수천개의데이터소스에서연속적으로생성되는데이터로서, 보통데이터레코드를작은크기 (KB 단위 ) 로동시에전송, 스트리밍데이터에는모바일이나웹애플리케이션을사용하는고객이생성하는로그파일, 전자상거래구매, 게임내플레이어활동, 소셜네트워크의정보, 주식거래소, 지리공간서비스, 연결된디바이스의텔레메트리, 데이터센터의계측등다양한데이터가포함
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.