Database/MongoDB(15)
-
[MongoDB] 백업 및 복구
1. 백업 mongodump는 MongoDB에서 공식적으로 제공되는 유일한 백업 도구이지만 논리적인 수준의 백업만을 실행하는 도구이다. 즉, mongodump는 MongoDB 서버의 데이터 파일을 물리적으로 복사하는 것이 아닌 MongoDB 서버에 로그인한 뒤 Document를 한건 한건씩 덤프해서 BSON 파일로 저장하는 방식이다. 따라서 mongodump는 백업 시간과 복구 시간이 오래 걸린다. mongodump는 긱본적으로 특정 시점의 스냅샷을 덤프하지 않는다. 즉, mongodump를 통해 데이터가 덤프되는 동안 변경되는 데이터에 대해서는 백업이 일관된 상태를 유지하지 못한다. 따라서 mongodump를 이용해서 백업하는 경우에는 --oplog 옵션을 이용하여 mongodump 명령을 실행해야 덤..
2020.12.21 -
[MongoDB] 보안
1. 보안 인증 권한 암호화 감사 데이터 관리 2. 인증 MongoDB 인증은 크게 자체 인증 방식과 외부 인증 방식으로 나눌 수 있다. 외부 인증은 MongoDB 서버 외부의 LDAP나 액티브 디렉토리를 이용해 사용자 인증을 받는 방식을 의미한다. 물론 외부 인증 방식은 별도의 솔루션이 필요하고 장애의 범위가 넓어지기 때문에 자주 사용되지는 않는다. MongoDB의 외부 인증 방식은 엔터프라이즈 버전에서만 제공되며, 사용자 인증이 반드시 필요하다면 Percona에서 배포되는 Percona Server for MongoDB를 이용하여 SASL을 이용한 OpenLDAP 또는 액티브 디렉토리 서비스를 구축할 수 있다. 내부 인증은 Sharding된 Cluster나 레플리카 셋의 각 멤버들끼리의 통신에서 이루..
2020.12.20 -
[MongoDB] 잠금, 트랜잭션
1. 잠금 1) 잠금 MongoDB 서버에서도 멀티 쓰레드의 동시 처리 중에 발생할 수 있는 쓰레드 간의 충돌 문제를 막기 위해서 데이터베이스와 컬렉션 그리고 Document들의 잠금을 사용한다. MongoDB에서도 여러 계층의 데이터베이스 오브젝트들에 대한 동시 처리를 위해서 인텐션 락과 다중 레벨의 잠금을 활용하고 있다. 잠금은 크게 2가지로 나누어 볼 수 있다. 명시적 잠금은 글로벌 잠금뿐이며, 모든 잠금은 묵시적 잠금이다. 데이터베이스와 컬렉션에 대한 잠금(오브젝트 잠금)은 모두 묵시적인 잠금이며, 이는 쿼리가 실행될 때 자동으로 획득됐다가 자동으로 해제되는 잠금이다. 2) 글로벌 잠금 글로벌 잠금은 쿼리나 데이터 변경 명령이 실행되면 묵시적으로 MongoDB 서버에서 잠금을 획득했다가 필요 없는..
2020.12.19 -
[MongoDB] Index
1. Index 1) Index 인덱스는 MongoDB에서 데이터 쿼리를 더욱 효울적으로 사용하는데 필요하다. 만약 인덱스가 없다면 MongoDB는 컬레션의 데이터를 하나하나 조회하는 방식으로 스캔을 하게 되고, Document의 갯수가 많을 수록 속도가 느려진다. 반대로 인덱스를 사용한다면 더 적은 횟수의 조회로 원하는 데이터를 찾을 수 있다. Document의 필드에 인덱스를 설정하면, 데이터의 키 값을 가지고 Document들을 가르키는 포인터값으로 이루어진 B-Tree(Balanced Binary search Tree)로 만든다. B-Tree는 Binary Search를 통해 쿼리 속도를 빠르게 향상 시킬 수 있다. B-Tree의 구조를 간단하게 살펴본다면, 작은 값은 왼쪽에 큰 값은 오른쪽에 위..
2020.12.19 -
[MongoDB] Aggregation Pipeline
1. Aggregation Pipeline 1) Pipeline 파이프라인이란, 이전 단계의 연산결과를 다음 단계 연산에 이용하는 것을 의미한다. 2) Aggregation Framework MongoDB의 Aggregation Framework는 데이터 처리 파이프라인의 개념을 모델로 한다. 문서는 여러 단계의 파이프라인을 거쳐 변화하고 하나의 문서의 형태로 집계할 수 있다. 3) aggregate() aggregate() 메서드는 파이프라인 단계를 배열의 형태로 나타낸다. Document는 파이프라인 배열의 순서대로 가공되며, $out 및 $geoNear를 제외한 모든 단계는 파이프라인에 여러번 나타날 수 있다. 4) $match $match는 조건에 만족하는 Document만 필터링하는데 사용한다...
2020.12.18 -
[MongoDB] Sharding (Shard, Config Server, Mongos)
1. Sharding Shard는 Shard Cluster에서 Shard 데이터의 집합이라고 할 수 있다. 각 Shard에 대한 관리는 Shard에 직접 연결해야 하는데, 단일 Shard에 쿼리 작업을 수행하면 해당 Shard의 데이터만 반환 된다. 만약 클러스터단의 작업을 수행하려면 Mongos에 연결하여 읽기와 쓰기 작업을 해야한다. 기본적으로 Sharding은 2개 이상의 Shard가 필요하다. 2개 이상의 Shard를 이용하기 위해서는 라우터가 필요하다. 라우터는 고가용성과 확장성을 확보할 수 있는데, 일반적으로 각 응용프로그램 서버에 라우터(Mongos)를 배치하여 사용한다. 각 애플리케이션 서버에 Mongos를 배치하면 애플리케이션과 라우터 사이의 대기시간을 줄일 수 있다는 이점이 있다. 다른..
2020.12.18