1. 모바일서버 

서버

* 서버 구분

: 웹기반 서비스 서버

: 모바일 앱을 위한 서버 : 모바일 서버

* 웹과 모바일 서버는 뭐가 다른가?

: 웹기반 서비스

: 웹브라우저

: 모바일 웹 브라우저

: 모바일 서버

: 네이티브 앱

: 클라이언트의 차이이다.

웹기반서비스

: HTML - 이미지, js, css, 웹페이지

모바일 클라이언트

: XML, 스토리 보드를 통해 자체 UI를 구성

: 데이터 표현 문서 포멧

: JSON, XML

: 화면이동은 모바일 앱에서 담당

: PRG 패턴 불필요

서비스 

: 웹 + 모바일 지원 서비스 만들기

: API 서비스

: HTML 서비스

2. JSON

JSON(Javascript Object Notification)

: 초기 자바 스크립트에서 사용하던 포멧

: 프로퍼티 - 이름 : 값 쌍으로 구성

: 이후 다양한 분야에서 사용

: 문서크기가 작아서 네트워크를 이용해서 주고 받기 편리

: 기계 해석 가능

JSON의 데이터 타입

숫자 : 숫자만

문자열 : 따움표

부울 : true/false

null : null

배열 : 대괄호 []

객체 : 중괄호 {}

3. JSON 요청과 응답

JSON 다루기

: JSON 객체

: V8 내장 클래스, 모듈 로딩 불필요

: JSON 생성

: JSON.stringfy()

: JSON 파싱

:JSON.parse()

JSON을 이용한 요청과 응답

JSON 요청

: 요청 메시지의 바디에 기록된 JSON

: 요청 객체에서 바디 메세지 분석

: JSON.parse()

JSON 응답

: 응답메시지 바디에 JSON 기록하기

: 응답 데이터에서 JSON 생성

: JSON.stringfy()

: Content-Type : application/json

4. XML

XML 이란?

: XML - eXtensible Markup Language

: Markup 언어 : 메타데이터로 문서 구조 표현

: 기계해석 가능

: HTML, XML

: 사용분야

: 오피스 어플리케이션

: 안드로이드, iOS 레이아웃 정의 파일    

HTML vs XML

HTML

: 웹브라우저를 위한 언어

: 사람을 위한 렌더링 정보 - h1 태그

XML

: 기계해석을 위한 언어

: 코드로 분석 가능  - title 태그

XML 구성요소

: 태그
: 앨리먼트
: 어트리뷰터
: 마크업, 문서

XML 구성

: XML 선언

: <?xml version="1.0" encoding = "UTF-8"?>

: 엘리먼트 : 논리단위

: Tag로 구성됨

:  시작, 끝 태그

: 태그 내 "이름=값" 으로 세부사항 표현

5. XML 요청과 응답

XMl 요청 분석

: XML 에서 데이터 분석

: XML 파싱

XML 응답

: 데이터에서 XMl 만들기

XML 분석

: XML 파서 모듈

: libxmljs

: xml-stream

: xmldoc

: XML 파서 방식

: DOM 파서

: SAX 파서

: PULL 파서

DOM 파싱

: DOM - Document Object Model

: 각 문서의 요소(XML-태그)를 객체화 

: 부모노드, 자식노드, 형제노드

: Node

: getChildNode 등등..

XML 응답

: XML 생성 모듈 = jstoxml



'프로그래밍 > Nodejs' 카테고리의 다른 글

Express  (0) 2017.04.24
RESTful  (0) 2017.04.24
HTTP POST요청  (0) 2017.04.16
HTTP 서버  (0) 2017.04.16
http 통신  (0) 2017.04.16

1. POST 요청

POST 요청

: GET요청

: URL로 요청정보를 전달, URL만 분석

: 길이제한, 암호화 불리

: POST 요청

: 메시지 바디로 요청 정보 전달

: 바디 분석 필요

: 웹브라우저에서 주소 입력 : GET 요청

