[JS] MongoDB

hye0n.gyu·2024년 11월 23일

백엔드 환경

목록 보기
6/7
post-thumbnail

⭐ 데이터베이스의 개념

✔ 데이터

데이터는 사실이나 값의 집합으로, 데이터베이스에 저장되는 기본 단위입니다. 예를 들어, 이름, 나이, 주소 같은 정보가 데이터에 해당합니다.

✔ DBMS(Database Management System)

데이터베이스를 관리하고 운영하는 소프트웨어이다. DBMS는 데이터를 저장, 수정, 삭제, 검색하는 데 필요한 인터페이스를 제공한다.

  • 예시: MySQL, PostgreSQL, Oracle DB, MongoDB, SQL Server 등.

✔ 테이블(Table)

관계형 데이터베이스에서는 데이터를 표 형태로 저장하며, 각 표는 행(Row)열(Column)로 구성된다.

✔ 쿼리(Query)

데이터베이스에 데이터를 요청하거나 조작할 때 사용하는 명령어이다. SQL(Structured Query Language)은 관계형 데이터베이스에서 주로 사용하는 쿼리 언어이다.

✔ 트랜잭션(Transaction)

데이터베이스에서 여러 작업을 하나의 논리적 단위로 묶은 것이다. 트랜잭션은 ACID 속성을 만족해야 합니다.

ACID
Atomicity(원자성): 트랜잭션의 모든 작업이 성공하거나 실패해야 함.
Consistency(일관성): 데이터베이스의 일관성을 유지해야 함.
Isolation(독립성): 동시에 실행되는 트랜잭션이 서로 영향을 주지 않아야 함.
Durability(지속성): 트랜잭션이 완료된 후 데이터가 영구적으로 저장되어야 함.



⭐ 데이터베이스의 종류

✔ 관계형 데이터베이스(Relational Database, RDBMS)

데이터를 표 형태로 저장하며, 관계(relationship)를 기반으로 데이터를 관리한다.

예: MySQL, PostgreSQL, Oracle, SQL Server
장점: 데이터 무결성과 복잡한 쿼리 지원
단점: 대규모 데이터 처리에서 속도가 느릴 수 있음.

✔ 비관계형 데이터베이스(NoSQL)

데이터를 테이블 대신 키-값, 문서, 그래프 등 다양한 방식으로 저장한다.

예: MongoDB, Redis, Cassandra, Neo4j
장점: 유연한 데이터 모델, 대규모 분산 시스템 지원
단점: 관계형 데이터 관리가 필요한 경우 비효율적일 수 있음.

✔ 키-값 스토어(Key-Value Store)

데이터를 키와 값 쌍으로 저장한다.

예: Redis, DynamoDB
사용 사례: 캐싱, 세션 관리

✔ 그래프 데이터베이스(Graph Database)

데이터를 노드(Node)와 엣지(Edge)로 구성된 그래프 구조로 저장한다.

예: Neo4j, Amazon Neptune
사용 사례: 소셜 네트워크, 추천 시스템

✔ 타임 시리즈 데이터베이스(Time-Series Database)

시간 기반 데이터를 효율적으로 저장하고 분석한다.

예: InfluxDB, TimescaleDB
사용 사례: IoT 데이터, 서버 로그



⭐ MongoDB

MongoDB는 NoSQL 기반의 문서 지향 데이터베이스 관리 시스템(DBMS)으로, 데이터를 유연하고 확장성 있게 관리할 수 있도록 설계된 비관계형 데이터베이스이다. MongoDB는 JSON과 유사한 BSON(Binary JSON) 형식으로 데이터를 저장하며, 스키마리스(Schemaless) 구조를 지원한다.

스키마리스(Schemaless)
MongoDB는 정해진 스키마가 없어, 각 문서가 다른 필드를 가질 수 있다.
동적인 데이터 구조를 지원하여 개발 속도가 빨라지고 데이터 모델링이 유연하다.

✔ JSON과 BSON의 차이

BSON (Binary JSON) 은 MongoDB에서 사용하기 위해 JSON을 확장한 바이너리 형식이다.
JSON과의 차이는 다음과 같다.

특징JSONBSON
포맷텍스트 기반바이너리 기반
크기사람이 읽기 쉬운 텍스트로 크기가 큼바이너리로 압축되어 크기가 작음
데이터 타입 지원문자열, 숫자, 배열, 객체, 불리언, null 등 기본 타입 지원JSON 타입 + 날짜(Date), 정수(Int32/Int64), 이진 데이터(Binary) 등
읽기/쓰기 성능느림 (텍스트 기반 파싱 필요)빠름 (바이너리 파싱)
가독성사람이 쉽게 읽고 쓸 수 있음사람이 읽기 어려움
인덱싱제공하지 않음내부에서 인덱싱 최적화 지원
사용 용도REST API, 데이터 교환 등MongoDB 내부에서 데이터 저장 및 전송


