MongoDB Made Easy: 초보자를 위한 NoSQL 가이드 요약
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
데이터베이스
대상자
- 초보자 및 중급 개발자: Node.js 생태계에서 MongoDB와 Mongoose를 사용한 데이터베이스 개발을 배우고자 하는 개발자
- 난이도: 기초 JavaScript 지식 보유자, Node.js 설치 완료자, 터미널 및 코드 편집기 사용 가능자
핵심 요약
- MongoDB는 BSON(Binary JSON) 형식으로 데이터를 저장하며, JSON과 유사한 구문을 사용하지만 성능 최적화를 위해 BSON으로 자동 변환
- CRUD 연산은
insertOne()
,find()
,updateOne()
등의 메서드를 통해 처리되며, Mongoose를 사용해 스키마 설계 및 검증 가능 - 쿼리 연산자(
$eq
,$gt
,$in
등)를 통해 복잡한 조건 검색이 가능하며,updateMany()
로 다중 문서 업데이트 가능
섹션별 세부 요약
1. MongoDB Shell 기본 명령어
show dbs
: 데이터베이스 목록 조회use
: 데이터베이스 전환 또는 생성db.createCollection()
: 컬렉션 생성db.collection.insertOne()
: 단일 문서 삽입db.collection.find()
: 문서 조회,projection
을 통해 필드 필터링 가능
2. BSON과 JSON의 차이점
- BSON은 이진 형식으로 JSON보다 더 많은 데이터 타입(Date, Binary, Decimal128 등) 지원
- 성능: BSON은 JSON보다 빠른 읽기/쓰기 가능
- 데이터 저장: JSON 스타일 문서는 MongoDB에서 자동으로 BSON으로 변환
3. MongoDB의 데이터 구조
- 문서(Document): MongoDB의 기본 데이터 단위, 관계형 DB의 행(Row)에 해당
- 컬렉션(Collection): 문서의 집합, 관계형 DB의 테이블(Table)에 해당
- 필드(Field): JSON 키와 유사, BSON 형식으로 저장
4. CRUD 연산 예시
- 삽입:
insertOne()
또는insertMany()
사용
```javascript
db.users.insertOne({ name: "Bhupesh", age: 25 });
```
- 조회:
find()
또는findOne()
사용, 쿼리 조건($gt
,$lt
등) 추가 가능
```javascript
db.users.find({ age: { $gt: 25 } });
```
- 업데이트:
updateOne()
또는updateMany()
사용,$set
,$inc
등의 연산자 활용
```javascript
db.users.updateOne({ name: "Bhupesh" }, { $set: { age: 26 } });
```
5. 쿼리 연산자 및 조건
- 비교 연산자:
$eq
,$ne
,$gt
,$lt
,$gte
,$lte
- 논리 연산자:
$and
,$or
,$not
,$nor
- 존재 및 타입 검사:
$exists
,$type
- 배열 처리:
$in
,$nin
,$all
,$size
,$elemMatch
6. 중첩 문서 및 업데이트
- 중첩 문서(Embedded Document): 주문, 주소 등 복잡한 구조를 문서 내부에 저장
```javascript
db.users.insertOne({ name: "Bhupesh", address: { street: "123 King St", city: "Toronto" } });
```
- 점 표기법(Dot Notation)으로 중첩 필드에 접근 및 업데이트
```javascript
db.users.updateOne({ name: "Bhupesh" }, { $set: { "address.city": "Vancouver" } });
```
결론
- Mongoose를 사용해 스키마 설계 및 검증을 강화하고, BSON의 성능 특성을 활용한 데이터 저장 방식을 익혀야 함
- 쿼리 연산자를 통해 복잡한 조건 검색이 가능하며,
updateMany()
를 사용해 다중 문서 업데이트 효율성 향상 - MongoDB의 유연성을 활용해 스키마 없는 데이터 모델링을 적용하며, Node.js와 Express.js 통합 시
async/await
패턴을 권장