: 웹브라우저의 폼 입력 : GET/POST 요청

: 폼 구성요소

: method : post, get

: action : 요청 경로

HTML 폼 

: 폼구성요소 : input

: type, name

폼 인코딩 

: 폼요청 - 요청바디에 요청 정보 작성

: 요청 바디에 메시지 인코딩방식 : enctype

: application/x-www-form-unlencoded

: 이름=값 방식으로 작성, 쿼리문자열

: key1=value1&key2=value2...

: multipart/form-data

: 파일, 글자등 여러 데이터 전송

: text/plain

: json/xml

2. POST 요청 처리

: 요청 메시지 - request.IncomingMessage

: Readable Stream

: 이벤트 - data, end

: data 이벤트에서 데이터를 차곡차곡 받고

: end 이벤트 함수 호출 시 querystring 모듈로 parse하여 query를 얻는다.

: Post요청 후 Refresh 하면, 중복 Post 요청이됨.

PRG 패턴

: 중복 Post요청 방지

: Post요청 처리 후 redirect 응답 - 주소를 다른곳으로 옮기기

: PRG(Post-Redirect-Get) 패턴

: 리프레쉬 - Get 요청 중복은 괜찮음

: 응답 메세지 작성 코드

: Redirection : 클라이언트 주소 옮기기

3. HTTP 클라이언트

: POST 맨

: BODY, x-www-form-urlencoded

POST 요청 2 

1. 멀티파트 요청

POST 요청 메시지

: SNS서비스 중 접하는 Post 요청

: 사진올리기

: 글과 사진 올리기

: 메시지 바디 기록 방식

: multipart/form-data

멀티파트 메시지 구성

파트 구분 정보

:  content-type 헤더 항목의 boundary로 정의

: Content-Type:multipart/form-data; boundary = XXXYYYZZZ

: 메시지 바디 내 파트 구성

: 파트 구분자(--XXXYYYZZZ) // 마무리 때에는 --XXXYYYZZZ--

: 파트 인코딩

: 파트 내 정보

HTML 폼

: 폼 enctype : multipart/form-data

: input 타입 : file

2. 멀티 파트 요청 분석

: 멀티 파트 요청 분석

: 메시지 요청 헤더

: Content-Type:multipart/form-data; boundary = XXXYYYZZZ

: 위 정보 확인

: 메시지 바디 분석

: 각 파트 구분

: 파트별 구분

: 분석하는게 복잡하고 여려워서 모듈을 사용한다.

멀티파트 분석 모듈

: formidable

: 요청 분석 클래스, 파일 받는 클래스

: 이벤트 - field, file, aborted, end // 프로퍼티 - upleadDir, keepExtension, multiples

: multer

업로드된 파일

: 업로드 설정 폴더로 저장

: 파일 이름 변경

3. 파일 업로드 서비스

: 파일 업로드 - 임시폴더

: 파일 업로드 후

: 파일을 임시 폴더 -> 리소스 저장소로 이동

: 이름이 충돌되지 않도록 이름 변경

: 날짜, 일련번호, 사용자 계정...







'프로그래밍 > Nodejs' 카테고리의 다른 글

RESTful  (0) 2017.04.24
모바일서버  (0) 2017.04.24
HTTP 서버  (0) 2017.04.16
http 통신  (0) 2017.04.16
흐름제어 - 콜백, Async모듈, Promise  (0) 2017.04.15

1. HTTP 서버

서버 구동 코드

> var http = require('http');

> var server = http.createServer(function(req,res){

>    res.end('Hello World');

> }).listen(3000);

2. HTTP 요청

: 클라이언트 요청 분석

: request 이벤트 리스너의 파라미터

: req - IncomingMessage

- message.url : 요청 url, 경로와 쿼리 문자열

- message.method : 요청 메소드

- message.headers : 요청 메시지의 헤더

- message(streamable) : 요청 메시지 바디

: URL분석하기 : URL 모듈이용

: url.parse(URL);

