DB/몽고DB 완벽 가이드 3판 13

[13장] 복제 셋 관리

1. 독립 실행형 모드에서 멤버 시작많은 유지 보수 작업은 쓰기와 관련되어 있어 Secondary에서 수행될 수 없으며, 애플리케이션 성능에 영향을 미치기 때문에 Primary에서 수행하면 안 됨따라서 해당 절에서는 독립 실행형 모드 서버 시작을 자주 언급함이는 멤버가 복제 셋의 멤버가 아닌 독립 실행형 서버로 재시작함을 의미 독립 실행형 모드에서 멤버를 시작하려면 먼저 명령행 인수를 확인해야 하며 인수는 다음과 같다고 가정해당 서버에서 유지보수를 수행하려면 replSet 옵션 없이 서버를 재시작하면 되며 이는 일반적인 독립 실행형 mongod처럼 읽기와 쓰기가 가능하게 해 줌복제 셋에 있는 다른 서버에서 해당 서버와 통신하기를 원치 않으므로 다른 멤버들이 서버를 발견하지 못하도록 서버가 다른 포트로 수..

[12장] 애플리케이션에서 복제 셋 연결

1. 클라이언트-복제 셋 연결 동작몽고DB 드라이버는 서버가 독립 실행형 몽고DB 인스턴스든 복제 셋이든 관계없이 몽고DB 서버와의 통신을 관리하도록 설계됨복제 셋이면 기본적으로 드라이버는 Primary에 연결되고 모든 트래픽을 Primary에 라우팅함애플리케이션은 복제 셋이 조용히 백그라운드에서 대기 상태를 유지하는 동안 마치 독립 실행형 서버와 통신하듯이 읽기와 쓰기를 수행할 수 있음 복제 셋에 대한 연결은 단일 서버에 대한 연결과 비슷함드라이버에 MongoClient를 사용하고, 연결할 드라이버를 위한 시드 목록 (서버 목록)을 제공하면 됨드라이버는 시드에 연결되면 다른 멤버들을 발견하므로 시드 목록에 모든 멤버를 나열할 필요는 없음 "mongodb://server-1:27017, server-2:..

[11장] 복제 셋 구성 요소

1. 동기화몽고DB는 Primary가 수행한 쓰기를 모두 포함하는 로그, 즉 oplog를 보관함으로써 복제를 수행oplog는 Primary의 로컬 데이터베이스에 있는 제한 컬렉션이며, Secondary는 해당 컬렉션에 복제를 위한 연산을 쿼리 각 Secondary는 Primary로부터 복제한 작업을 각각 기록하는 oplog를 보관Secondary는 동기화하는 멤버로부터 연산을 가져와서 데이터셋에 적용한 뒤 자신의 oplog에 씀만약 연산 적용에 실패하면 Secondary는 종료됨Secondary가 어떤 이유로든 다운되면, 재시작할 때 oplog에 있는 마지막 연산과 동기화 수행연산이 데이터에 적용되고 oplog에 쓰이면, Secondary는 이미 데이터에 적용된 연산을 재생할 수 있음, 즉 oplog 연..

[10장] 복제 셋 설정

1. 복제 소개1장부터 지금까지 시작하기 쉽도록 독립 실행형 서버인 단일 mongod 서버를 사용해 왔지만 실제 서비스를 운영하는 데 사용하면 매우 위험한 방식만약 서버가 고장이 나거나 이용 불가능한 상태가 될 경우 적어도 잠시 동안은 DB를 사용할 수 없을 것최악의 경우에는 디스크나 네트워크 문제가 데이터 손상이나 접근 불가 문제를 야기할 것 복제는 데이터의 동일한 복사본을 여러 서버상에서 보관하는 방법이며 실제 서비스를 배포할 때 권장되는 방식한 대 또는 그 이상의 서버에 이상이 발생하더라도, 복제는 애플리케이션이 정상적으로 동작하게 하고 데이터를 안전하게 보존해 줌복제를 사용하는 상태에서 서버가 다운되면, 복제 셋에 있는 다른 서버를 통해 데이터 접근 가능서버상의 데이터가 손상되거나 접근할 수 없는..

[9장] 애플리케이션 설계

1. 스키마 설계 고려 사항데이터 표현의 핵심 요소는 데이터가 도큐먼트에서 표현되는 방식인 스키마의 설계가장 좋은 설계 접근 방식은 애플리케이션에서 원하는 방식으로 데이터를 표현하는 방법이므로 관계형 데이터베이스와 달리, 스키마를 모델링하기 전 먼저 쿼리 및 데이터 접근 패턴에 대한 이해 필요 다음은 스키마를 설계할 때 고려할 주요 요소입니다. 가. 제약 사항도큐먼트의 최대 크기는 16MB이며, 디스크에서 전체 도큐먼트를 읽고 씀갱신은 전체 도큐먼트를 다시 씀원자성 갱신은 도큐먼트 단위로 실행됨 나. 쿼리 및 쓰기의 접근 패턴애플리케이션 및 더 넓은 시스템의 워크로드를 식별하고 정량화해야 함워크로드는 애플리케이션의 읽기와 쓰기를 모두 포함 쿼리가 실행되는 시기와 빈도를 알면 가장 일반적인 쿼리를 식별 가..

