
데이터는 사실이나 값의 집합으로, 데이터베이스에 저장되는 기본 단위입니다. 예를 들어, 이름, 나이, 주소 같은 정보가 데이터에 해당합니다.
데이터베이스를 관리하고 운영하는 소프트웨어이다. DBMS는 데이터를 저장, 수정, 삭제, 검색하는 데 필요한 인터페이스를 제공한다.
MySQL, PostgreSQL, Oracle DB, MongoDB, SQL Server 등.관계형 데이터베이스에서는 데이터를 표 형태로 저장하며, 각 표는 행(Row)과 열(Column)로 구성된다.
데이터베이스에 데이터를 요청하거나 조작할 때 사용하는 명령어이다. SQL(Structured Query Language)은 관계형 데이터베이스에서 주로 사용하는 쿼리 언어이다.
데이터베이스에서 여러 작업을 하나의 논리적 단위로 묶은 것이다. 트랜잭션은 ACID 속성을 만족해야 합니다.
ACID
Atomicity(원자성): 트랜잭션의 모든 작업이 성공하거나 실패해야 함.
Consistency(일관성): 데이터베이스의 일관성을 유지해야 함.
Isolation(독립성): 동시에 실행되는 트랜잭션이 서로 영향을 주지 않아야 함.
Durability(지속성): 트랜잭션이 완료된 후 데이터가 영구적으로 저장되어야 함.
데이터를 표 형태로 저장하며, 관계(relationship)를 기반으로 데이터를 관리한다.
예: MySQL, PostgreSQL, Oracle, SQL Server
장점: 데이터 무결성과 복잡한 쿼리 지원
단점: 대규모 데이터 처리에서 속도가 느릴 수 있음.
데이터를 테이블 대신 키-값, 문서, 그래프 등 다양한 방식으로 저장한다.
예: MongoDB, Redis, Cassandra, Neo4j
장점: 유연한 데이터 모델, 대규모 분산 시스템 지원
단점: 관계형 데이터 관리가 필요한 경우 비효율적일 수 있음.
데이터를 키와 값 쌍으로 저장한다.
예: Redis, DynamoDB
사용 사례: 캐싱, 세션 관리
데이터를 노드(Node)와 엣지(Edge)로 구성된 그래프 구조로 저장한다.
예: Neo4j, Amazon Neptune
사용 사례: 소셜 네트워크, 추천 시스템
시간 기반 데이터를 효율적으로 저장하고 분석한다.
예: InfluxDB, TimescaleDB
사용 사례: IoT 데이터, 서버 로그
MongoDB는 NoSQL 기반의 문서 지향 데이터베이스 관리 시스템(DBMS)으로, 데이터를 유연하고 확장성 있게 관리할 수 있도록 설계된 비관계형 데이터베이스이다. MongoDB는 JSON과 유사한 BSON(Binary JSON) 형식으로 데이터를 저장하며, 스키마리스(Schemaless) 구조를 지원한다.
스키마리스(Schemaless)
MongoDB는 정해진 스키마가 없어, 각 문서가 다른 필드를 가질 수 있다.
동적인 데이터 구조를 지원하여 개발 속도가 빨라지고 데이터 모델링이 유연하다.
BSON (Binary JSON) 은 MongoDB에서 사용하기 위해 JSON을 확장한 바이너리 형식이다.
JSON과의 차이는 다음과 같다.
| 특징 | JSON | BSON |
|---|---|---|
| 포맷 | 텍스트 기반 | 바이너리 기반 |
| 크기 | 사람이 읽기 쉬운 텍스트로 크기가 큼 | 바이너리로 압축되어 크기가 작음 |
| 데이터 타입 지원 | 문자열, 숫자, 배열, 객체, 불리언, null 등 기본 타입 지원 | JSON 타입 + 날짜(Date), 정수(Int32/Int64), 이진 데이터(Binary) 등 |
| 읽기/쓰기 성능 | 느림 (텍스트 기반 파싱 필요) | 빠름 (바이너리 파싱) |
| 가독성 | 사람이 쉽게 읽고 쓸 수 있음 | 사람이 읽기 어려움 |
| 인덱싱 | 제공하지 않음 | 내부에서 인덱싱 최적화 지원 |
| 사용 용도 | REST API, 데이터 교환 등 | MongoDB 내부에서 데이터 저장 및 전송 |
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 컬렉션이 자동으로 생성된다.
| 연산자 | 설명 | 예제 | 비고 |
|---|---|---|---|
$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] } } | 배열 제외 조건 |