← 홈페이지 5강 목록으로
🍃
EPISODE 06
Atlas · Mongoose · Schema/Model · CRUD

MongoDB 기초

NoSQL의 대표 MongoDB의 문서·컬렉션 개념, Atlas 무료 클러스터 생성, Mongoose로 Node에서 연결, Schema/Model 정의와 CRUD를 익힙니다.

MongoDBMongooseNoSQLAtlas
소요 시간
60분
난이도
📊 중급
선수 조건
🎯 db-05
결과물
Atlas에 연결된 메모 CRUD API

이 강의에서 배우는 것

  • 1Database/Collection/Document/Field 개념을 안다
  • 2MongoDB Atlas 무료 클러스터를 생성하고 접속 URL을 얻는다
  • 3Mongoose로 연결, Schema/Model을 정의한다
  • 4create/find/findById/findByIdAndUpdate/findByIdAndDelete를 사용한다
  • 5MongoDB와 RDB 중 적합한 상황을 판단한다

1. NoSQL — 문서/컬렉션

SQLMongoDB설명
데이터베이스Database같음
테이블Collection문서의 묶음
행(Row)Document하나의 데이터
열(Column)Field데이터의 속성
기본키(PK)_id자동 ObjectId
json
{
  "_id": "64a7c8e3f9b12345678abcde",
  "title": "오늘 할 일",
  "content": "MongoDB 공부하기",
  "tags": ["공부", "개발"],
  "author": { "name": "김철수", "email": "kim@example.com" },
  "createdAt": "2024-03-15T10:00:00.000Z"
}

관련 데이터를 문서 안에 중첩(embed) 가능 → JOIN 없이 하나의 쿼리로 조회.

2. MongoDB Atlas 무료 클러스터

  1. https://www.mongodb.com/atlas 접속 → 회원가입
  2. Build a Database → Free (M0) 선택
  3. AWS / Seoul (ap-northeast-2)
  4. Create
  5. Database Access — 사용자 추가 (비밀번호 기록!)
  6. Network Access — Allow Access from Anywhere
  7. Connect → Connection String 복사
text
mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/myDB?retryWrites=true&w=majority

3. Mongoose 연결

bash
npm install mongoose express dotenv
text
# .env
MONGODB_URI=mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/myDB
javascript
const mongoose = require('mongoose');

mongoose.connect(process.env.MONGODB_URI)
    .then(() => console.log('MongoDB 연결 성공'))
    .catch((err) => console.error('연결 실패:', err));

4. Schema / Model

javascript
const mongoose = require('mongoose');

const memoSchema = new mongoose.Schema(
    {
        title:    { type: String, required: true },
        content:  { type: String, required: true },
        tags:     [String],
        isPublic: { type: Boolean, default: false },
    },
    { timestamps: true }   // createdAt, updatedAt 자동
);

// 컬렉션명은 자동으로 소문자 복수형 (Memo → memos)
const Memo = mongoose.model('Memo', memoSchema);
module.exports = Memo;

5. CRUD

Create

javascript
// new + save
const memo = new Memo({ title: '제목', content: '내용', tags: ['공부'] });
await memo.save();

// create (권장)
const memo = await Memo.create({ title: '제목', content: '내용' });

Read

javascript
const memos = await Memo.find();
const memos = await Memo.find({ tags: '공부' });
const memos = await Memo.find().sort({ createdAt: -1 }).limit(10);
const memo = await Memo.findById('64a7c8e3f9b12345678abcde');
const memo = await Memo.findOne({ title: '오늘 할 일' });

Update

javascript
const updated = await Memo.findByIdAndUpdate(
    id,
    { title: '새 제목' },
    { new: true }   // 수정 후 문서 반환
);

Delete

javascript
await Memo.findByIdAndDelete(id);

6. 언제 MongoDB?

MongoDB 유리

  • 데이터 구조가 자주 바뀌는 프로젝트
  • 문서 안에 배열/중첩 객체가 많은 경우 (태그, 댓글 배열)
  • 대용량 비정형 데이터 (로그, 이벤트)
  • 빠른 수평 확장이 필요한 경우

RDB 유리

  • 데이터 간 복잡한 관계가 많은 경우
  • 금융/결제 등 트랜잭션 무결성 중요
  • 정해진 스키마로 데이터 일관성 중요
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