소프트 웨어 관리

rpm

: CentOS는 소프트웨어를 rpm 패키지 형태로 제공한다.
: 이 rpm 패키지는 yum 및 그놈 소프트웨어 관리 프로그램 등을 통하여 쉽게 설치 및 삭제할 수 있다.
: 패키지 관리자를 통하면 소프트웨어 업데이트를 쉽고 편리하게 진행할 수 있으며, 소프트웨어 삭제 시 깔끔하게 삭제된다.

rpm 패키지 관리자 개요

: 초기의 리눅스에서는 모든 패키지를 tar볼을 가져다가 일일이 컴파일하여 설치해야 했기 떄문에 리눅스를 사용하는데 많은 어려움이 있었다. 그래서 프로그램의 설치와 관리를 용이하게 하기 위해 rpm이 개발되었다.
: yum은 rpm을 보다 쉽게 사용하기 위해 개발되었다.,

rpm의 원리와 기본 개념

1. rpm의 원리

: rpm패키지는 비슷한 환경에서 컴파일되어 설치한 프로그램 전부를 묶어 같은 종류의 다른 시스템에 그대로 풀어서 설치한다. 설치 혹은 삭제 전후에 스크립트를 사용하여 전, 후행작업이 포함된다.

2. rpm의 설치와 업그레이드

: 설치 시에 의존 관계에 있는 패키지가 존재하는 경우에는 해당 패키지도 함께 설치해야 한다.

3. 질의(Query) 및 검증(Verify) 기능

: 질의 기능은 rpm패키지가 어떠한 정보를 가지고 있는지에 대하여 사용자들이 질의를 할 수 있는 기능이다. 주로 패키지와 파일의 정보를 확인한다.
: 검증은 설치된 rpm패키지와 rpmDB에 저장된 내용을 비교하여 초기 설치 시와 다른 점이 있는지 검사하는 기능이다.

4. SRPM RPM 구분

: SRPM은 소스 파일을 유지하며 수정이력을 관리한다. rpm제작을 위해 사용되는 소스, 패치파일, 제작과정에 대한 명세 파일을 묶어 배포한다.

rpm 유용한 명령어

# rpm -i [패키지 명]
    : 패키지 설치
    : --nodeps 패키지 설치시 의존성 검사를 하지 않는다
    : --force 설치 도중 발생하는 에러를 무시하고 강제로 설치한다.

# rpm -U [패키지명]
    : 패키지 업데이트
    : --nodeps 패키지 설치시 의존성 검사를 하지 않는다
    : --force 설치 도중 발생하는 에러를 무시하고 강제로 설치한다.

# rpm -v [패키지명]
    : 상세정보 출력

# rpm -q [패키지명]
    : 설치된 패키지가 있는지 질의
    : qi 패키지 정보도 출력
    : qp 설치되어 있지 않는 rpm파일에 대하여 질의

# rpm -qf [파일경로]
    : 해당 파일이 어떤 패키지에 속하는지 출력

# rpm -qa
    : rpm 전체 패키지 목록 출력

# rpm -Va
    : rpm 검증

# rpm -e [패키지 명]
    : 패키지 제거

# rpm --checking [패키지 파일 이름]
    : 정상적인 원본파일인지 검증

yum(Yellowdog Updater Modified)

: /etc/yum.conf에 설정된 내역과 /etc/yum.repos.d/ 디렉토리에 저장된 저장소 파일에 지정된 서버로부터 업데이트된 패키지들을 검사하고 다운로드하여 설치할 수 있는 패키지 관리 프로그램이다. 
: 설치, 업데이트, 삭제 시 의존성을 검사하여 관련된 패키지를 설치, 업데이트, 삭제를 함꼐 진행할 수 있게 한다.
: 환경그룹, 패키지 그룹 별로 설치 및 삭제가 가능하다.

yum의 기본적인 사용법

# yum [옵션] [명령] [패키지명 ...]

# yum install [패키지명]

# yum update [패키지명]

# yum check-update
    : 패키지를 업데이트 하기 전에 업데이트된 패키지가 있는지 확인

# yum remove [패키지명]

# yum list
    : 저장소 서버에 있는 모든 패키지 목록 확인
    : 옵션 - update, available, installed

# yum info [패키지명]
    : 패키지들에 대한 상세한 정보를 출력


소스코드 컴파일 및 설치

1. 압축 해제
    : tar는 압축이라기 보다는 파일 및 디렉토리를 하나의 파일로 묶는 역할을 한다.
    : # tar -xvf [압축파일명]

2. ./configure
    : 압축이 해제된 디렉토리로 이동해서 ./configure 명령으로 소스코드 컴파일하기 위한 설정을 하도록 한다.

3. 컴파일
    : # make
    : 컴파일 과정까지는 일반 사용자로도 가능하다

4. 설치
    : # make install
    : 설치 과정은 대부분 root 권한으로 실행되어야 한다.

5. 제거
    : 응용프로그램의 파일과 디렉토리를 제거할 뿐만아니라, 드라이버와 다른 소프트웨어 연결도 단절되어야 한다.
    : 설치과정(make install)에서 보여주는 메시지를 통해 설정된 내역과 추가된 모듈을 제거하면 좋다.



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

Linux 백그라운드에서 명령 실행시키기  (0) 2017.04.05

하이퍼 바이저

하이퍼바이저(hypervisor)는 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼(platform)을 말한다. 가상화 머신 모니터(virtual machine monitor, 줄여서 VMM)라고도 부른다.

 위키 백과에 따르면 하이퍼 바이저란 서버 가상화를 위한 일종의 소프트웨어라고 볼 수 있을 것 같습니다.

