1. 디버깅

로그메시지 출력

로그외 다른 디버깅 방법

: 코드 단계 별 동작 확인

: 실행 멈충 - 브레이크 포인트

: 특정 시점에서의 스택 상황

: 스코프 내 변수의 값 확인

디버깅 모드로 동작시키기

> node --debug

> node --debug-brk

디버깅 모드로 동작 중

> node --debug app.js

Node-Inspector

: Webkit 기반으로 Node.JS APP 동작 디버깅

: 디버깅 시작하기

: 디버깅 모드로 시작

: Node-inspector 실행하면 url이 나타남

: 이를 웹브러우저에 넣으면 확인가능

개발툴의 디버그 모드

2. 테스트

테스트 코드 작성

: 코드로 테스트 하기

: 테스팅 자동화

테스트 모듈

: assert, should, mocha

Assert 모듈 : assert

: 기본 모듈, 별도 설치 불필요

: var assert = require('assert');

: 테스트 하기

: 참 테스트

: assert.ok(value[, message])        //    value가 false면 메세지출력

: 동등테스트

: asser.equal(actual, expected[, message])

: 같은 객체비교, 내용비교, ===비교 세가지 종류가 있음

: 에러 발생

: assert.throws(block[,error][,message])

Assert 모듈 : should

: BDD 방식의 assert 작성

: behavior

: should

> var intVal = 5;

> intVal.should.ASSERT

: assert 함수

: .eql(otherValue)    //    ==

: .equal(otherValue)    //    ===

테스팅용 프레임 워크 : mocha

: npm install -g mocha

: 테스트 자동화와 리포팅

: TDD, BDD

: 다른 Assert 라이브러리와 결합 사용

3. 프로세스 관리

콘솔로 서비스 실행

: 콘솔 종료하면 애플리케이션 종료

: forever

: 콘솔 종료와 관계없이 애플리케이션 계속 실행

: 크래쉬 -> 자동 재실행

: forever 설치 (-g)

: 명령

: forever start server.js

: forever stop [UID]

: forever stopall

: forever list






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

보안  (0) 2017.04.28
passport를 통한 인증  (0) 2017.04.28
인증  (0) 2017.04.27
socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27

1. 보안

사용자 가입과 로그인

: 가입 : 사용자 정보를 저장

: 로그인 : 사용자 정보를 전송

비밀번호 저장

: 비밀번호 암호화 저장

: 복호화 필요하지 않다

네트워크로 데이터 전송

: 데이터 암호화 - 전달

: 전달받은 암호화된 데이터 복호화

: 암호화 종류

: 복호화가 불가능한 암호화

: 복호화가 가능한 암호화

: 암/복호화

: 암호화

: 원본데이터를 변조해서 알수 없도록 변환

: 복호화

: 원본데이터로 변환

: 사용자 비밀번호 암호화 저장

: 복호화 불필요 

: 해쉬

: 사용자 개인정보 전송

: 복호화 필요

: 대칭/비대칭 키 암호화

: HTTPS

2. 해시

: 해시란?

: 단반향으로 생성하는 값, 함수

: 해시 특징

: 고정 크기의 해쉬값

: 입력값이 같으면 해시값도 같다

: 해시값이 같아도 입력값이 같다는 보장은 없다

: 단점, 한계임

: 해시 알고리즘

: MD5, SHA

3. 사용자 인증 정보 암호화

: 사용자 입력 해쉬 = DB 저장된 해쉬

: 사용자 암호에 소금 치기

: hash(charlie + !) // !가 솔트임.

: 솔트는 길게!

: 암호화 모듈

: crypto : 기본 모듈

: bcrypt : 확장 모듈

4. 암호화

 암호화 종류

: 대칭암호

: 같은 키로 암호화/복호화

: 키를 분배해야 한다

: 알고리즘

: DES, AES(레인달 알고리즘)

: 비대칭 암호

: 서로 다른 키(개인키, 공개키)로 암호화/복호화

: 개인키 : 공개안함

: 개인키로 암호화 - 공개키로 복호화

: 공개키로 암호화 - 개인키로 복호화

: 대칭 암호에 비해서 느리다

보안서버 만들기

