1. 샤딩의 개념과 정의

* 샤딩의 목적

: 데이터의 분산 저장

: 한대의 서버에 빅 데이터를 저장하는 것은 불가능하다.

: 서비스의 성능저하, 하드웨어의 한계

: 데이터를 분산하여 순차적으로 저장한다면, 부하를 분산할 수 있다.

: 백업과 복구 전략

: 시스템 성능 향상, 데이터 유실 가능성으로부터 보호

: 미리 분산하여 안정적이고 효과적인 시스템 운영을 한다.

: 여러 독립된 프로세스로 병렬 작업을 하기 때문에 빠른 처리 성능을 보인다.

: 3대 이상의 서버를 샤드로 활용하는 것을 추천한다. (최소 2대)

: 기존 한대일때보다 20~30%더 메모리를 사용한다.

* config 서버

: 샤드 서버의 인덱스를 찾는데 필요

: 샤드 시스템에 대한 메타 데이터 저장/관리 역할

: 샤드와 별도 서버에 구축

: 최소 3대 이상 사용(최소1대)

: 저사양 서버 사용 가능

* mongos 서버

: 하나 이상의 프로세스를 사용

: config 서버의 meta-data를 캐시한다

: 빅데이터를 샤드 서버로 분산해주는 프로세스

: mongs 서버를 통해 데이터를 쓰고 읽는 작업을 한다.

* 샤딩 시스템 계층

: 중개자 계층은 샤딩 시스템의 핵심적인 부분 (mongos 부분)

* Shard Key 구성

: Shard Key는 여러개의 Shard 서버로 분할 될 기준필드를 가리킨다.

: partition 과 load balancing에 기준이 되며, mongodb 데이터 저장과 성능에 절대적인 영향을 미친다

: 데이터 분포가 낮으면 Low Cardinality라고 한다.

: Chunk Migration의 횟수와 빈도를 결정한다.

- migration : 데이터의 이동, 서버에 균등하게 데이터를 재조정하는 과정

- Chunk : 일정한 데이터양에 도달했을 때 서버로 분할하는 단위

2. 샤딩 시스템 구성

* 데이터 저장 공간 생성

> mkdir shard1    //    저장공간 만들기

> mkdir shard2    //    저장공간 만들기

> mkdir shard3    //    저장공간 만들기

* config 서버용 저장 공간 생성

> mkdir config1    // config 서버용 저장공간 생성

* 서버 실행

> Mongod -shardsvr -dbpath 경로 -port 40001    //    샤드 서버 실행 , 포트는 다른 컴퓨터면 같아도됨

> Mongod -shardsvr -dbpath 경로 -port 40002    //    샤드 서버 실행

> Mongod -shardsvr -dbpath 경로 -port 40003    //    샤드 서버 실행

> mongod -configsvr -dbpath 경로 -port 50001   //    config 서버 실행

* mongos 서버 실행

> mongos -configdb localhost:50001 -port 27017 -chunkSize 1    //    mongo 명령어를 통해 shell 진입시 해당 포트를 입력해야 한다.

* 샤드 서버 추가

> db.runCommand({addshard:"localhost:40001"})    //    Shard를 런 타임중에 추가할 수 있음

> db.runCommand({addshard:"localhost:40002"})

> db.runCommand({addshard:"localhost:40003"})

* 샤드 키 지정

> db.runCommand({enablesharding:"person"})    //    Shard DB지정

> db.runCommand({shardcollection:"person.users",key:{_id:1}})    //    Shard Collection과 index지정

* 현재 샤드 상태 조회

> printShardingStatus();

* 데이터 확인

> mongo localhost:40001

> use person

> db.users.count()

* 샤드 삭제

> db.runCommand({removeshard:"localhost:40000"})

3. 샤딩의 한계

: 샤드 노드의 개수를 약 100개정도로 한정하고 있다

: 마스터 서버가 fail되어도 mongos는 여전히 fail된 mongod를 마스터로 간주할 수 있다.

: 중요한 데이터는 RDBMS에 저장하자


1. Index 기본 개념

* 개념

: DB의 검색을 빠르게 하기 위해 미리 데이터의 순서를 정리해두는 과정

