MongoDB...?

유웅조·2020년 1월 13일
0

굉장히 유명한, 대표적인 NoSQL 중에 하나이다. 짧은 시간에 개발할 떄, 정말 유용하게 쓰일 수 있다.

NoSQL...? NoSQL은 무슨 약자일까. Not Only SQL이라는 의미이다. 빅데이터 시대로 넘어가면서 데이터의 형태가 단순해지는데 반해 데이터의 규모는 어마어마한 크기가 되어 가고 있다. 이러한 데이터의 홍수 속에서 RDBS 방식은 한계를 가질 수 밖에 없게되는데 이때 등장한 것이 바로 NoSQL이다.

관계형 데이터베이스가 데이터 사이의 관계를 긴밀히 연결시키는데 그 중심이 있다면, NoSQL은 단순히 SQL을 활용하는 형태가 아닌 다른 방식의 저장 기술을 이야기한다.

MongoDB는 문서 지향 데이터베이스로서 RDBS의 행 개념보다 문서의 개념에 더 가깝다. 때문에 매우 유연하고 확장성이 높은데, 내장 문서와 배열 같은 표현이 가능해서 복잡한 객체의 계층 관계를 하나의 열로 표현할 수 있다.

MongoDB의 특징 중 가장 유명한 것은 스키마가 없다는 것이다. 이것은 필요할 때마다 필드를 추가하거나 제거하는 것이 매우 쉽다는 것을 의미한다. 따라서 개발 과정이 매우 단순하고 빠른 속도를 내는 것이 가능하다.

MongoDB는 Scale Out에 최적화되어 있다. 예를 들어, 많은 양의 로그가 쌓인다면 DB가 알아서 문서를 재분배하고 라우팅까지 완벽하게 처리한다.

MongoDB는 범용 데이터베이스 목적으로 만들어졌다. 그렇기 때문에 CRUD의 작업 외에도 다양한 기능을 제공한다. 다음은 MongoDB가 제공하는 기능 중 일부이다.

  • Indexing
  • Aggregation
  • 특수한 Collection 유형 (TIL, 고정 크기 Collection)
  • 파일 저장소의 지원

MongoDB는 Transaction과 Join을 제공하지 않는다. RDBS에서는 당연하게 지원하는 Transaction과 Join이 없다. 해당 기능을 제공하는데 많은 비용이 들기 때문에 MongoDB는 분산 시스템을 위해 이를 포기했다.

MongoDB는 쓰기와 읽기에서 기존의 RDB보다 훨씬 높은 성능을 발휘한다. 위의 서술과 마찬가지로 고비용의 제약 조건들을 제공하지 않기 때문인데, 사실 이 부분은 개발자에게 고스란히 맡겨지기 때문에 실제 서비스에 적용하려면 상당히 많은 공이 필요하다.

MongoDB는 문서이다. 다시말해, 키: 값 이라기보다는 (키: 값)이라고 보는 것이 더 맞다. 그러니까 문서 자체가 하나의 행이 된다는 것이다.

문서들이 저장되는 단위는 Collection이다. RDB로 예를 들자면, 일종의 테이블과 같은 것이라고 볼 수 있다. 차이점이라면 스키마가 없다는 것. 하지만 사실 스키마가 있긴 있을 뿐더러 스키마를 제대로 구별해두지 않으면 후에 조작하기가 거의 불가능하다. 다시 말해, RDB처럼 강제되지 않는 선에서 스키마를 통해 데이터를 저장할 수 있다는 의미이다.

Aggretation...?
기존의 find 만으로는 원하는대로 데이터를 가공하기 어려울 수 있다. 빅데이터를 다루려면 새로운 데이터 가공 방식이 필요하다. MongoDB의 Aggregation을 사용하면 grouping, filtering 등 다양한 연산을 쉽게 적용할 수 있다.

Aggregation은 Sharding 기반의 데이터를 효율적으로 처리하고 집계하는 Framework이다. Shard를 통해 BigData를 저장하고 Aggregation Framework를 통해 Big Data를 처리한다. Unix의 pipe와 같은 방식으로 데이터를 처리한다. Documents를 여러 단계의 pipe line으로 처리해서 데이터를 처리/집계한다.

Sharding
Sharding 기반의 데이터란 무엇일까. Sharding(샤딩)이란 우선 "조각내다"라는 뜻으로 데이터베이스 저장 기법 중 하나이다. 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법을 의미한다.

Sharding을 사용하게 되면 프로그래밍, 운영적인 복잡도는 더 높아질 수 있다. 그렇기 때문에 Sharding을 피하거나 지연시킬 수 있는 방법을 우선적으로 찾아 적용해야 한다.

Sharding에 앞서 우선 Scale-in / Cache, Replication / Vertical Partition, Hot, Warm, Cold 로 분류하는 방법을 고루 생각해보아야 한다.

Scale-in은 컴퓨터의 Hardware Spec을 더 좋게 업그레이드하는 것을 말한다.
Cache나 Replication은 Read의 부하가 커질 때 사용할 수 있는 방법인데, 먼저 Cache는 DB나 API 호출 또는 페이지 렌더링 등으로부터 받아오는 결과 데이터를 메모리에 저장하는 방식을 말한다. 대표적으로 사용되는 것 중의 하나가 Redis이다. Redis는 메모리를 사용하고, Key - Value 사용하기 때문에 단순한 데이터의 입출력에 매우 용이하며, 데이터베이스 캐싱에 굉장히 적합하다.
이어서 Data Replication은 일종의 데이터베이스 복제라고 생각하면 편하다. Master DB와 Slave DB로 나누어 동일한 데이터를 저장한다. Master DB에는 데이터의 수정사항을 반영만하고 복사하여 Slave DB에 실제 데이터를 복사한다. 복제하는 방식에는 SQL 문장을 복사하여 진행하는 Statement Based, SQL 명령문에 따라 변경된 Row만을 기록하는 Row Based, 기본적으로 Statement Based를 사용하면서 필요에 따라 Row Based를 사용하는 Mixed 방식이 있다.

0개의 댓글