3. HTTP 응답

응답메시지

: 응답메시지 : http.ServerResponse

: 상태코드와 상태 메시지

: 응답 메시지 헤더

: 응답코드, 메시지 헤더 작성 함수 : writeHead

: 개별 헤더 작성하기 : setHeader

: 응답 메시지 바디

: write, end 함수

: 헤더를 작성한뒤 작성해야한다.

4. HTTP서버 작성

정적파일요청

: 정적인 컨텐츠(이미지, html, 음악 등) 요청

: url 분석해야 한다. // path 모듈을 사용

: fs 모듈 사용

: 정적파일 찾기

: 파일로딩, 응답

: 스트림파이프

: 입력스트림, 출력스트림 간의 파이프 연결

: 모두 읽지 않아도 되기 때문에, 메모리 효율성과 대기시간을 줄일수 있다.

: 파비콘 - 웹사이트의 아이콘이미지

: 요청 URL의 경로를 실제 파일 경로로 매핑

웹 페이지 서비스

: 요청

: 인덱스, 파비콘, js, css, 파일 등등...





'프로그래밍 > Nodejs' 카테고리의 다른 글

모바일서버  (0) 2017.04.24
HTTP POST요청  (0) 2017.04.16
http 통신  (0) 2017.04.16
흐름제어 - 콜백, Async모듈, Promise  (0) 2017.04.15
NPM을 이용한 모듈관리  (0) 2017.04.15

1. HTTP 통신

HTTP

: 웹(WWW)의 주역

: Hyper Text Transfer Protocol

: 하이퍼텍스트 - 하이퍼 링크로 논리적으로 연결되어 있는 문서

HTTP 통신의 특징

: HTTP

: 요청, 응답

: 웹브라우저 - 주소입력 - 요청 - 웹서버 - 응답 - 웹브라우저

URL

: Uniform Resource Location

: 알파벳, 숫자, 하이픈, 언더스코어, 점, 틸드

2. HTTP 요청

HTTP 메시지 구조

: 요청메시지

: 요청 라인, 요청 헤더, 요청 바디

HTTP 메소드

: 리소스를 다루는 행위

: GET, POST, PUT, DELETE

요청헤더

: 헤더는 키:값 방식으로 작성

- Accept : 클라이언트가 받을 수 있는 컨텐츠

- Cookie : 쿠키

- Content-Type : 메시지 바디의 종류

- Content-Length : 메시지 바디의 길이

- If-Modified-Since : 특정날짜이후에 변경됬을때만

요청 정보 전달

: URL을 이용해서 요청 정보 전달

: GET메소드, TRACE 메소드

: 경로와 쿼리 스트링 사용

: 메시지 바디를 사용하지 않는다.

: URLEncoded 방식

: 메시지 헤더

- Content-Type : application/x-www-form-urlencoded

: 메시지 바디 : 쿼리 문자열

: 이름:값 으로 보냄

: JSON/XML

: application/json

: json 형태로 보냄

: 멀티 파트를 이용한 요청 정보 전달

: 바이너리 파일을 올리는 경우에 주로 사용

: 하나의 메시지 바디에 파트를 나눠서 작성

: 메시지 바디를 사용 여부

: URL로 요청 정보전달 : 바디 분석 불필요

: 바디의 인코딩 방식

3. HTTP 응답

HTTP 메시지 구조

:응답라인, 응답헤더, 응답바디

응답 메시지

: 버전, 상태코드, 상태메시지

상태코드

: 서버의 응답 코드

: 1xx - 정보, 2xx - 성공, 3xx - 리다이렉션, 4xx,5xx - 오류

응답 메시지 헤더

: 주요 헤더 필드

: Content-Type : 바디데이터의 타입

: Content-Length : 바디데이터 크기

: Set-Cookie : 쿠키 설정

: ETag : 엔티티 태그

응답메시지 바디

: 바디데이터 

: HTML, XML/JSON, Octet Stream 등

