프로젝트/mongoDB
-
MongoDB Replication이란?프로젝트/mongoDB 2024. 3. 2. 00:01
개요 공식문서를 기반으로 MongoDB Replication에 대해 알아보는 시간을 가져보고자 합니다. Replication이란? Replication은 복제라는 뜻을 가지며 컴퓨터 과학에서는 데이터 저장과 백업을 하는 방법과 관련이 있습니다. 기존 데이터를 중복으로 여러 개 복제해 둠으로써 단일 데이터베이스의 데이터에 문제가 생기는 상황에 장애 내결함성을 제공합니다. 또한 데이터가 여러군데 복제되어 있으므로 읽기 작업 또한 여러 군데 데이터베이스에서 수행할 수 있습니다. 즉, 읽기 성능이 증가할 수 있습니다. Primary와 Secondary Replication을 수행하면 데이터베이스가 N개가 되며 여기서 하나의 데이터베이스를 Primary 그 외의 것들은 Secondary라고 부릅니다. Primar..
-
MongoDB 인덱스 운영법프로젝트/mongoDB 2024. 2. 22. 00:01
개요 공식문서를 기반으로 MongoDB의 인덱스의 운영법에 대한 알아보는 시간을 가져보고자 합니다. 기존에 존재하는 컬렉션에 인덱스 만들기, 인덱스 사용 측정법, 인덱싱 전략에 대해 정리해보고자 합니다. 기존에 존재하는 컬렉션에 인덱스 만들기 기존에 존재하는 컬렉션에 인덱스를 만들기 위해서는 인덱스가 내부적으로 어떻게 생성되는지 이해해야 Live(Production) 레벨에 나가있는 상용 데이터베이스에 문제가 발생하지 않을 수 있습니다. MongoDB 인덱스는 내부적으로 어떻게 생성될까요? MongoDB 4.2부터 인덱스가 생성되는 처음과 끝에 메타데이터 변경을 보호하기 위해 exclusive lock을 잡는 최적화된 빌드 프로세스를 사용합니다. (빌드 프로세스의 시자과 끝에서만 잠금이 유지되어 효율적이..
-
MongoDB 인덱스란?프로젝트/mongoDB 2024. 2. 15. 00:01
개요 공식문서를 기반으로 MongoDB의 인덱스를 알아보는 시간을 가져보려고 합니다. 인덱스 생성법, 인덱스의 타입, 인덱스의 속성에 대해 정리해보고자 합니다. 인덱스란? 인덱스는 쿼리의 효율적인 실행을 지원합니다. 인덱스가 없을 경우에 쿼리 결과를 반환하기 위해 컬렉션의 모든 문서를 스캔해야 합니다. 하지만 적합한 인덱스가 존재하면 스캔하는 문서의 수를 줄일 수 있습니다. 인덱스는 읽기 작업의 성능을 향상시키지만, 쓰기 작업에는 성능에 부정적인 영향을 미칩니다. 즉, 읽기와 쓰기의 비율을 잘 고려해서 적용해야 합니다. MongoDB의 인덱스는 내부적으로는 B-Tree 데이터 구조를 활용합니다. 기본적으로 지원하는 인덱스 _id 필드에 고유 인덱스를 생성하며 해당 인덱스는 삭제할 수 없습니다. 인덱스 만..
-
Spring Boot + Kotlin + MongoDB로 CRUD 해보기프로젝트/mongoDB 2024. 2. 12. 00:01
개요 Spring Boot + Kotlin + MongoDB를 활용하여 CRUD를 수행해보고자 합니다. 만약 MongoDB에 대해 잘 모르겠다면 "MongoDB란?"이라는 글을 참고하시고 오셔도 좋을 것 같습니다. 실제 코드는 github을 참고해 주세요. 환경 Spring Boot 3.1 JDK 17 MongoDB with Docker Gradle 의존성 추가 implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-data-mongodb") web와 mongodb에 대한 의존성을 추가해 줍니다. docker-compose.yml v..
-
MongoDB 동시성 제어프로젝트/mongoDB 2024. 2. 11. 00:01
개요 RDB에서는 트랜잭션의 격리 수준에 따라서 동시성 제어가 필요했습니다. Lock을 거는방식 혹은 Versoning을 통하여 동시성을 제어했습니다. MongoDB에서는 어떻게 동시성 제어가 일어날까요? Atomicity and Transactions mongoDB의 공식문서인 Atomicity and Transactions 파트를 읽어보았습니다. MongoDB에서는 단일 문서 내에 포함된 여러 문서를 수정하는 경우에도 원자적 연산이 지원된다고 합니다. 다만 updateMany처럼 여러 문서를 수정하는 경우에 각 문서의 수정은 원자적이지만 전체 작업은 원자적이지 않습니다. 여러 문서를 쓰기 작업을 할 때 다른 작업이 끼어들 수 있습니다. Concurrency Control 여러 애플리케이션에서 동시에 ..
-
MongoDB Data Modeling프로젝트/mongoDB 2024. 2. 6. 00:01
개요 SQL에서는 정규화라는 개념이 존재하여 Data Modeling을 수행합니다. Document Database인 MongoDB에서는 Data Modeling을 어떻게 수행할 수 있을까요? Data Modling 데이터 모델링은 업무 수행 시 비즈니스 요구사항 등으로 발생하는 데이터를 효율적으로 데이터베이스에 저장하기 위해 데이터 구조를 설계하는 과정입니다. MongoDB는 유연한 스키마 모델을 가질 수 있습니다. 컬렉션(테이블) 내에 문서가 동일한 필드 집합을 가질 필요가 없습니다. 필드의 데이터 유형은 문서마다 다를 수 있습니다. 어떻게 데이터 모델링을 수행하는가에 따라 데이터 정합성과 성능에 큰 영향을 주게 되므로 데이터 모델링에 대한 이해가 필요합니다. Schema 설계 물론 운영을 하면서 유..
-
MongoDB Aggregation Operations프로젝트/mongoDB 2024. 2. 5. 00:01
개요 "MongoDB 공식문서 Aggregation Operations"의 내용을 정리해보고자 합니다. Aggregation Operation 여러 문서의 값을 group으로 묶거나, group화 된 데이터에 연산을 수행하여 결과를 반환하거나, 데이터를 분석하기 위해 사용되는 연산을 의미합니다. SQL의 group by 등의 집계 함수와 유사한 개념입니다. Aggregation Operation이 등장하기 전에는 Map-Reduce라는 개념이 존재하였지만 MongoDB 5.0부터 deprecated 되었습니다. Aggregation Pipelines Aggregation Operation이 여러개가 파이프라인으로 실행되는 개념입니다. filter를 수행하거나 group으로 묶고 값을 계산하는 절차 등이 ..
-
MongoDB 쿼리로 CRUD 해보기프로젝트/mongoDB 2024. 2. 4. 00:01
개요 MongoDB CRUD Operations 공식문서를 기반으로 MongoDB CRUD를 수행해보고자 합니다. 특별한 설치 없이 수행할 수 있는 mongoplayground를 활용해보겠습니다. CRUD란? Create, Read, Update, Delete의 약어로 문서에 대한 생성, 읽기, 갱신, 삭제를 의미합니다. Create Operation collection에 새로운 document를 생성하거나 삽입할 수 있는 명령어입니다. 만약 collection이 존재하지 않는다면 collection이 생성됩니다. 아쉽게도 playgroud에서는 create operation은 지원하지 않습니다. insertOne 문법 db.collection.insertOne( , { writeConcern: } ) ..