: HTTPS(HTTP over SSL)

: 데이터 암호화 통신

: SSL

: 넷스케이프 SSL -> IETF의 TLS

: 대칭키 방식

: SSL 인증서

: 서비스를 제공하는 서버의 정보

: 신뢰성있는 인증기관 (CA)의 서버 인증

: 서버 공개키 : 비대칭 암호화 용

인증서 발급

: 공인된 인증 기관에서 인증서 발급

: 유료

: 인증기관, Verisign, Comodo

: 사설 인증서 발급    

: 키와 인증서 생성 프로그램 : openssl

: 경고발생

사설 인증서로 보안서버 만들기

: 보안 서버를 만들기 위해 필요한 것

: 키

: 인증서

: 인증서 발급 단계

: 키 생성

: 키에서 인증서 발급 요청(csr) 생성

: 인증서 발급 요청에서 인증서 발급

사설 인증서로 보안 서버 만들기

: https 모듈 사용

: 보안서버 생성

: https.createServer(option, [])

: option 에 key, cert, passphase가 있어야함.

: express를 사용해서도 가능

: 영리 목적으로하는 개인 정보 수집 서비스는 사용해야함.

: 보안 서버 의무화

: 무료

: www.startssl.com

: letsencrypt.org










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

디버깅과 테스트와 프로세스 관리  (0) 2017.04.28
passport를 통한 인증  (0) 2017.04.28
인증  (0) 2017.04.27
socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27

1. 인증

인증 작성하기

: 서비스내 직접 인증 기능 작성(Local Auth)

: 3자 인증 기능 사용(OAuth)

: OpenID - 인증만 제공해주는 서비스

로컬 인증

: 서비스 자체에서 사용자 가입

: 사용자 로그인 기능

: 사용자 정보 관리

: 필요한 점

: ID/PW가 서버와 클라이언트 메시지에 담겨서 이동

: 서버에 ID/PW 저장

: 사용자 정보 암호화

: 보안 통신 필요 : HTTPS

3자 인증

: 다른 서비스에 등록된 사용자의 인증 정보 사용

: 직접 가입/로그인 절차 없음

: ID/PW 노출 위험 적다

: 다른 서비스에서 토큰 발급

: 새로운 서비스

: 새로운 사용자라면, 인증하라고 요청

: 서비스키 제공- client_id, secret

: 가입된 서비스에 3자 인증 요청

: 가입된 서비스에 인증

: 인증 정보를 새로운 서비스에 전달

: 가입된 서비스에 인증 상황 문의

: 인증된 사용자 인지 문의

: 서비스 사용 가능

2. Passport

인증 모듈

: passport, everyauth

Passport 다루기 절차

1 : 모듈 로딩과 초기화

> var passport = require('passport');

> app.use(passport.initialize());

2 : Strategy 설정

> var Strategy = require('passport-strategy').Strategy;

> passport.use(new Strategy(function username, password, done){})

: 다양한 Strategy 제공

: Local Auth

: facebook, wirtter, google, kakao talk

3 : 인증

> app.port('login',passport,authenticate('local'))

: 인증 성공시

: 성공 메세지와 코드

: 성공 페이지 이동(웹)

: 인증 실패시

: 실패 메시지와 코드, 로그인페이지(웹)

4 : 세션 기록과 읽기

> passport.serializeUser(function(user, done){})

> passport.deserializeUser(function(id,done))

: 요청마다 세션 기록과 읽기

: passport.authenticate 이후 세션기록(serializeUser)

: 일반 요청마다 세션에서 읽기 (deserializeUser)

: 세션에서 읽어온 데이터

> req.user

5 : 사용자 정보

> req.user

3. LocalAuth

로컬 인증용 Strategy

설치

: npm install passport-strategy







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

디버깅과 테스트와 프로세스 관리  (0) 2017.04.28
보안  (0) 2017.04.28
인증  (0) 2017.04.27
socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27

1. 보안과 인증 

인증

: 등록된 사용자 식별

: 사용자 별 권한

보안

: 정보 노출 방지 : 암호화 통신 방법

: 정보 해독 방지 : 데이터 암호화 저장

2. 쿠키

클라이언트의 활동 추적하기