: 바디 기록방식 : Content-Type 헤더 필드

응답메시지 

: 컨텐츠 타입

: 메시지 헤더에 기록

: 필드이름 content-type

: 대분류/소분류

: text/plain, text/html, application/xml ...

: 컨텐츠 타입이 맞지 않으면 제대로 출력되지 않는다.

4. HTTP 모듈

HTTP모듈

: require('http')

HTTP 모듈 클래스

: 서버용 클래스

: HTTP 클라이언트

5. HTTP 서버

HTTP 서버

: 주요 이벤트

: request - 클라이언트 메시지 도착

: connection, close

: 서버 동작 시키기

: 서버 객체 생성

: listening

: 포트

: 0~1023 - 미리 정의된 포트 : 관리자 권한 필요

: 1024 ~ 49151 : 등록된 포트

: 49152 ~ 65535 : 동적 포트

: 포트바인딩 실패

: 이미 사용중, 권한 없음

6. HTTP 클라이언트

HTTP 클라이언트

: 클라이언트 요청

: 바디 없이 요청 보내기












'프로그래밍 > Nodejs' 카테고리의 다른 글

HTTP POST요청  (0) 2017.04.16
HTTP 서버  (0) 2017.04.16
흐름제어 - 콜백, Async모듈, Promise  (0) 2017.04.15
NPM을 이용한 모듈관리  (0) 2017.04.15
Node.js 모듈  (0) 2017.04.14

1. 콜백과 콜백 헬

콜백함수 다시보기

: 비동기 함수 - 콜백함수 사용

 비동기 동작과 콜백

: 비동기 동작의 연속

: 콜백의 연속 호출

: 이미지 업로드 후 데이터 베이스에 저장

: 다수의 이미지에서 썸네일 생성 후 업로드

: 콜백안에 콜백.... 콜백지옥에 도착하게 된다.

2. Async

비동기동작의 흐름제어

: Async모듈

: 행위 순서 제어

: series, seriesEach // parallels // waterfall

: 콜랙션 (배열, 객체)

: each, forEachOf, map, filter

Async의 순차 실행

> async.series{[태스크1,태스크2...],function(){완료콜백}}

: 콜백호출 - 다음 태스크로 진행

: 태스크 완료 -다음 태스크 실행

: 완료 콜백으로 동작 결과 전달

: 콜백을 공유한다.

: 테스크 에러 발생 - 에러 전달

: 다음 태스크 실행안함

: 마무리 콜백으로 에러 전달

: 연속 동작 마무리

: 마무리시 결과가 배열로 전달됨.

waterfall

: 다음 태스크로 전달하라 값을 콜백의 파라미터로

: 태스크 함수의 파라미터로 전달 이전 태스크의 값 전달

parallel 

: 동시 동작하게 됨.

콜렉션과 비동기 동작

: 콜랙션 내 각 항목을 사용하는 비동기 동작

: 다수의 파일을 비동기 API로 읽기

: 다수의 파일을 비동기 API로 존재하는 지 확인하기

: 비동기 순회 동작

: each, map, filter, reject 등등...

: each

: each(arr, iterator, callback){}

3. Promise

: 비동기 동작의 흐름제어

: ES6에 추가됨.

Promise 상태

: pending - 전, fulfilled - 성공, rejected - 실패

Promise 를 사용하는 태스크

: function task(){
    return new Promise(fucntion(){})
}

: 이 같은 형태로 Promise를 반환하는 함수를 만들어 사용함으로써 더 세련되게 사용한다.








'프로그래밍 > Nodejs' 카테고리의 다른 글

HTTP 서버  (0) 2017.04.16
http 통신  (0) 2017.04.16
NPM을 이용한 모듈관리  (0) 2017.04.15
Node.js 모듈  (0) 2017.04.14
Node.js 개요  (0) 2017.04.14

npm

: npm 홈페이지

: 모듈검색, 모듈 상세정보, 모듈 설치 방법, API설명, 예제

: 패키지 매니저

