[몽고DB] 몽고DB 소개

김상현·2023년 8월 12일
0

몽고DB

목록 보기
1/1
post-thumbnail

손쉬운 사용

몽고DB는 도큐먼트 지향 데이터베이스(Document Oriented Database)다. 도큐먼트 지향 데이터베이스는 내장 도큐먼트와 배열을 허용함으로써 복잡한 계층 관계(Hierarchical Relationship)를 하나의 레코드로 표현할 수 있다. 이 방식은 최신 객체 지향 언어를 사용하는 개발 관점에 매우 적합하다.

{
	"_id": ObjectId("123abs21423asv141qw1"),
    "language": ["java", "C", "GO", "python"],
    "address": {
    	"city": "SUWON",
        "zip": "12345",
        "street": "HWASEONG"
    }
}

몽고DB는 고정된 스키마(자료를 저장하는 구조와 표현법을 정의한 것)가 없으므로 필요할 때마다 쉽게 필드를 추가하거나 제거할 수 있다. 개발 과정을 빠르게 반복할 수 있고 모델을 실험해 보기도 쉽기 때문에 개발자는 다양한 데이터 모델을 시도해본 후 최선의 모델을 선택할 수 있다.

확장 가능한 설계

저장할 데이터가 증가함에 따라 개발자는 데이터베이스 확장에 대한 의사 결정을 해야 하는 상황에 직면하게 된다. 크고 좋은 장비로 성능을 확장(scale up)할지, 여러 장비에 데이터를 나눠 분산 확장(scale out)할지 결정해야 한다. 성능 확장(scale up)이 관리 측면에서는 수월하지만 고성능 장비는 가격이 비싸고 결국에는 더는 확장할 수 없는 물리적 한계에 부딪히고 만다. 반면 분산 확장(scale out)은 서버를 구매해서 클러스터에 추가하는 방법이기 때문에 경제적이고 확장이 용이하지만, 수천 대의 장비를 운영해야 하기 때문에 관리 측면에서는 어려움이 발생할 수 있다.

몽고DB는 분산 확장을 염두에 두고 설계됐다. 도큐먼트 지향 데이터 모델은 데이터를 여러 서버에 더 쉽게 분산하게 해준다. 도큐먼트를 자동으로 재분배하고 사용자 요청을 올바른 장비에 라우팅함으로써 클러스터 내 데이터 양과 부하를 조절할 수 있다.

다양한 기능

인덱싱

몽고DB는 고유(unique), 복합(compound), 공간 정보(geospatial), 전문(full text) 인덱싱 기능을 제공한다. 중첩된 도큐먼트, 배열과 같은 계층 구조의 보조 인덱스도 지원한다.

집계

몽고DB는 데이터 처리 파이프라인 개념을 기반으로 한 집계 프레임워크를 제공한다. 집계 파이프라인(aggregation pipeline)은 데이터베이스 최적화를 최대한 활용해, 서버 측에서 비교적 간단한 일련의 단계로 데이터를 처리함으로써 복잡한 분석 엔진을 구축하게 해준다.

특수한 컬렉션 유형

몽고DB는 로그와 같은 최신 데이터를 유지하고자 세션이나 고정 크기 컬렉션과 같이 특정 시간에 만료해야 하는 데이터에 대해 유효시간(TTL) 컬렉션을 지원한다. 도큐먼트에 한정된 부분 인덱스를 지원함으로써 효율성을 높이고 필요한 저장 공간을 줄인다.

파일 스토리지

몽고DB는 큰 파일과 파일 메타데이터를 편리하게 저장하는 프로토콜을 지원한다.

고성능

몽고DB에서는 동시성(concurrency)과 처리량을 극대화하기 위해 와이어드타이거(Wired Tiger) 스토리지 엔진(Storage Engine)에 기회적 락(opportunistic locking)을 사용했다. 따라서 캐시처럼 제한된 용량의 램으로 쿼리에 알맞은 인덱스를 자동으로 선택할 수 있다.

몽고DB는 관계형 시스템의 많은 기능을 포함하지만 전부를 채택하지는 않는다. 일부 기능의 경우 데이터베이스 서버는 처리와 로직을 클라이언트 측에 오프로드한다. 이러한 간소한 설계 덕분에 몽고DB는 뛰어난 성능을 발휘한다.

profile
목적 있는 글쓰기

0개의 댓글