이러한 하이퍼 바이저는 두가지로 나뉩니다.

Hyperviseur.png

1. Type1 : native(bare metal) 방식

 : 운영체제가 하드웨어위에 직접 올라가듯이, 하이퍼 바이저가 하드웨어 위에 직접 올라가서 실행됩니다. 이 때 게스트 운영체제는 하이퍼 바이저 바로 위에서 2번째 수준으로 실행됩니다. 

장점

 : Host OS가 존재하지 않아서 리소스를 절약할 수 있습니다.
 : 호스트형 가상화 방식보다 오버헤드가 적다.

단점

 : 자체적인 관리 기능이 없어서, 별도의 관리 콘솔이나 관리 컴퓨터가 필요하다는 단점.

2. Type2 : hosted 방식

: 하이퍼바이저가 일반 프로그램처럼 host OS위에서 실행되며, 게스트 운영체제는 하이퍼 바이저 위에서 3번째 수준으로 실행됩니다. 


서버가상화의 도입 요인

  • 하드웨어 능력의 확대로 한 컴퓨터에서 동시에 작업할 수 있는 양이 증가하였다.
  • 서버를 통합하여 비용이 줄고 관리를 간소화하였다.
  • 서버 저장소나 렌더 저장소 같은 대규모 멀티프로세서와 클러스터 장비를 제어할 필요가 있었다.
  • 하이퍼바이저 아키텍처로 인해 보안성, 신뢰성, 장비의 독립성이 증가하였다.
  • 특정한 운영 체제에 의존적인 응용 프로그램을 다른 하드웨어나 운영 체제 환경에서 실행시킬 필요가 있었다.


서버 가상화

 : 낭비되는 서버 자원을 유연하게 사용하기 위해 탄생
 : 인프라 확장을 매우 쉽고 반환하기도 쉽다.
 : 사용량을 예측할 수 없고 사용량의 증감폭이 큰데, 물리서버로 구축하는 것은 한계가 존재

가상 머신의 정의

: 가상 컴퓨터 시스템을 의미

: 내부에 운영체제와 애플리케이션을 갖춘 완전히 분리된 소프트웨어 컨테이너

: 가상화 대상

: 서버, 스토리지, 네트워크, 앱...

가상 머신의 역할

: 단일 서버에서 하나 이상의 가상 시스템과 다수의 운영체제 및 애플리케이션을 실행할 수 있게됨

: 하이퍼 바이저를 이용

: 하이퍼 바이저 위에서 동작하는 운영체제의 기본단위를 가상머신이라고 부름


주요 속성

: 파티셔닝
: 하나의 물리적 시스템에서 여러 운영 체제 실행
: 가상머신 간에 시스템 리소스 분배

: 분리성
: 하드웨어 수준에서 장애 및 보안 분리성 제공
: 고급 리소스 제어로 성능 유지

: 캡슐화
: 가상 머신의 전체 상태를 파일에 저장
: 파일을 이동하고 복사하는 것처럼 손쉽게 가상 머신을 이동 및 복사

: 하드웨어 독립성
: 원하는 물리적 서버로 원하는 가상 머신을 프로비저닝 또는 마이그레이션

서버 통합

: 필요한 서버 수를 줄이고, 리소스 사용량을 극대화 시킨다
: 서버 가상화를 통해 서버통합을 이루어 효율성을 높이고 비용을 절감

클라우드 컴퓨터와 다른 개념

: 클라우드 컴퓨터는 가상화를 통해 인터넷으로 공유 컴퓨팅 리소스를 온디맨드로 제공하는 것을 의미


가상화의 유형

: 서버 가상화

: 네트워크 가상화

: 물리적 네트워크를 소프트웨어로 완벽하게 재현

: 논리적 네트워킹 디바이스 및 서비스(논리적 포트, 스위치, 라우터, 방화벽, 로드 밸런싱장치, VPN 등) 을 제공

: 물리적 네트워크와 동일한 기능 및 성능을 보장하면서, 가상화 운영 이점과 하드웨어 독립성을 제공

: 데스크톱 가상화


장단점

: CPU 활용, 메모리, 디스크라는 관점에서 가상화의 한계와 현실을 인지해야함.

: 장점

: 시스템을 더 빠르게 재구축할 수 있음

: 오래된 서버를 새것처럼 쓸 수 있음

: 고려할 점

: CPU, 코어, RAM, 디스크 공간의 한계 고려

: SQL서버에 시스템, 데이터, 로그 공간을 어떻게 별도로 할당할지?

: 백업과 복구 고려( 이부분은 레거시 시스템보다 더 유연)

: 즉, 하드웨어, 저장소, 하이퍼바이저 기술에 따라 달라짐.


최근 컨테이너 기술기반의 도커가 주목받고 있습니다. 

기존의 서버 가상화 기술보다 자원관리 측면에서 효율이 더 좋기 때문인데요.

관심있으신 분들을 위해 제가 공부하고 있는 것들을 두서없이 나열해보고자 합니다!


아직 학기 중이라서 나중에 시간이 된다면 체계적으로 올려보도록 하겠습니다.


아래 URL을 따라 학습하였습니다!

1. 도커란?

2. 윈도우에서 도커 설치 가이드


* 아래 사진은 도커에서 Apache 이미지를 검색하고 다운 받는 것을 보여줍니다.


# Change the MySQL database collation to UTF-8
ALTER DATABASE my_database DEFAULT COLLATE utf8_unicode_ci;

# Change the MySQL database character set to UTF-8
ALTER DATABASE my_database DEFAULT CHARACTER SET utf8;


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

+ Recent posts