[8장] 트랜잭션

1. 트랜잭션 소개트랜잭션은 읽기나 쓰기 작업이 가능한 데이터베이스 작업을 하나 이상 포함하는 데이터베이스의 논리적 단위트랜잭션의 중요한 특징은 작업이 성공하든 실패하든 부분적으로는 완료되지 않는다는 점몽고DB에서 트랜잭션을 사용하려면 버전이 4.2 이상이어야 하며 몽고DB 드라이버를 몽고DB 4.2 이상에 맞게 갱신해야 함 1.1 ACID의 정의트랜잭션이 `진정한` 트랜잭션이 되려면 ACID라는 속성을 충족해야 함ACID는 원자성 (Atomicity), 일관성 (Consistency), 고립성 (Isolation), 그리고 영속성 (Durability)의 약어ACID 트랜잭션은 오류가 발생할 때도 데이터와 데이터베이스의 상태의 유효성을 보장 원자성 (Atomicity)은 트랜잭션 내 모든 작업이 적용되..

[7장] 집계 프레임워크

1. 파이프라인, 단계 및 조정 기능 항목집계 프레임워크는 몽고DB 내 분석 도구 모음으로, 하나 이상의 컬렉션에 있는 도큐먼트에 대한 분석을 수행하게 지원집계 프레임워크는 파이프라인 개념을 기반으로 함집계 파이프라인을 통해 몽고DB 컬렉션에서 입력을 받고, 컬렉션에서 나온 도큐먼트를 하나 이상의 단계를 거쳐 전달하며 단계마다 해당 입력에 다른 작업을 수행함각 단계는 전 단계에서 생산한 출력이 무엇이든 입력으로 받아들임모든 단계의 입력과 출력은 도큐먼트 집계 파이프라인은 bash와 같은 리눅스 셸 파이프라인과 매우 유사한 개념이며, 단계마다 특정 작업을 수행함각 단계는 특정한 형태의 도큐먼트를 입력받고 특정 출력을 생성하는데, 출력은 도큐먼트 스트림파이프라인 끝에서는 find 쿼리와 거의 같은 방식으로 ..

[6장] 특수 인덱스와 컬렉션 유형

1. 공간 정보 인덱스몽고DB는 2dsphere와 2d라는 공간 정보 인덱스를 가짐2dsphere 인덱스는 WGS84 좌표계를 기반으로 지표면을 모델링하는 구면 기하학으로 작동2dsphere 인덱스를 사용하면 지구의 형태를 고려하므로 2d 인덱스를 사용할 때보다 더 정확한 거리 계산을 할 수 있음대신 2차원 평면의 점에는 2d 인덱스를 사용하는 것을 권장 2dsphere를 사용하면 GeoJSON 형식으로 점, 선, 다각형의 기하 구조를 지정할 수 있으며 점은 경도 좌표와 위도 좌표를 요소로 갖는 배열 [경도, 위도]로 표현됨   createIndex와 함께 `2dsphere`를 사용해 공간 정보 인덱스를 생성할 수 있음2dsphere 인덱스를 생성하려면 인덱싱할 도형이 포함된 필드를 지정하는 도큐먼트를 ..

[5장] 인덱싱

1. 인덱싱 소개데이터베이스 인덱스는 책의 인덱스와 유사함전체 내용을 살펴보는 대신 인덱스를 통해 특정 내용을 가리키는 정렬된 리스트를 확인하여 엄청난 양의 명령을 더 빠르게 쿼리 가능 인덱스를 사용하지 않는 쿼리를 컬렉션 스캔이라 하며, 서버가 쿼리 결과를 찾으려면 `전체 내용을 살펴봐야 함`을 의미큰 컬렉션을 스캔할 때는 컬렉션 스캔이 매우 느려지니 이런 방식은 지양해야 함 explain 함수를 이용해 쿼리가 실행될 때 몽고DB가 무엇을 하는지 확인 가능explain은 명령을 감싸는 커서 보조자 메서드와 사용하면 좋음explain 커서 메서드는 다양한 CRUD 작업의 실행 정보를 제공하며 해당 메서드는 여러 가지 verbosity 모드에서 실행 가능executionStats 모드는 인덱스를 이용한 쿼..

[4장] 쿼리

1. find 소개몽고DB에서 find 함수는 쿼리에 사용쿼리는 컬렉션에서 도큐먼트의 subset을 반환find의 첫 매개변수에 따라 어떤 도큐먼트를 가져올지 결정빈 쿼리 도큐먼트({})는 컬렉션 내 모든 것과 일치하며 매개변수에 쿼리 도큐먼트가 없으면 find 함수는 빈 쿼리 도큐먼트 {}로 인식 쿼리 도큐먼트에 여러 key-value 쌍을 추가해 검색을 제한할 수 있음대부분의 데이터형에서 간단히 작동하며 정수형은 정수형에, 불리언형은 불리언형에, 문자열형은 문자열형에 일치함간단한 데이터형은 찾으려는 값만 지정하면 쉽게 쿼리 할 수 있음  1.1 반환 받을 키 지정find 또는 findOne의 두 번째 매개변수에 원하는 키를 지정하면 원하는 key-value 정보만 조회 가능이는 네트워크상의 데이터 전..