: 로그인 하지 않은 사용자가 쇼핑몰을 사용한다

: 쇼핑몰에서 상품을 장바구니에 넣으면

: 다음 쇼핑몰에 방문했을 때 장바구니는?

: 장바구니 내용을 브라우저에 기록

서버가 웹브라우저에 기록

: 상품을 장바구니에 담기

: 쿠키에 장바구니 내용 저장

웹브라우저는 쿠키 내용 전송

: 서버는 요청에서 쿠키 읽기

: 기존에 기록한 내용 확인

HTTP 메시지와 쿠키

: 서버 -> 클라이언트

: 응답 메세지에 쿠키 기록을 위한 메세지 작성

: 메시지 헤더 : Set-Cookie 필드

: 클라이언트 -> 서버

: 클라이언트의 쿠키를 서버로 전송

: 요청 메시지 헤더의 cookie

HTTP 모듈로 쿠키 다루기

: 쿠키 쓰기

: res.setHeader('Set-Cookie','name=value');

: 쿠키 읽기

: 쿠키 값 파싱 코드 필요

: req.headers.cookie    //    'name = value'

Express 에서 쿠키 다루기

: 쿠키 쓰기 - Express 기본

: res.cookie(이름, 값)

: res.clearCookie(이름)

: 옵션을 통해 시간, 등등을 정함.

: 쿠키 읽기 : 쿠키 파서 모듈

: npm install cookie-parser

: 미들웨어에 쿠키파서를 넣으면됨.

: req.cookies.이름

서명 쿠키

: 쿠키 서명하기

: 쿠키 변조 방지

: 서명된 쿠키 사용하기

: 쿠키파서 설정

: 쿠키쓰기

: 쿠키 읽기

쿠키의 문제

: 메시지 크기가 커진다. 느려진다

: 다른 웹브라우저, 보안에 취약

3. 세션

: 서버에 정보 저장

: 클라이언트에는 세션 식별 정보(세션 ID)

: 세션 ID는 쿠키 사용

: 세션 모듈    :    express-session

: 미들웨어에 넣는다.

: 읽고 쓰기가 간단하게 처리된다.

세션 저장

: 세션 - 서버에 기록    

     : 서버 재시작 -> 세션 기록 삭제

: 서버 메모리

: 서버 클러스터링

: 세션을 데이터 베이스에 저장

: Session Store 모듈

: 어디에 저장하는냐를 결정

: connect-mongo

: connect-redis





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

보안  (0) 2017.04.28
passport를 통한 인증  (0) 2017.04.28
socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27
Nodejs와 MongoDB  (0) 2017.04.27

1. 실시간 웹서비스와 socket.io

실시간 서비스 작성하기

: HTTP의 한계

: socket

: 데스크탑 애플리케이션 - 가능

: 모바일 애플리케이션 - 가능

: 웹 브라우저 - 불가능

웹브라우저에서 실시간 웹 서비스 사용하기

: ajax, polling, long poling, 웹 소켓...

: 다양한 시도가 있었지만, 다양한 웹 브라우저 때문에 한계가 존재.

: 여러 기술을 한번에 사용해야 된다는 어려움

실시간 서비스 작성하기

: socket.io : 호환되는 기술을 자동 선택

: npm install socket.io

socket.io 서버와 클라이언트

: 서버

: HTTP 서버

: socket.io 서버

: 클라이언트 

: HTTP 클라이언트, 모바일...

: socket.io 클라이언트

: 서비스 시작

: HTTP 서버 준비

: socket.io 서버 준비

: socket.io 클라이언트 요청 - HTML로 응답

: socket.io 초기화 및 서버 접속

: 연결이 끊어 졌을 경우 자동 재접속 시도

2. 데이터 교환

데이터 교환

: TCP 방법과의 차이이다. 스트림이 아니라, 이벤트를 이용하여 처리한다!

: 메시지 주고받기 - 이벤트 기반

: 메시지 이벤트 정의

: 메시지 전송

: socket.emit('EVENT', data)

: 이벤트 수신

: socket.on('EVENT',function(data){});

이벤트로 메시지 주고 받기

: 서버에 이벤트 등록

: 클라이언트 이벤트 등록

