-
[Database] MongoDB 기본 개념과 용어 정리 - 2업무 자동화/Database 2025. 12. 11. 08:39
1. MongoDB?
- MongoDB는 JSON 스타일의 문서(Document) 를 저장하는
- 문서 지향(Document-Oriented) NoSQL 데이터베이스이다.
주요 키워드
- 문서(Document)
- 컬렉션(Collection)
- BSON (Binary JSON)
- 스키마 유연성
- 수평 확장(샤딩)
2. 핵심 용어 정리
2-1. Database
- MongoDB 서버 안에 여러 개의 Database를 만들 수 있다.
- RDB에서의 “스키마/데이터베이스”와 비슷한 개념
예)
shop_db,log_db,analytics_db등2-2. Collection
- Database 안에 여러 개의 Collection을 둘 수 있다.
- RDB의 테이블(Table) 과 비슷한 위치
- 하나의 컬렉션에는 비슷한 유형의 도큐먼트들이 저장된다.
예)
users,orders,products,logs등2-3. Document
- Collection 안에 저장되는 하나의 레코드
- RDB의 행(row, record) 에 해당하지만,
- 구조는 JSON / BSON 형태로 훨씬 유연하다.
예시 도큐먼트
{ "_id": ObjectId("675fa0e9f1c2b8d4f9d8a001"), "email": "user@example.com", "name": "홍길동", "tags": ["beta-user", "korea"], "profile": { "age": 29, "job": "developer" }, "created_at": "2025-12-08T10:00:00Z" }2-4. Field
- Document 안의 각각의 “키-값” 단위
email,name,tags,profile등이 필드에 해당한다.
2-5. BSON
- MongoDB 내부에서는 JSON이 아니라 BSON(Binary JSON) 이라는 이진 형식으로 저장된다.
- JSON으로 표현하기 어려운 타입(날짜, ObjectId 등)을 효율적으로 저장하기 위한 형식
- 사용자는 대부분 JSON 스타일로 생각해도 무방하다.
2-6. ObjectId
- MongoDB 문서의 기본
_id필드로 자주 사용되는 고유 식별자 타입 - 시간 + 랜덤 정보 등이 조합된 12바이트 값
- 사람 눈에는 24자리 16진 문자열처럼 보인다.
예)
ObjectId("675fa0e9f1c2b8d4f9d8a001")
3. 스키마 유연성 (RDB와의 사고 차이)
3-1. RDB의 스키마
RDB에서는 보통 다음 순서로 진행한다.
- 테이블 구조 설계 (컬럼 이름, 타입, 제약조건)
- 테이블 생성
- 그 구조에 맞게 데이터 입력
테이블에 없는 컬럼을 갑자기 쓰려면?
→ALTER TABLE로 스키마 변경이 필요하다.3-2. MongoDB의 스키마
MongoDB는 스키마를 강제로 요구하지 않는다.
- 같은 컬렉션에
- 어떤 도큐먼트는
profile.age필드가 있고 - 어떤 도큐먼트는
profile.age필드가 없을 수도 있다.
- 어떤 도큐먼트는
- 서비스 초기에 필드를 조금씩 추가·변경하면서 데이터를 쌓을 수 있다.
하지만 실무에서는
완전 무계획 스키마리스로 쓰기보다는,
“어떤 필드는 반드시 있어야 한다”는 규칙을 애플리케이션 레벨에서 관리하거나,
MongoDB의 스키마 검증 기능을 활용해 제한을 추가하는 경우도 많다.
핵심은:
RDB보다 필드 추가/구조 변경이 훨씬 자유롭다는 점이다.
4. 기본 CRUD 흐름
여기서는 MongoDB 셸이나 드라이버 언어에 상관없이, 개념적인 형태로만 본다.
4-1. Create (생성)
// users 컬렉션에 새 도큐먼트 추가 db.users.insertOne({ email: "user@example.com", name: "홍길동", created_at: new Date(), tags: ["beta-user", "korea"] });_id를 지정하지 않으면 MongoDB가 자동으로ObjectId를 생성한다.
4-2. Read (조회)
// email로 한 명 조회 db.users.findOne({ email: "user@example.com" }); // 태그에 "korea" 가 포함된 사용자 목록 조회 db.users.find({ tags: "korea" });findOne: 단일 도큐먼트find: 여러 도큐먼트(커서 형태)
4-3. Update (수정)
// 해당 사용자의 name 필드 수정 db.users.updateOne( { email: "user@example.com" }, { $set: { name: "김길동" } } );$set연산자는 지정한 필드를 수정하거나 새로 추가한다.
4-4. Delete (삭제)
// 한 명 삭제 db.users.deleteOne({ email: "user@example.com" });
5. 인덱스와 조회 성능
5-1. 인덱스 개념
- RDB와 마찬가지로, MongoDB에서도 인덱스가 매우 중요하다.
- 자주 조회에 사용되는 필드에 인덱스를 생성하면 성능 향상이 크다.
예시
db.users.createIndex({ email: 1 }); // 오름차순 인덱스 db.users.createIndex({ created_at: -1 }); // 내림차순 인덱스5-2. 조합 인덱스
- 복합 조건으로 자주 조회되는 경우, 복합 인덱스를 고려한다.
db.users.createIndex({ "profile.age": 1, created_at: -1 });
6. 실무에서 자주 나오는 MongoDB 패턴
6-1. 이벤트/로그 수집
- API 요청/응답 로그
- 사용자 행동 로그(페이지 뷰, 클릭 등)
- IoT 센서 데이터
- 변경이 잦은 스키마, 다양한 타입의 로그에 특히 유리
6-2. 문서/콘텐츠 저장
- 블로그 글, 게시글, 댓글 등
- JSON 기반의 복합 구조를 그대로 도큐먼트에 저장
- 자주 같이 보여지는 정보들을 한 도큐먼트로 묶기 용이
6-3. 사용자 프로필 및 설정
- 각 사용자마다 다른 구조의 속성들을 가질 수 있을 때
- 예: 기능 실험(AB Test) 설정, 추천 관련 속성, 태그 등
7. 정리
- MongoDB는 문서 지향 NoSQL DB 로, JSON 스타일의 데이터 구조를 유연하게 다룰 수 있다.
- 핵심 용어: Database / Collection / Document / Field / BSON / ObjectId
- RDB와 비교했을 때, 스키마 변경과 실험이 훨씬 자유롭고,
로그/이벤트/문서 데이터 등에서 강점을 가진다. - 다음 시리즈에서는 MongoDB와 MariaDB를 설계 관점에서 직접 비교하며,
같은 요구사항을 두 DB에서 어떻게 다르게 풀어내는지 다룬다.
'업무 자동화 > Database' 카테고리의 다른 글
[Database] MongoDB vs MariaDB - 4 (0) 2025.12.17 [Database] MongoDB vs MariaDB, 설계 관점 비교 - 3 (0) 2025.12.15 [Database] RDB vs NoSQL - 1 (0) 2025.12.09 [Database] SQL WHERE 구문 정리: 정의와 활용 예시 (0) 2025.11.18 [Database] SELECT 문 실행 순서 (0) 2025.11.16