: index를 잘 설계해야 최대의 효율이 가능

: 고유 index, 희소 index, 다중키 index // 복합 index, 단일 index 지원

: 쿼리해오기 위한 작업량을 줄임 <- 모든 도큐먼트를 스캔해야되는 비효율성을 줄임

: 한 쿼리당 하나의 index만 유효

: 두개의 index가 필요하다면 복합 index를 사용하면 됨.

: 복합 index에서는 키의 순서가 중요

: _id는 기본적으로 생성되는 index로 도큐먼트를 가리키는 유일한 키값이다.

: 도큐먼트에 빠르게 접근할 때에 사용한다.

* Index 효율

: 모든 index에는 유지비가 소요되기 때문에 무한히 만드는 것은 의미가 없다.

: index는 읽기 위주의 어플리케이션에서 유용하다.

: 쓰기가 많다면 index를 포기하거나 컬렉션을 따로 운영해야 한다.

: Mongodb는 실행시 모든 데이터 파일을 메모리에 매핑한다.

: 모든 도큐먼트, 컬렉션, 인덱스를 포함하는 데이터 파일이 램에 적재

: 모든 데이터를 수용하지 못하면 운영체제가 디스크를 빈번하게 액세스하게 되고 읽기/쓰기 연산에 지연이 발생한다.

: Thrashing(쓰레싱) : 모든 데이터를 디스크에서 액세스해야 하는 경우 // 굉장한 성능저하 발생

: 복합인덱스는 더 많은 공간을 필요로 한다.

* B트리

: 내부적으로 B-Tree 알고리즘을 이용하여 인덱스를 구성한다.

: 트리에서 각 노드는 여러개의 키를 갖는 것이 가능

2. MongoDB index

* 인덱스 확인

> db.person.getIndexes()    //    Collection의 인덱스 확인

* 인덱스 생성

> db.person.ensureIndex({name:1})    //    1이면 오름차순, -1 이면 내림차순

* 인덱스 생성(백그라운드에서 생성, 비동기방식)

> db.person.ensureIndex({name:1},{background:true})

* 인덱스 생성( 고유인덱스 ) 

> db.person.ensureIndex({name:1},{unique:true})    //    unique 속성을 지정해서 중복데이터가 저장되지 못하게 하여, 데이터 저장과 검색속도를 늘린다.

* 인덱스 생성( 중복데이터 삭제 )

> db.person.ensureIndex({name:1},{unique:true, dropDups:true})    //    Unique 하게 했을 때 이미 중복된 데이터가 있을 경우 중복되는 데이터는 삭제하고 인덱스를 저장한다.

* 인덱스 삭제 ( 특정 필드 )

> db.person.dropIndex({name:1})    //    해당 인덱스 제거

* 인덱스 삭제( 모든 인덱스)

> db.person.dropIndexes()    //    _id를 제외한 모든 인덱스 제거

3. MongoDB Index 사용법

* 특정 사용자 정보를 가진 문서 찾기

> db.users.find({username:"user101"}).explain()    //    검색에 대한 상세 정보 출력

* 사용시 주의할 점

: 모든 인덱스를 갱신해야 하기 떄문에 모든 쓰기 작업은 인덱스 때문에 더 오래 걸림

: Collection 당 최대 64개까지 인덱스를 지닐수있지만, 2~3개만 지니는게 좋다.

: 몽고디비의 인덱스는 RDBMS와 유사하게 작동함

: 인덱스 구축시 background 옵션을 사용하면, 비동기로 작업이 가능하긴하지만 느리다.



인덱스

6. MongoDB 쉘을 이용하여 데이터 저장하고 조회하기


6. MongoDB 쉘을 이용하여 데이터 저장하고 조회하기

: db나 테이블을 따로 만들지 않고 명령어를 수행하면 자동으로 DB와 테이블을 만들어주는 듯하다.

1. MongoDB 실행 

mongod - dbpath 경로    //    서버 실행

> mongo        //    MongoDB Shell 실행

> use admin

> db.shutdownServer()    //    Server 종료

* MongoDB 조회

> show dbs;     //     database 조회

> use test       //     test DB를 만들고 사용한다.