: 서버에서 이벤트 발생

: 소켓 하나에 이벤트 발생

: 연결된 모든 소켓에 이벤트 발생

3. 네임스페이스와 룸

: socket.io 기본연결

: 소켓과 1:1 연결

: 모든 소켓과 통신

: 1:N 통신

: 개별 소켓과 1:1통신 N번 반복

: 네임스페이스

: 룸

: 네임스페이스로 socket.io 연결 구분

: 같은 네임 스페이스에서만 메시지 주고 받음

: 기본 네임 스페이스 : /

: 커스텀 네임 스페이스 : /NAME-SPACE

: var system = require('socket.io')(server).of('/system')

: 네임스페이스 내 채널

: 같은 룸에서만 데이터 교환

: 룸에 입장, 여러 룸에 입장 가능

: 룸에서 떠나기

: 서버쪽에서 클라이언트를 룸에 입장 시키고 퇴장시킬 수 있음.


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

passport를 통한 인증  (0) 2017.04.28
인증  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27
Nodejs와 MongoDB  (0) 2017.04.27
Node.js와 MySQL  (0) 2017.04.27

1. 실시간 서비스

: HTTP를 이용해서 구현하면 요청-응답이라는 한계때문에 실시간으로 반영하지 못함.

실시간 서비스 구현하기

HTTP 통신

: 요청과 응답 기반

: 다시 요청할 때 까지 변경사항 반영 안됨

: HTTP가 아는 다른 프로토콜을 사용해야 한다 -> TCP

TCP 통신

: 네트워크 레이어 : Tranport Layer

: 스트림을 이용한 실시간 통신

: 소켓을 이용한 네트워크 프로그래밍

소켓

통신 접점

소켓 프로그래밍

: 데이터 그램 소켓 : UDP

: 스트림 소켓 : TCP

TCP 

: 연결필요

: 신뢰성, 손실데이터 재전송

: 혼잡도 제어

: UDP에 비해 느림

: 신뢰성 있는 실시간 통신

: FTP, HTTP, SMTP

: UDP

: 연결 불필요

: 신뢰성 없음

: 데이터 흐름 없음

: 빠름

: 속도 중시형 실시간 통신, 스트리밍 비디오/오디오

: DNS, DHCP, SNMP

TCP

: 연결 지향이므로 연결 과정 필요

: 연결과정

1 : 서버 소켓 생성, 준비, 대기

2 : 클라이언트 소켓 연결, 소켓간 연결

3 : 데이터 교환

4 : 접속 끊기

TCP데이터 주고 받기

: 스트림 기반

: 보내기 : 스트림에 write

: 받기 : 스트림에서 read

UDP(User Datagram Protocol)

2. TCP 실시간 통신 서비스

net 모듈

: 소켓 통신을 위한 기본 모듈 : net

> var net = require('net')

: 클래스

: net.Server, net.Socket

TCP 서버

: 서버 생성

> net.createServer(옵션, 리스너)

: 서버 함수

: listen(port, [호스트],콜백...) : 클라이언트 접속 대기

: close(콜백) : 추가 접속을 받기 않는다.

: getConnections(콜백) : 연결 갯수

: address() : 서버 주소

: 서버 이벤트

: listening : 포트 바인딩, 접속 가능한 상태 이벤트

: connection : 클라이언트 접속 이벤트

: close : 서버 닫기(연결된 소켓이 없을때만 발생)

: error : 에러

3.UDP 실시간 서비스

: TCP와 비슷한 방법이지만, 커넥트 부분이 빠져있다.

: 스트링 방식이 아니라, 패킷 방식이다.

: 서버, 클라이언트 소켓 구분이 없다.




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

인증  (0) 2017.04.27
socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
Nodejs와 MongoDB  (0) 2017.04.27
Node.js와 MySQL  (0) 2017.04.27
Express  (0) 2017.04.24

1. MongoDB 

모듈 설치

: mongoDB용 모듈

: mongodb : MongoDB Nodejs Driver

: Mongoose : ODM

2. MongoDB Driver

MongoDB js

: 드라이버

: mongo 콘솔 클라이언트 명령과 동일하게 조작

: 설치

: npm install mongodb