모듈

: 패키지 매니저 : npm

: 모듈 설치, 삭제

npm 주요 옵션

- init : 패키지 준비 

- install : 패키지에 필요한 모듈 설치

- install 패키지명 : 개별 패키지 설치

- list : 설치된 모듈 목록 보기

- info : 모듈 정보

- search : 모듈 검색

- update : 모듈 업데이트

- uninstall - 모듈 삭제

모듈 설치

-전역설치

: 한번설치로 모든 프로젝트에서 사용

: 라이브러리 폴더

: 관리자 권한 필요 -g 옵션

- 지역설치

: 프로젝트마다 설치

: 현재폴더더내 node_modules

전역모듈 vs 지역모듈

: 지역모듈 권장

: 모듈의 버전을 각 프로젝트 별로 관리할 수 있다.

: 유틸성 라이브러리는 전역설치 권장

2. 패키지 정보

패키지 설정 파일

: package.json

: 패키지에 대한 정보를 입력

: 의존성을 추가할 수 잇음

: 설치시 --save 옵션을 추가하면, 의존성 정보를 기록하여 준다.

: npm install // npm update ==> 패키지에 기록된 모듈을 설치/업데이트

3. 확장모듈 : nodemon

nodemon

: 소스 코드 수정후 재시작

: 동작멈추기, 다시 시작

: 수정 후 자동 재시작

: nodemon source.js

: 글로벌로 설치

: 관리자 권한 필요

4. 모듈만들기

모듈만들기

: 소스코드 분리

: 모듈

: 모듈 작성방법

: module.exports 객체에 하나씩 추가하는 방식 // module 생략가능

: exports하지 않은 함수는 사용 불가

: exports에 바로 넣을 경우 하나만 export할 수 있음.

: 모듈 사용하기

: 모듈 로딩 : require

: require('./greeting.js')

: 모듈은 캐시가 된다.

: 다시 로딩하더라도 똑같은 것을 가리킨다.



'프로그래밍 > Nodejs' 카테고리의 다른 글

HTTP 서버  (0) 2017.04.16
http 통신  (0) 2017.04.16
흐름제어 - 콜백, Async모듈, Promise  (0) 2017.04.15
Node.js 모듈  (0) 2017.04.14
Node.js 개요  (0) 2017.04.14

Node.js 모듈

1. 기본모듈

: Node.js 와 함께 설치

: 별도의 설치 과정 불필요

* 주요 기본 모듈

- 프로세스 환경

: os, process, cluster

- 파일과 경로, URL

: fs, path, URL, querystring, stream

- 네트워크 모듈

: http, https, net, dgram, dns

2. 전역 객체

: global 모듈에 속해 있는 것들 // global 생략가능

: 별도의 모듈 로딩 없이 사용

* 주요 전역 객체

: process, console, Buffer (클래스), require, _filename, _dirname, module exports, Timeout 함수

* 전역객체 : process

: 애플리케이션 프로세스 실행정보

- env : 애플리케이션 실행 환경

- version : Node.js 버전

- arch, platform : CPU와 플랫폼 정보

- argv : 실행 명령 파라미터 

: 이벤트

- exit : 앱 종료 이벤트

- beforeExit : 종료전 발생 이벤트

- uncaughtException : 예외처리 되지 않는 예외 이벤트

: 함수

- exit : 앱 종료

- nexTick : 이벤트 루프 내 동작을 모두 실행 후 콜백 실행 

3. 타이머 함수

: 지연동작 : setTimeout

: 반복동작 : setInterval

: 일정 시간 뒤 호출

: setTimeout(callback, delay, arg...)

: clearTimeout()

: 파라미터

: callback : 함수형태

: delay, arg

: 반복

: setInterval(callback, delay, arg)

4. 콘솔

* 콘솔

: 로그 남기기

: 실행 시간 측정

* 수준별 로그 남기기

: console.log, console.info, console.warn, console.error

* 객체형 출력