> show collections      //     현재 db의 collection list를 출력한다.

: RDBMS는 스키마에 따란 데이터만 저장할 수 있었다면, MongoDB는 다 저장할 수 있다.

* Javascript 명령

> var a = {age:25}  //  이런식으로 넣어줄 수 있다.

: javascript의 명령과 동일한 형태를 가진다

2. MongoDB 데이터 저

> db.scores.save({a:99});    //    데이터 저장

> db.scores.find();    //    해당 테이블을 출력

> for(i=0;i<10;i++){db.scores.save({a:i, exam:i})}    //    이런 것도 가능하다.

3. MongoDB 데이터 조회

> db.scores.find({a:2});    //    모든 입력매개체는 JSON형태를 따라야 한다.

: a가 2인 도큐먼트만 찾는다라는 뜻.

> db.score.find({a:{'$gt':15}});    //    a가 15보다 큰 도큐먼트만 찾는다.

> db.scores.find({a:{'$gte':2, '$lte':4}})    //    2보다 같거나 크고 4보다 작거나 같은 것들을 출력한다. (AND)

> db.scores.find({a:'{$in':[2,3,4]}})    //    $in 뒤에는 무조건 배열이다. 2,3,4 에 속하는 결과를 출력한다.

> db.scores.find{$or:[{'a':{$lt:1}, {'a':{'$gt':9}}]}    //    OR 연산

> db.score.find([컬럼:{'$exists':true}])    //    해당 컬럼이 존재하는 도큐먼트만 출력

> db.score.find({조건},{a:1,exam:1,_id:0})    //    조건에 해당하는 a, exam 컬럼만 출력

- 비교연산자

: $gt : '>', $lt : '<', $gte : '>=', $lte : '<=', $ne : '!='

: $in : is in array, $nin : ! in array


7. MongoDB 쉘을 이용하여 저장된 데이터를 수정하거나 삭제하기

1. 데이터 수정 UPDATE

* 전체 수정

> db.user.update({name:'Johnny'},{name:'Cash',languages:['english']})    //    해당 데이터의 도큐먼트가 _id를 제외하고 모두 바뀐다.

* 일부 수정

> db.user.update({name:'Cash'},{$set:{age:50}});    //    해당 도큐먼트에 age가 있으면 50로 변경하고 없으면 age를 50으로 추가한다.

* 일부 삭제

> db.user.update({name:'Cash'},{$unset:{age:50}})    //    age를 삭제한다. 뒤의 값은 상관이 없는것같다.

* 배열 값 삭제

> db.use.update({name:'Sue'},{$pull:{languages:'scala'}});    //    해당 도큐먼트의 배열에서 해당 값만 사라진다.

* 배열 값 추가

> db.use.update({name:'Sue'},{$push:{languages:'scala'}});    //    해당 도큐먼트의 배열에 해당 값이 추가된다.

2. MongoDB 삭제

* Document 삭제

> db.users.remove({name:'Sue'})    //    해당 도큐먼트를 삭제한다.

> db.users.remove({})    //    도큐먼트만 전체 삭제한다.

* Collection 삭제

> db.users.drop()


카테고리

1. 클라우드/빅데이터란 무엇인가?

2. NoSQL의 특징

3. NoSQL 데이터 모델링 기법 살펴보기

4. MongoDB의 기본 개념에 대해 알아보기

5. MongoDB와 Node.js의 동작방식 배우기


1. 클라우드/빅데이터란 무엇인가?

1. 클라우드 개념

: 물리적인 서버를 논리적인 서버로 추상화하나 개념

: 클라우드 컴퓨팅

: 인터넷 기반 컴퓨팅 기술

: 개인 단말기는 입/출력에만 사용하고, 정보관리 등 작업등은 클라우드 컴퓨터에서 진행

: 장점

: 휴대성, 다양한 기기를 단말기로 사용, 일관성있는 사용자환경, 안정성 등등..

: 단점

: 서버가 공격당하면 개인정보가 유출, 앱설치 제약, 열악한 통신환경에서 이용제약

2. 빅데이터 개요

: 빅데이터 정의

: 그 전에는 분석이 불가능 했지만, IT가 발전하면서 다룰수 있게된 방대한 양의 데이터

: 아이폰 즉, 스마트 폰을 기점으로 트래픽 량이 폭발적으로 증가함에 따라 데이터의 규모가 증가하였다.

: 빅데이터 특징

: 데이터의 양, 생성속도, 다양성

: 정형적인 데이터가 아니라, 비정형적인 자료임.

: 비정형데이터, 문자, 영상, 위칯 데이터 등등...

: 클라우드 컴퓨터 사용

: 오픈소스 무료 소프트웨어, 텍스트마이닝, 감성분석 등등... 

3. 빅데이터 활용사례

: ZARA의 SCA(Supply Chain Analytics)

: 미국 국세청

: 구글의 독감동향서비스, 번역기 등등...

: 서울시 심야버스

<T아카데미 "NoSQL 온라인 강의" 필기 내용입니다.>


2. NoSQL의 특징

1. NoSQL 특징

: 등장배경

기존

: 기업 업무를 자동화하고 효율화 하는 목적

: 데이터양의 한계

NoSQL등장

: 대규모 데이터를 생산

: 기존 기업 데이터에 비해 단순한 형태를 지님

: 복잡성이 높은 데이터에서 대량의 단순한 데이터가 생산됨

: 새로운 저장 기술이 필요해짐

: 구글과, 아마존에 의해 Bingtable,, Dynamo라는 논문이 발표

: 이후 RDBMS 시장에 NoSQL이 등장하게됨

: 특징

: NoSQL(Not Only SQL)으로 RDBMS의 단점을 보완해준다.

: RDBMS가 데이터의 관계를 Foreign Key 등으로 정의하고 Join 등 관계형 연상르 하지만 NoSQL은 관계를 정의하지 않음.

: 대용량 데이터 저장을 한다.

: 분산형 구조를 통해 여러대의 서버에 분산하여 저장하고 상호복제하여 데이터 유실이나 서비스 중지에 대비함.

: 스키마가 유동적임

: mandatory 필드로 지정하면 ID부분만 타입이 동일하고 다른 칼럼은 데이터 형태가 동일하지 않아도 괜찮다.

: CAP(일관성, 가용성, 부분결함용인) 이론을 따름. (Database에서도 다루었음.)

2. NoSQL종류

* Key/Value Store

: 대부분의 NoSQL은 Key/Value 개념을 지원

: Unique Key하나에 Value를 지님

: Redis가 대표적인 솔루션임

* Ordered Key/Value Store

: 데이터가 내부적으로 Key를 순서로 Sorting되어 저장됨

: Hbase, Cassandra가 대표적인 솔루션

* Document Key/Value Store

: Key/Value Stroe의 확장된 형태

: Value타입으로 Document라는 구조화된 데이터 타입을 사용 (JSON, XML, YAML) 등등

: 복잡한 데이터 구조 사용가능

* 인기도

: MongoDB, Cassandra, Hbase, Redis 순임.

3. NoSQL 장점/단점

* Relational modeling

: 데이터 모델 정의후, 어플리케이션에 맞는 쿼리 개발

* NoSQL Data Modeling

: 어플리케이션에 필요한 쿼리와 성능을 정의한 후, 요구사항에 부합하게 데이터 모델을 구성

: RDBMS보다 더 깊은 데이터구조 및 접근 알고리즘에 대한 이해가 필요

: NoSQL쿼리가 실제 몇개의 물리 노드에 걸쳐서 수행되는지에 대한 이해가 있어야 제대로된 쿼리 디자인이 가능

: DB와 어플리케이션 뿐만아니라 인프라(네트워크, 디스크)에 대한 디자인을 함께해야함

: 인증이나 인가체계가 없어서 보안이 매우 취약하기 때문에 별도의 보안체계를 마련해야함(방화벽이나 Reverse Proxy등)

* RDBMS 장점

: 범용적 고성능

: 대부분의 경우 가장 안정적

: 데이터의 일관성(트랜잭션)

: 정규화, 중복의 삭제

: 복잡한 쿼리도 가능(join)

: 성숙된 기술

* RDBMS 단점

: 대량의 데이터 입력을 처리하기 어려움

: 테이블의 인덱스 생성이나 스키마 변경시 리스크가 크다

: 개발/운영시 컬럼을 확정시키기 어려운경우 사용하기 힘들다

* NoSQL 장점

: 특정용도로 특화되어 있음

: 데이터 분산에 용이

: join연산은 대부분 불가능

: 데이터에 대한 캐시가 필요한 경우

: 배열 형식의 데이터를 고속으로 처리할 경우

* NoSQL 단점

: 각 솔루션의 특징을 이해해야함

: 아직 새로운 기술로 운영 노하우 필요

: 버그가 상대적으로 많음

: 업체마다 NoSQL을 개발하기 때문에 새로운 솔루션이 계속 출시가 됨

<T아카데미 "NoSQL 온라인 강의" 필기 내용입니다.>


3. NoSQL 데이터 모델링 기법 살펴보기

1. NoSQL 데이터 모델링 개념

* Denormalization (비정규화)

: 비정규화 = 데이터 중복 허용

: 쿼리프로세싱을 간단하게 하거나 사용자의 데이터를 특정 데이터 모델에 맞추기 위함.

: 비정규화로 인한 트레이드-오프

: 쿼리 사이즈는 작아지지만, 전체 데이터 사이즈가 증가하는 단점

: 복잡도는 작아지지만, 데이터 사이즈가 증가하는 단점

: 데이터를 많이 가질 수 있기 때문에 단점에 대해서 관대함.

: 데이터를 한곳에 모아 놓기 때문에 쿼리 수행을 위한 I/O 숫자를 줄여 성능을 향상시킨다

: 시스템과 데이터 사이즈가 큰 분산환경에서는 성능이 더 좋다.

* Aggregates(유연한 스키마)

: 유연한 스키마는 복잡하고 다양한 구조의 데이터 클래스를 구성할수있게함.

: JOIN연산을 줄임.(수행시간 단축, 저렴한 비용의 대용량 데이터 지원)

: 복잡한 비즈니스 요소를 담을 수 잇음

* Application Side Joins

: Join 대상 데이터가 N:M의 관계를 가질때

: Join 대상 데이터가 수시로 변동할 때 필요하다.

: RDBMS 상에서 하던가, 어플케이션단으로 데이터를 추출해서 해야한다.

2. 주요 NoSQL 데이터 모델링 기법

* Composite Key

: 하나이상의 필드를 Deliminator(:)를 이용하여 구분지어 사용

: Ordered KV 를 사용하여 그룹핑된 키-벨류를 구성할 수 있음

* Inverted Search Index

: Value의 내용을 Key로 하고, Key의 내용을 반대로 Value로 하는 패턴

: 검색엔진이 주로 사용

* 계층 데이터 구조 모델링 패턴

: 기본적으로 Row,Column을 가지고 있는 테이블 구조의 저장구조를 갖음

: Tree와 같은 계층형 데이터 구조를 저장할 경우에는 쉽지 않음

: RDBMS를 참고하여 NoSQL에서도 구현해놓았음.

* Tree Aggregation

: Tree 구조자체를 하나의 Value에 저장하는 방식

* Materialized Path

: Tree 구조를 테이블에 저장할 때, root부터 현재 노드까지의 전체경로를 Key로 저장하는 방법

: 노력에 비해 효율적인 방식

: 다양한 쿼리가 가능

3. NoSQL 데이터 모델링 예시

* 도메인 모델 파악

: 어떤 데이터 개체가 있는지, 개체간의 관계를 분석

: ERD를 그려 도식화

: RDBMS 모델링 접근 방법이긴하지만, NoSQL에서도 저장할 데이터를 명확하게 이해하기 위해 필수

* 쿼리 결과(데이터 출력 형태) 디자인

: 도메인 모델 기반으로 어플리케이션에서 쿼리가 수행되는 결과값을 먼저 정함

: 출력형식을 기반으로 필요한 쿼리 정의

: 테이블 추출

* 패턴을 이용한 데이터 모델링

: Sorting, Grouping, join이 안되기 때문에, get, put으로만 해결할 수 있도록 수정

* 기능 최적화

: 분류에 따른 포스팅 출력

* NoSQL 선정 및 테스트

: 모델링한 데이터 구조를 효과적으로 실행할 수 있는 NoSQL검토

: NoSQL 특성 분석 및 부하테스트, 안정성/확장성 테스트 수행

: 경우에 따라서는 여러개의 NoSQL을 복함하여 사용거나 RDBMS와 혼용하는 것이 좋음.

* 선정된 NoSQL에 최적화 및 하드웨어 디자인

: 선정된 NoSQL에 맞는 데이터 구조화

: 해당 NoSQL에 맞는 어플리케이션 인터페이스 설계

: 구동시킬 하드웨어 디자인 

* 결론

: NoSQL 시스템 개발시, 데이터 모델리이 80%이상 차지함

<T아카데미 "NoSQL 온라인 강의" 필기 내용입니다.>


4. MongoDB의 기본 개념에 대해 알아보기

1. MongoDB 특징

: 10gen 사에서 개발한 솔루션(C++)

: 범용적이고 스키마를 고정하지 않는다.(json)(key-value)

: join이 불가능하기 때문에 join이 필요없도록 데이터 구조화 필요

: 메모리 맵 형태의 파일 엔진 DB이기 때문에 메모리에 의존적

: 메모리 크기가 성능을 좌우

: 쌓아놓고 삭제가 없는 경우가 적함

: 로그데이터, 이벤트 참여내역, 세션

: 트랜잭션이 필요한 금융, 결제, 빌링, 회원정보등에는 부적합(RDBMS필요)

* 도큐먼트 데이터 모델

: Key-Value

: 문자열이나 숫자, 날짜 가능

: 배열 또는 다른 도큐먼트를 지정도 가능

: one query로 모두 해결할 수 있도록 collection model 설계를 해야함.

: 하나의 document에 필요한 모든 정보를 담아 join이 필요없도록 해야한다.

* JSON

: JavaScript Object Notation

: Lightweight data 교환방식

: 사람이 읽고쓰기쉽고, 기계가 파싱하고 생성하기 좋음

: Javascript의 Array문법

: 클라이언트에서 처리 퍼포먼스가 높음

: 송수신시 XML보다 빠르고 간편하며 XML이 표현하는 것을 모두 표현할 수 있다.

* JSON 표기법

: 각 객체는 {} 로 시작하고 끝남

: 각 멤버는 콤마(,)로구분

: 값은 object, string, number, array, true, false, null 사용가능

: 문자의 경우 따움표, 숫자의 경우 필요없음

2. MongoDB 장/단점

* MongoDB 장점

: Schema-less 구조 - 다양한 형태 데이터 저장, 유연한 변화 가능

: Read/Write 성능이 좋음

: Scale out 구조, JSON 구조

* MongoDB 단점

: 데이터 업데이트 중 장애 발생 시, 데이터 손실 가능성

: 충분한 메모리 확보 필요, 데이터 공간소모 많음.

* 빅 데이터 처리 특화

: Memory Mapped 사용 - 메모리가 커야함

: 데이터의 양이 많을 경우 손실가능성 존재

: 샤딩, 레플리카 프로세스의 비정상 동작 가능성

* MongoDB vs MySQL

: CRUD의 결과는 대부분 MongoDB가 빠름

: MongoDB를 사용할 때 Single Node와 Multi Node 간 성능차이가 거이 없다고함.

3. MongoDB 주요기능

* MongoDB Query

- CREATE : db.person.save({'name':'john'});

- READ : db.person.find();

- UPDATE : db.users.update({name:'johnny'},{name:'Cash',languages:['english']});

- DELETE : db.users.remove({name:'Sue'});

: JSON 형태로 입출력해야함.

* MongoDB 인덱스

: 다수 인덱스 설정가능

: 복합 인덱스 지원, 빠른검색지원

: 메모리가 부족한 시스템에서 검색속도 저하

* MongoDB 복제

: Master-Slave 구조 구성

: 데이터 복사본을 Slave에 배치

: Master 장애에 따른 데이터 손실 없이 Slave 데이터 사용가능

* MongoDB 샤딩

: 대용량의 데이터를 저장하기 위한 방법

: 소프트웨어 적으로 데이터 베이스를 분산시켜 처리하는 구조

: 샤딩방식

: 데이터 베이스가 저장하고 있는 테이블을 테이블 단위로 분리하는 방법

: 분산 데이터베이스의 전통적인 분할 3계층 구조 지원

: 응용계층, 중개자 계층, 데이터 계층

* MongoDB 맵리듀스

: 대용량의 데이터를 안전하고 빠르게 처리하기 위한 방법

: 데이터를 분산하여 연산하고 다시 합치는 기술

: 맵과 리듀스 단계로 나뉘며 사용자가 임의 코딩 가능

: 한대 이상의 하드웨어를 활용하는 분산프로그래밍 모델

: 대용량 파일에 대한 로그분석, 색인 구축 검색 등에 활용

: 일괄처리 방식으로 전체 데이터 셋을 분석할 필요가 있는 문제에 적합

<T아카데미 "NoSQL 온라인 강의" 필기 내용입니다.>


5. MongoDB와 Node.js의 동작방식 배우기

1. MongoDB 기본동작 원리

* MongoDB 구성

: 수평적 확장, 한대 이상의 서버로 구성, 독립된 서버에서 실행 권장

: mongod라는 실행파일 단위로 실행, 보통 3개의 Replica단위로 구성하여 데이터 복제

: mongos 서버를 통해 한대의 데이터베이스 서버처럼 사용가능

2. MongoDB 실행/종료

* MongoDB 설치

: 4개의 운영체제 지원(대부분의 유저가 리눅스 사용 90%)

: 비용이 적기 때문

: MongoDB의 철학 '메모리 관리는 운영체제에 맡기자'

: 상대적으로 메모리 관리에 뛰어난 unix베이스의 운영체제 선택

: 교육은 윈도우가 편함

: 지원언어

: Java / Java Script

: Perl / Php / Python

: Ruby / Scala / Erlang / Haskell

* 리눅스의 경우

sudo apt-cache search mongodb

  mongodb 검색 후

 sudo apt-get install mongodb

 mongo db 설치

* MongoDB 실행

mongod - dbpath 경로

 MongoDB 경로 지정하여 서버 실행

: mongod : MongoDB의 서버프로그램(Daemon의 약자 d)

 mongo

MongoDB Shell 실행 - 기본 27017포트에서 서버가 돌고있음


* MongoDB 서비스로 돌리기 (윈도우)

 mongod -config c:\mongodb\mongodb.conf-install

 c:\mongodb\mongodb.conf 파일을 미리 만들어둔다. 안의 내용은 검색해보자. 

* 종료

 user admin

db선택 

 db.shutdownServer() 

db 종료 

3. Node.js 개요

: 손쉽고 간단하게 HTTP 처리와 URL처리가 가능

: MongoDB 입출력시 JSON 처리 용이, 찰떡궁합임.

: 구글 크롬웹브라우저에서 사용하는 자바스크립트엔진(V8)을 사용하여 앱을 구축할수있게 해주는 프레임 워크

* Event-driven

: 사용자 또는 외부환경이 만들어낸 사건을 기반으로 어떤 처리를 할지 지정해주는 개발방식

* Non-Blocking

: Blocking I/O 

: 쓰기/읽기 이벤트가 발생시 해당 모듈을 이벤트가 끝날때까지 점유

: 메모리 낭비도 심함

: Non-Blocking I/O

: 쓰기/읽기 이벤트가 시작되어도 모듈을 반환

: 다른 작업이 가능한 준비상태로 전환

: 동기식보다 빠르고 메모리도 적게 차지

<T아카데미 "NoSQL 온라인 강의" 필기 내용입니다.>


<T아카데미 "NoSQL 온라인 강의" 필기 내용입니다.>


'프로그래밍 > NoSQL - MongoDB' 카테고리의 다른 글

mongoDB 리플리카 셋으로 장애 대응방법 배우기  (0) 2017.04.04
MongoDB를 이용한 복제 방법 살펴보기  (0) 2017.04.04
MongoDB 샤딩  (1) 2017.04.03
MongoDB Index기능  (0) 2017.04.03
MongoDB 명령어  (0) 2017.04.03

+ Recent posts