⭐ MongoDB 기초 명령어 (mongosh)

mongosh
MongoDB의 최신 쉘 인터페이스이다. MongoDB Shell의 줄임말이며, 이전의 mongo 쉘보다 현대적이고 기능이 확장된 대체 도구이다.
mongo 홈페이지에서 mongo와 함께 다운로드하여 사용하면 된다.

나중에는 mongoose를 통해 js파일로 mongoDB를 사용할 예정이다.


✔ 데이터베이스 관련 명령어

현재 데이터베이스 확인

현재 작업 중인 데이터베이스 이름을 반환한다.

db

데이터베이스 선택/생성

해당 데이터베이스를 선택한다.
데이터베이스가 존재하지 않을 경우, 이후 데이터 삽입 시 자동 생성된다.

use <database_name>

데이터베이스 목록 보기

MongoDB 서버에 저장된 모든 데이터베이스 목록을 표시한다.
데이터가 없는 데이터베이스는 표시되지 않는다.

show dbs

데이터베이스 삭제

현재 선택된 데이터베이스를 삭제한다.

db.dropDatabase()

✔ 컬렉션 관련 명령어

컬렉션 생성

지정된 이름의 컬렉션을 생성한다.

db.createCollection("collection_name")

컬렉션 목록 보기

현재 데이터베이스의 컬렉션 목록을 표시한다.

show collections

컬렉션 삭제

특정 컬렉션을 삭제한다.

db.collection_name.drop()

MongoDB 컬렉션 자동 생성
MongoDB는 데이터 삽입 시 컬렉션을 자동 생성한다.
별도로 컬렉션을 미리 생성할 필요가 없으며, 데이터를 첫 번째로 삽입할 때 컬렉션이 생성된다.

  • User 모델을 정의하면, User 모델에 대응하는 컬렉션 이름인 users가 자동으로 생성된다.
  • MongoDB는 컬렉션 이름을 모델 이름의 소문자 복수형으로 자동 지정한다. 즉, User 모델은 users 컬렉션을 가리킨다.
  • 첫 번째 문서가 삽입되면 users 컬렉션이 자동으로 생성된다.


⭐ MongoDB 쿼리 연산자

✔ 비교 연산자

연산자설명예제비고
$eq값이 동일한 문서 검색{ age: { $eq: 25 } }단순 비교
$ne값이 다른 문서 검색{ age: { $ne: 25 } }불일치 조건
$gt값이 큰 문서 검색{ age: { $gt: 25 } }크기 비교
$gte값이 크거나 같은 문서 검색{ age: { $gte: 25 } }이상 조건
$lt값이 작은 문서 검색{ age: { $lt: 25 } }미만 조건
$lte값이 작거나 같은 문서 검색{ age: { $lte: 25 } }이하 조건

✔ 논리 연산자

연산자설명예제비고
$and모든 조건을 만족하는 문서 검색{ $and: [ { age: { $gte: 20 } }, { age: { $lte: 30 } } ] }논리 연산
$or하나라도 만족하는 문서 검색{ $or: [ { age: { $lt: 20 } }, { age: { $gt: 30 } } ] }논리 연산
$not조건을 만족하지 않는 문서 검색{ age: { $not: { $gt: 25 } } }부정 조건
$nor모든 조건을 만족하지 않는 문서 검색{ $nor: [ { age: { $lt: 20 } }, { age: { $gt: 30 } } ] }부정 논리 연산

✔ 요소 연산자

연산자설명예제비고
$exists필드가 존재하거나 존재하지 않는 문서 검색{ age: { $exists: true } }필드 존재 여부
$type특정 데이터 유형을 가진 문서 검색{ age: { $type: "int" } }데이터 타입 확인

✔ 배열 연산자

연산자설명예제비고
$all배열의 모든 요소를 포함한 문서 검색{ tags: { $all: ["tag1", "tag2"] } }배열 내 모든 요소 포함
$elemMatch배열 내 특정 조건을 만족하는 요소 검색{ scores: { $elemMatch: { $gte: 80, $lte: 90 } } }배열 내 조건 검색
$size배열의 길이가 특정 값과 동일한 문서 검색{ tags: { $size: 3 } }배열 크기 확인

✔ 기타 연산자

연산자설명예제비고
$regex정규식을 만족하는 문서 검색{ name: { $regex: "^A", $options: "i" } }정규식 검색
$in배열 중 하나와 일치하는 문서 검색{ age: { $in: [25, 30, 35] } }배열 포함 조건
$nin배열 중 하나와도 일치하지 않는 문서 검색{ age: { $nin: [25, 30, 35] } }배열 제외 조건
profile
반려묘 하루 velog

0개의 댓글