카테고리

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