> console.log('obj:' + obj) // [object Object]

> console.log('obj:', obj) // {name : 'IU', job: 'Singer'} 

* 커스텀 콘솔

1. 콘솔 타입 로딩

2. 콘솔 객체 생성

3. 파라미터 : 출력 스트링

* 파일로 로그를 남기는 커스텀 콘솔

> var output = fs.createWriteStream('./stdout.log');

> var errorOutput = fs.createWriteStream('./stderr.log');

> var logger = new Console(output, errorOutput);

* 실행 시간 측정

: 시작 시점 설정하기

> console.time(TIMER_NAME)

: 종료시점, 걸린시간 계산해서 출력

> console.timeEnd(TIMER_NAME)

5. 유틸리티

> var util = require('util')

: 문자열 포멧, 상속, is 함수(deprecated)

* 상속

: util.inherits(자식생성자, 부모 생성자)

6. 이벤트

: 이벤트 다루기 : EventEmitter

: 이벤트를 다루는 기능 제공

* Node.js 앱의 이벤트들

: 이벤트 예

: 클라이언트의 접속 요청

: 소켓에 데이터 도착

: 파일 오픈/읽기 완료

: 이벤트 처리

: 비동기 처리

: 리스너 함수

* 이벤트를 다룰 수 있는 타입 : Readline 모듈

* 타입에 정의된 이벤트 다루기

: 이벤트 리스너 함수 등록

> emitter.addListener(event, listener)

> emitter.on(event,listener)

> emitter.once(event,listener)

: 이벤트 리스너 함수 삭제

>emitter.removeListener

>emitter.removeAllListener

: 최대 이벤트 핸들러 개수(기본10개)

> 조정가능

* 이벤트 발생

: 이벤트 발생시키기

: emitter.emit(이벤트이름, arg...) // 호출결과 : true(이벤트 처리),false(이벤트처리안됨)

* 커스텀 이벤트

> var customEvent = new event.EventEmitter() // 이벤트 이미터에 on을 통해 추가해서 정의해두고, emit을 통해 이벤트를 활성화 시켜야함.

* 커스텀 이벤트, 상속

> var Person = function(){}

> var util = require('util')

> var EventEmitter = require('events').EventEmitter

> util.inherits(Person, EventEmitter)

* 꿀팁!

: 에러처리

: 이벤트 리스너의 콜백함수는 error, result로 구성되기 때문에, error코드에 대한 예외처리를 먼저 작성하고 result를 작성하는 구성이 적당하다

모듈2

1. 경로다루기

* path 모듈 : 파일경로 다루기

: 경로 정규화, 경로생성, 디렉토리/파일 이름 추출, 파일 확장자 추출

* 경로 정보

: 현재 실행파일 경로, 폴더 경로

: 전역객체 - _filename, _dirname

* 경로 다듬기

>path.normalize()

* 경로 구성 요소

: path.basename() : 파일 이름, 경로중 마지막 요소

: path.dirname() : 파일이 포함된 폴더 경로

: path.extname() : 확장자

: path.parse : 구성요소 객체를 얻을 수 있음

* 경로 만들기

: pathUtil.sep, pathUtil.join(), pathUtil.format()

2. 파일시스템 다루기

: 파일 시스템 모듈 : fs

* 주요기능

: 파일 생성/읽기/쓰기/삭제, 파일 접근성/속성, 디렉토리 생성/읽기/삭제, 파일 스트림

* 특징

: 비동기와 동기 방식 함수 모두 제공

* 비동기식/동기식 API

: 에러 처리 방법

: 동기식 - try-catch 사용

: 비동기식 - 콜백함수의 에러 파라미터를 사용

* 파일 다루기

: 파일 디스크립터

: fd를 사용

: fs.openSync를 통해 얻어온다.

: r,w,a플래그를 통해 속성정할 수 있음

: fs.close를 통해 닫아주어야 함.

: 파일 경로

: filename사용

* 파일 읽기