: 콜랙션 얻기, 따로 변수로 저장해두면 편함


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

socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27
Node.js와 MySQL  (0) 2017.04.27
Express  (0) 2017.04.24
RESTful  (0) 2017.04.24

1. MySQL

MySQL사용하기

: 모듈

: node-mysql

커넥션

> mysql.createConnection(DATABASE-CONFIG);

: 커넥션 설정

: host, post, user, password, database(DB명)

: multipleStatements : 동시 여러 SQL실행, 보안주의

: connectTimeout : 타임아웃 시간, 기본 10초

커넥션 생성

: config 부분에
> var config = { host : 127.0.0.1, ...} 와 같이 넣음

: connect : 연결

: end : 연결 종료

: query : SQL문 실행 및 자동 연결

커넥션 풀

: 다수의 커넥션 관리 기법

: 풀에서  커넥션을 얻어서 사용하고 반납

: 커넥션을 모듈로 분리해서 사용하는게 좋다.

: 하나의 커넥션으로 공유해서 사용할 수 있음

SQL 실행

:  placeholder

1. 

> var sql = 'INSERT INTO movie(title) VALUES (?);;' 
> connection.query(sql, ['인터스텔라'],function(){});

2. INSERT일 경우

> var data = {title : '메멘토'} 
> > connection.query(sql, data,function(){});

실행결과

: affectedRow : 영향을 받은 열의 개수

: insertID : 새로 추가한 경우 Primary Key

: changeRow : 변경된 열의 수

SQL Injection

: 플레이스 홀더 사용하기

실행과 커넥션 닫기

: query는 비동기 동작

: 커넥션 닫기는 query 콜백 함수 내에 작성하기

트랜잭션

: 여러 쿼리를 사용할 때 다시 되돌릴 수 있도록 commit으로 흐름제어

> conn.beginTransaction(CB);

: CB : err를 파라미터로 하는 콜백 함수

: conn.commit() : 트랜잭션 내 변경 확정

: conn.rollback() : 트랜잭션 내 변경 되돌리기

2. Sequelize

sequelize

: ORM : 객체와 모델을 매핑

: 지원 데이터 베이스 - MySQL, MariaDB, SQLite, 

: ORM

: SQL직접다루기 - SQL 작성 실행

: ORM : 모델을 이용한 값 저장과 변경

사용하기

: DB연결 설정
: 모델 설정
: 모델을 이용해서 데이터 저장
: 모델에서 데이터 얻어오기
: 모델을 이용해서 데이터 수정/삭제


: 별로인것 같다 안써도 될것같다.



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

소켓을 이용한 실시간 서비스  (0) 2017.04.27
Nodejs와 MongoDB  (0) 2017.04.27
Express  (0) 2017.04.24
RESTful  (0) 2017.04.24
모바일서버  (0) 2017.04.24

1. Express 소개

: 경량 HTTP 웹 프레임 워크

: 요청과 응답

: 미들웨어 사용

: 템플릿 엔진

: 설치

: npm install express

미들웨어

: 요청 분석, 처리하는 모듈

: 여러개의 미들웨어로 구성

: 미들웨어 사용설정

: app.use(미들웨어) 

: app = express()

: app.use(function(){})

라우팅

: 요청 -> 요청 처리 미들웨어로 분배

: HTTPMethod 별로 라우팅

: URL 경로 별로 라우팅

: method 별로, 경로 별로 가능

Express 요청

: 요청분석

: req.query - 쿼리 문자열

: req.path - 요청 URL 중 경로

: req.params - URL의 파라미터

: req.cookie : 요청 메세지 내 쿠키(쿠키파서 필요)

: req.body : 요청 메시지 바디 분석 (바디 파서 필요)

Express 응답

다양한 응답 메소드

: res.json() - JSON 응답 메시지 전송

: res.redirect() - 리다이렉션 응답 전송

: res.render() - 템플릿으로 렌더링

: res.send() - JSON, HTML, Buffer 전송, 메시지 헤더에 Content-Type 자동설정

: res.sendStatus() : 상태 코드와 상태 메시지 전송

: res.status() : 상태 코드 설정. 응답 메소드 종료 안함

: res.download() : 파일 다운로드

