오래된 프로그래머의 요즘 이야기

그리고 소소한 일상들...

허니의 소소한 일상들이 켜켜이 쌓여가고......

Tech Story

[SQL] MongoDB 활용

쭝허니 2025. 5. 31. 21:00

SQL 개발자, 이제 MongoDB로 날아오르자!

안녕하세요 여러분! 오늘은 제가 몽고DB(MongoDB)에 대해 샅샅이 파헤쳐 보는 시간을 갖도록 하겠습니다.  SQL 개발자인 저에게도 처음엔 낯설었던 몽고DB였지만,  이제는 그 매력에 푹 빠져버렸죠.  이 글을 통해 몽고DB의 세계로 여러분을 초대하고,  SQL과 비교하며 쉽고 빠르게 이해할 수 있도록 도와드리겠습니다.  자, 함께 떠나볼까요? 🚀

### 1. 몽고DB vs SQL: 기본 개념부터 차근차근

먼저, 몽고DB와 SQL 데이터베이스의 가장 큰 차이점을 간략하게 비교해보겠습니다.  SQL은 관계형 데이터베이스(RDBMS)이고,  몽고DB는 NoSQL 데이터베이스 중 하나인 문서형 데이터베이스입니다.  이게 무슨 말이냐구요? 🤔

* **SQL (관계형 데이터베이스):**  데이터를 테이블 형태로 저장하고, 테이블 간의 관계를 통해 데이터를 관리합니다.  데이터의 무결성과 정확성을 유지하는 데 탁월하지만,  복잡한 관계를 다루는 데 어려움을 느낄 수 있습니다.

* **몽고DB (문서형 데이터베이스):**  데이터를 JSON 형태의 문서로 저장합니다.  테이블과 행, 열 대신 컬렉션과 문서, 필드라는 용어를 사용합니다.  유연성이 높고,  스키마가 자유로워 데이터 모델링이 자유롭다는 장점이 있습니다.

| SQL 용어/개념 | MongoDB 용어/개념 | 설명 |
|---|---|---|
| database | database | 데이터베이스 자체 |
| 테이블 | 컬렉션 (Collection) | 데이터를 담는 용기 |
| 행 | 문서 (Document) | JSON 형태의 데이터 |
| 열 | 필드 (Field) | 문서의 속성 |
| index | index | 데이터 검색 속도 향상을 위한 인덱스 |
| 테이블 결합 | $lookup (Aggregation 연산자) | 컬렉션 간 데이터 결합 |
| 기본 키 | _id 필드 | 자동 생성되는 고유 식별자 |

자, 이제 몽고DB의 기본적인 개념을 이해했으니, 실제로 데이터를 다루는 CRUD 작업을 살펴보겠습니다.

### 2. CRUD 작업: 데이터의 핵심!

몽고DB에서 데이터를 조작하는 CRUD(Create, Read, Update, Delete) 작업은 다음과 같은 메서드와 연산자를 사용합니다.

**2.1 데이터 삽입 (Insert):**

`db.collection.insertOne()`  메서드를 사용하여 하나의 문서를 삽입하고,  `db.collection.insertMany()` 메서드를 사용하여 여러 개의 문서를 한 번에 삽입할 수 있습니다.

```javascript
// 하나의 문서 삽입
db.people.insertOne({ user_id: 'abc123', age: 30, status: 'A' });
// 여러 문서 삽입
db.people.insertMany([
  { user_id: 'def456', age: 25, status: 'B' },
  { user_id: 'ghi789', age: 40, status: 'A' }
]);
```

**2.2 데이터 조회 (Read):**

`db.collection.find()` 메서드를 사용하여 데이터를 조회합니다.  조건을 추가하여 원하는 데이터만 검색할 수 있으며,  `sort()`, `limit()`, `skip()` 메서드를 이용하여 정렬, 제한, 건너뛰기를 할 수 있습니다.

```javascript
// 모든 문서 조회
db.people.find();
// status가 'A'인 문서 조회
db.people.find({ status: 'A' });

// age가 30보다 큰 문서를 age 기준으로 내림차순 정렬 후 5개만 조회
db.people.find({ age: { $gt: 30 } }).sort({ age: -1 }).limit(5);
```

**2.3 데이터 수정 (Update):**

`db.collection.updateOne()` 또는 `db.collection.updateMany()` 메서드를 사용하여 데이터를 수정합니다.  `$set`, `$inc`, `$push` 등의 업데이트 연산자를 사용하여 다양한 수정 작업을 수행할 수 있습니다.

```javascript
// age가 30인 문서의 status를 'C'로 변경
db.people.updateOne({ age: 30 }, { $set: { status: 'C' } });

// status가 'A'인 모든 문서의 age에 1을 더함
db.people.updateMany({ status: 'A' }, { $inc: { age: 1 } });
```

**2.4 데이터 삭제 (Delete):**

`db.collection.deleteOne()` 또는 `db.collection.deleteMany()` 메서드를 사용하여 데이터를 삭제합니다.

```javascript
// status가 'B'인 문서 하나 삭제
db.people.deleteOne({ status: 'B' });

// status가 'A'인 모든 문서 삭제
db.people.deleteMany({ status: 'A' });
```

### 3.  몽고DB의 강력한 기능들: 집계, 인덱스, 트랜잭션

몽고DB는 CRUD 작업 외에도 다양한 강력한 기능들을 제공합니다.

* **집계 (Aggregation):**  데이터를 분석하고 요약하는 데 사용됩니다.  `$group`, `$match`, `$sort` 등의 연산자를 사용하여 복잡한 데이터 처리가 가능합니다.

* **인덱스 (Indexes):**  데이터 검색 속도를 향상시키기 위해 사용됩니다.  적절한 인덱스를 생성하는 것은 몽고DB 성능 최적화의 핵심입니다.

* **트랜잭션 (Transactions):**  여러 작업을 하나의 원자적 작업으로 처리하여 데이터의 일관성을 유지합니다.

### 4. SQL에서 몽고DB로의 전환: 팁과 고려사항

SQL 개발자라면 몽고DB로 전환할 때 어려움을 느낄 수 있습니다.  하지만 차근차근 개념을 이해하고,  SQL과 몽고DB의 차이점을 명확히 인지한다면  문제없이 적응할 수 있습니다.  데이터 모델링 전략을 신중하게 계획하고,  몽고DB의 특징을 활용하여 효율적인 데이터 관리 방식을 구축하는 것이 중요합니다.

### 5. 마치며…

이 글에서는 몽고DB의 기본적인 내용과 SQL과의 비교, 그리고 핵심 기능들을 간략하게 살펴보았습니다.  몽고DB는  웹 애플리케이션, IoT,  빅데이터 등 다양한 분야에서 활용되고 있으며,  그 유연성과 확장성은  많은 개발자들에게 매력적인 선택지입니다.  이 글이 여러분의 몽고DB 학습에 도움이 되었기를 바랍니다!