> fs.read(), fs.readFile(), fs.readFileSync()

* 파일 종류

: 문자열 읽기 - 인코딩해야함, 바이너리 읽기 - buffer

* 인코딩 설정안하면 buffer

* 파일 상태 확인

> fs.access(Sync) : 파일 접근 상태 얻기

> fs.stat(Sync)    :    파일 상태 얻기

: 파일 상태 확인 후 읽기 하는 방법을 쓰자

* 파일에 저장

> fs.write, fs.writeFile.... : 파일 생성해서 쓰기

> fs.appendFile : 파일에 추가, 없다면 생성

> fs.unlink, fs.unlinkSync : 파일 삭제, 파일이 없으면 에러

* 디렉토리 생성/삭제

> fs.mkdir // fs.rmdir

* 파일스트림

> fs.createReadStream

3. 버퍼

: 바이너리 데이터를 다루는 모듈이다.

: global 이므로 별도의 로딩 불필요

: var fileBuffer = fs.readFileSync('image.jpg'); // 파일에서 읽기

: socket.on(,function(data){data가 버퍼})

: 생성후 크기 변경 불가

: 버퍼를 통해 문자열을 다양한 형태로 인코딩할 수 있다.

: 버퍼에 쓸때에는 버퍼의 크기까지만 써진다.


모듈3

1. 스트림

: 데이터의 전송흐름

: 콘솔 입력/출력

: 파일 읽기/쓰기

: 서버/클라이언트 - 데이터 전송

: 스트림을 다루기 위한 추상 인터페이스

: 다양한 스트림을 같은 인터페이스로 다룰 수 있다.

: 읽기,쓰기,변환 스트림이 존재함.

* Readable Stream

: 읽기 스트림

: flowing mode

: 데이터를 자동으로 읽는 모드, 데이터 유실의 가능성 존재

: paused mode

: 데이터가 도착하면 대기, read()함수로 읽기

> readable.read / setEncoding / pause/ resume/ pipe/ unpipe

: 이벤트

: readable - 읽기가능, data - 읽을수 있는 데이터 도착, end, close, error

: flowing mode

: data 이벤트 구현, pipe 연결, resume 호출

* Writable Stream

: 데이터 출력

: http 클라이언트 요청을 보낼 때, http서버의 응답을 보낼때, 파일 쓰기 스트림, tcp소켓

: 이벤트

: drain - 모두 보냄, error, finish, pipe, unpipe

* 표준 입출력 스트림

: process.stdin : 콘솔 입력

: process.stdout : 콘솔 출력

* 스트림 연결

: 스트림 연결과 해체

: 연결 이벤트

: 스트림 연결


2. URL 다루기

* 네트워킹

: 네트워킹의 시작

: 서버의 주소, 요청 위치, 파일의 위치

* URL

: 프로토콜, 호스트, 포트번호, 경로, 쿼리, 프래그먼트 등등...

: URL 모듈

* URL 분석하기

: url.parse()

* URL과 쿼리 문자열

* URL 인코딩

: urlencode

3. 쿼리 스트링

: URL 외에도 사용, HTTP 메시지 바디로 정보를 전달할 떄도 사용

: require('querystring')

: 쿼리스트링의 배열    

: group = d & member = 5 & member = 5 ...

: 객체를 쿼리 스트링으로 만들 수 있음.

4. 클러스터

: 여러 시스템을 하나로 묶어서 사용하는 기술

: 멀티 프로세스, 멀티 코어

: 노드 어플리케이션 : 1개의 싱글 쓰레드

: 멅티코어의 장점을 살리기 위해서는 클러스터를 사용해야 한다.

: 클러스터 사용시 포트 공유 - 서버 작성 편리

: 코어의 개수만큼 사용

* 클러스터

: 마스터, 워크 프로세스로 구성

: 마스터

: 메인 프로세스, 워커 생성

: 워커

: 보조 프로세스, 마스터가 생성

* 클러스터 모듈

: require('cluster')