2. Express 미들웨어

미들웨어

: 미들웨어 기반의 프레임 워크

: connect

: Express

: 미들웨어

: 작은 단위 모듈

: 요청과 응답 처리 함수 형태

: Express 앱

: 다수의 미들웨어 조합으로 동작

: Express 앱의 요청 다루기

: 하나의 미들웨어에서 요청 분석 응답 마무리

: HTTP 메소드 별 미들웨어 설정 가능

: 여러 미들웨어를 거쳐서 요청과 응답 마무리

> app.use(function(req,res,next){
>     console.log("");
> next();                    // 바로 밑에 있는 미들웨어 실행
> });

> app.use(logger, sayHello) 와 같이 두 함수를 같이 넣어도 됨.

: express의 미들웨어

: 애플리케이션 수준의 미들웨어

: 라우터 수준의 미들웨어

: 에러처리

: 빌트인

: 써드파티

: 미들웨어 동작 순서 중요

: 보통 미들웨어 동작 순서

: 파비콘 처리 미들웨어

: 로깅 - 로그 남기는 거

: 정적파일

: 서비스 미들웨어

: 에러처리

: 내장 미들웨어, 써드 파티 미들웨어

: 내장 미들웨어

: express.static

: 써드 파티 미들웨어 : 설치해야 사용 가능

: var cookieParser = require('cookie-parser');

: app.use(cookeParser());

3. 정적 파일 요청 처리 미들웨어

정적파일

: 정적 파일 처리 미들웨어

: express.static

: 미들웨어 생성

: express.static(root, [options])

: 옵션

: etag : etag 사용 여부, 기본 true

: 사용

: app.use(express.static('images'))  //  images 폴더에서 찾아라

: 여러개 사용 가능

: 첫번째 미들웨어에서 서비스 실패하면, 그 다음 미들웨어에서 찾음

: 가상 경로 설정

: app.use('/static',express.static('files'));    //    static/image.png를 files/image.png로 찾음

Express 라우팅

1. Expresss 라우팅

라우팅

: 클라이언트의 요청을 미들웨어로 분배

: 라우팅 종류

: 요청경로

: 요청 메소드

: 요청 경로 + 요청 메소드

메소드별 라우팅 함수

: app.all, get, post, put, delete(요청경로, 담당 미들웨어)

동적 파라미터

: app.get('/user/:item',[callback]);

: req.params.item 처럼 호출

: 다수의 파라미터 사용 가능

: /movies/:movieId/:actor

: 사용 주의

: /user/:item

: /user/sample

: 라우팅 경로가 겹친다

: 앞 순위 미들웨어가 담당

: 순위 조절 필요

라우팅

: 경로에 정규식 사용하기

: ? 문자 존재하거나 생략

: /ab?cd ==> /abcd, /acd

: + 1번이상 반복

: /ab+cd ==> /abcd, /abbcd, /abbbcd

: * 임의의 문자

: /ab*cd ==> /abcd, abxcd, abRABDOMcd, ...

: 괄호를 통해 묶어주면 정규식을 묶어서 사용 가능

: express의 route 함수

: 같은 경로에 대해 다양한 메소드를 정의할 수 있음

: route().get().post()..

라우터 수준의 미들웨어

라우터

> var router = express.Router();

: 라우팅 로직을 별도로 분리할 떄 사용

: router.js

> router.get(경로,미들웨어);

> router.get(경로,미들웨어);

> module.exports = router;

: 라우팅 로직 설정 

: app.js

: app.use(require('./router'))

상대 경로 처리 라우터 설정

상대 경로 요청 처리 가능

* /greeting/hello 경로의 요청

: app.use('/greeting',require('./greetingRouter'))

* greetingRouter의 라우팅 코드

: router.get('/hello', sayHello);    //    상대적으로 적힘

2. 에러처리 미들웨어

Express 에러 처리 방법

: 미들웨어 내부에서 처리

: 각각 미들웨어에서 에러 처리

: 에러 처리 로직이 제각각

: 에러 처리 코드 중복

: 에러 처리 미들웨어에게 위임

: 일관된 에러 처리 가능

: 가장 후순위로 설정해야함.

환경 별 에러 처리

: 개발환경 설정하기

: // Windows - 서비스 환경

: set NODE_ENV = product        //    node myapp.js

//LINUX - 개발환경

: NODE_ENV = product node myapp.js

: NODE_ENV = development node myapp.js

: 환경설정 읽기

: app.get('env')

Express 써드파티 미들웨어

1. 파비콘 미들웨어

파비콘 미들웨어

: 파비콘 담당 미들웨어

: serve-favicon

: 웹브라우저의 싸이트 아이콘

> npm install serve-favicon

: 미들웨어 생성

: favicon(파비콘경로, 옵션)

: 미들웨어 중 앞 순위로 설정

> var express = require('express')
> var favicon = require('serve-favicon')
> var app = express()
> app.use(favicon(__dirname + '/public/favicon.ico'));

2. 로그 남기기

로그 남기기

: 로그

: 개발용, 버그 분석

: 사용자 행위 기록

: 운영 기록

: 로그 기록 매체

: 콘솔에 출력

: 파일, 데이터 베이스에 기록

: 이메일, SMS 등....

로그 남기기 - console

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

로그 미들 웨어 - morgan

: 로그 모듈 : morgan

: 간단한 설정

: 요청과 응답을 자동으로 로그 남기기

: morgan 설정

: morgan(format, options)

: 로그 포멧

: combined

: common : addr, ,user, method, url,...

: 사용 예

> var morgan = require('morgan')

> app.use(morgan('dev'))

: 요청과 응답 자동으로 기록

: 미들웨어 중 앞 순위로 설정

로그 미들웨어, 모듈 : winston

: 다양한 형태로 로그 남기기

: 모건 보다 다양한 형태로 남길 수 있음

: 파일로 남기기, 데이터 베이스에 저장

: email, sms, 알림 서비스 사용

: 서비스 운영 시 콘솔을 항상 볼 수 없기 때문에 필요함.

: 로그 기록 매체 : Transport

: 기본제공 Transport

: Console

: File

: Http

: Transport 추가/삭제

: winston.add(winston.transport.File, {filename:'service.log'});

: winston.remove(winston.transports.Console);

: 추가한 방법 모두 출력이 됨.

: 로거를 생성해서 사용자 정의로 만들 수 있음

: 에러났을때나, 사용자 로그를 남기는 등 다양한 상황에 맞추어 다르게 사용가능

: 별도 설치 Transports

: DailyRotateFile = 매일 새로운 파일로 교체하면서 로그를 남기도록 하는거

: CouchDB, Redis, MongoDB ..

: Mail transport

: Notification Service(Amazon SNS)

3. BodyParser

: post 등 버퍼를 통해 입력을 받을때 편하게 요청 메시지 바디를 파싱할 수 있도록 하는 모듈

: 바디메시지 인코딩 타입

: JSON, Raw, Text, URL-Encoded

: 멀티파트 지원안됨

: formidable, multer 등 써드 파티 미들 웨어 사용

: 옵션을 통해 메시지 크기 여러 옵션을 적용가능

: bodyParser.json()

: bodyParser.urlencoded()

바디 파서의 결과

: 파서 결과 - req.body

4. 메소드 오버라이드

메소드 오버라이드

: HTML 폼은 GET과 POST만 가능한데, DELETE와 PUT을 사용할 수 있도록 도와줌


Express 템플릿 엔진

Express 템플릿

HTML 출력

: 클라이언트가 웹 브라우저

: 응답 메시지 형태 - HTML

: 화면 전환

: HTML 구성요소

: 문서 구조 태그, 컨텐츠, CSS, JS

템플릿

: 뷰와 제어코드(데이터) 분리, 결과물 - HTML

템플릿 엔진

: ejs, jade

: Express 템플릿 설정

: app.set('views', 템플릿 폴더)

: app.set('view engine', 템플릿 엔진)

: 템플릿에 적용 : 렌더링

: res.render(파일명, 변수, 콜백)

2. 템플릿 엔진 EJS

템플릿 엔진 EJS

: 특징

: HTML 태그 그대로 사용

: 코드 실행 : <% %>

: 결과 출력 : <%= %>

3. 템플릿 엔진 Jade

Jade