: cluster.fork() // 클러스터 생성

: cluster.isMaster/isWorker 로 클러스터 확인

* 클러스터 이벤트

: 마스터의 이벤트

: fork, online, listening, disconnect, exit

: 워커의 이벤트

: fomessage, disconnect

* 마스터와 워커 분리

: 별도의 파일로 분리하기

> cluster.setupMaster

: exec: 워커파일




'프로그래밍 > Nodejs' 카테고리의 다른 글

HTTP 서버  (0) 2017.04.16
http 통신  (0) 2017.04.16
흐름제어 - 콜백, Async모듈, Promise  (0) 2017.04.15
NPM을 이용한 모듈관리  (0) 2017.04.15
Node.js 개요  (0) 2017.04.14

1. Node.js 개요 

1. Node.js 소개

: 2009년 Ryan Dahl 이 개발

: 자바 스크립트 언어, 크롬 V8 엔진

: 싱글 쓰레드, 비동기 I/O, 이벤트 기반 => 네트워크 애플리케이션에 적당함, 서버

: 서버는 디스크에 저장된 파일을 읽어야 되는데, 동기식 IO에서는 보통 멀티 쓰레드를 사용한다.

: 멀티쓰레드는 어려운데 노드는 비동기 I/O 이기 때문에 훨씬 쉽고, 성능이 좋다.

: 아톰도 노드 기반이다.

* 비동기 I/O

: 시간이 걸리는 I/O 에서...

: 하드디스크 접근, DB 서버, 네트워크를 통한 다른 서비스 접근 등...

: 동기식은 I/O가 끝날때까지 대기

: 비동기식은 I/O가 끝날때까지 대기하지 않음

* 비동기 I/O의 장점

: 성능상, 메모리 관리상 유리하다.

* Node.js의 장점

: 싱글쓰레드, 비동기 I/O, 간단한 구조의 경량 프레임워크와 풍부한 라이브러리

: 서버와 클라이언트에서 사용하는 언어가 같다

* Node.js 권장 분야

: 실시간 소셜 네트워크 서비스

: 데이터 중심의 서비스

: IoT 기기 연동

* 아키텍처

: 상위레벨 : 자바스크립트

: 로우레벨 : C

: 바인딩, v8 엔진, 쓰레드풀, 이벤트 루프

* 버전 구성과 지원

: Node.js 버전을 두단계로 진행

: 짝수버전(stable), 홀수버전(Unstable)

2. 프로그래밍 모델

: 동기(Synchronous)와 비동기(Asynchronous)의 차이는 무엇일까?

- 실행기 끝나고 다음 실행        - 실행 결과가 끝날때 까지 기다리지 않는다

* 콜백함수로 비동기를 구현한다.

5. 도큐먼트

* 모듈

: Node.js 간단한 구조, 필요한 모듈을 로딩

: 모듈 : 다른언어의 라이브러리에 해당

* 모듈

: 클래스, 메소드, 이벤트, 모듈함수

* 모듈로딩

: require('모듈이름') // 절대경로 혹은 상대경로

: 모듈 종류

: 기본모듈 - 설치 불필요 // 확장모듈 - npm으로 별도 설치

* 모듈로딩위치

: Node.js 라이브러리 디텍토리

: 확장모듈

: 같은폴더, node_modules 이름의 폴더, 상위 폴더의 mode_modules

* 모듈사용

1. 객체생성

2. 메소드 사용

* 이벤트

: 이벤트 - 이벤트 핸들러

: .on(이벤트이름, 리스너함수)

* 모듈함수

: 객체 생성 없이 모듈에 직접 사용 




'프로그래밍 > Nodejs' 카테고리의 다른 글

HTTP 서버  (0) 2017.04.16
http 통신  (0) 2017.04.16
흐름제어 - 콜백, Async모듈, Promise  (0) 2017.04.15
NPM을 이용한 모듈관리  (0) 2017.04.15
Node.js 모듈  (0) 2017.04.14

+ Recent posts