: 특징  

: 간결한 문서 구조 표현

: 들여쓰기를 이용한 문서 구조

: 코드작성은 - 기호를 앞에

: 속성은 () 안에

: = 기호로 변수 출력

: = 기호와 문자열 출력, Escaped

: !=기호와 문자열 출력, Unescaped

: interpolation

: escaped : #{val}

: Unescaped : !{val} 

: if 조건문

: - 없이 사용

: 들여쓰기로 종료








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

Nodejs와 MongoDB  (0) 2017.04.27
Node.js와 MySQL  (0) 2017.04.27
RESTful  (0) 2017.04.24
모바일서버  (0) 2017.04.24
HTTP POST요청  (0) 2017.04.16

1. REST 서비스

REST

: Representational State Transfer

: 로이 필딩, HTTP 프로토콜 주요 저자

: 사전 정의 : 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍쳐

: 네트워크를 이용해서 자원에 접근하고 자원을 다룰수 있는 아키텍쳐

: 90년대 웹 도입과 성장 시대에 웹 기반 소프트웨어의 이상적인 아키텍쳐 제시

REST 아키텍쳐의 제한 조건

- 클라이언트/서버 : 요청과 응답 기반

- 상태 없음 : 클라이언트 상태와 관계없이 요청으로만 응답

- 캐시 : 클라이언트는 서버의 응답을 캐쉬, 네트워크 비용 절감

- 계층화 시스템 : 서버는 다양한 형태의 중간계층을 이용해서 확장할 수 있다.

: 클라이언트는 서버의 계층에 무관하게 통신을 할 수 있다.

- Code on Demand : 리소스를 다룰수 있는 코드 전송

- 인터페이스 일관성 : 시스템구조를 단순화시키고 작은 단위로 분리해서 독립적으로 개선하고 확장할 수 있다.

REST 인터페이스 원칙

- 자원 식별 : 개별 리소스를 식별할 수 있어야 한다.

- 메세지로 리소스 조작 : 메세지에 작성한 리소스를 다루는 정보를 이용해서 리소스를 얻어오거나 리소스를 조작한다.

- 자기 서술적 메세지 : 요청과 응답 메세지에는 메세지를 처리할 수 있는 정보를 포함한다.

- 하이퍼 미디어 : 하이퍼링크를 이용해서 유기적으로 연결된 문서로 쉽고 간단하게 정보를 접할 수 있다.

2. 서비스 설계 가이드

REST 아키텍처를 기반으로 서비스 작성하기

: HTTP 프로토콜 사용

: 인터페이스 설계

: 리소스 접근하는 인터페이스 (URL)

: 리소스를 다루기 위한 HTTP 메소드

: 요청과 응답 메세지 설계

: 요청 메세지 구조

: 응답 메세지 구조

인터페이스 설계

: 간단하고 직관적인 API

: 리소스를 다루는 행위는 HTTP 메소드 사용

: GET, POST, PUT, DELETE

: API 버전

: URL에 버전 명시할 수 있음 /v1/...

: 명사형 단어 사용 권장

: 목록 형태의 리소스를 다루는 API는 복수형 명사

: 목록에서 특정 조건으로 필터링 : 쿼리 문자열

응답메세지 (JSON)

: 프로퍼티의 이름

: 의미를 충분히 반영

: 카멜 케이스

: 예약어 사용하지 말것

: 응답 메세지 구조

: 데이터와 보조 데이터 활용

: 에러 발생시 에러 정보 제공

메시지 구조

: 데이터와 메타데이터, 에러정보, 페이지 정보

3. 영화 정보 서비스 설계

영화 정보 제공 웹 서비스

: 컨텐츠 : 영화정보

: 미디어 타입 : JSON

: HTTP 메소드 : GET, PUT, POST, DELETE

4. 영화 정보 서비스 작성

: REST 서비스 작성

: http 모듈로 만듬

: 라우팅, 요청/응답 방법 익히기



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

Node.js와 MySQL  (0) 2017.04.27
Express  (0) 2017.04.24
모바일서버  (0) 2017.04.24
HTTP POST요청  (0) 2017.04.16
HTTP 서버  (0) 2017.04.16

+ Recent posts