MySQL에 익숙한 내가 MongoDB를 만나다.
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
데이터 분석
대상자
- 대상자_정보: MySQL 기반 개발자, NoSQL 전환 과정에 관심 있는 중급 이상 개발자
- 난이도: 중간 (SQL과 NoSQL의 차이점 이해 필요)
핵심 요약
- MySQL과 MongoDB의 핵심 차이점:
- MongoDB는 스키마 없는 유연한 데이터 모델로,
ALTER TABLE
없이 즉시 필드 추가 가능 - Aggregation Pipeline이 SQL의 JOIN/GRPUP BY를 대체하며, 단계별 데이터 처리 가능
- MongoDB Compass 활용:
- MySQL의
phpMyAdmin
대체 도구로, 컬렉션 브라우징 및 쿼리 실행 지원 - 데이터 모델링 전략:
- 비정규화(임베딩) 방식으로 JOIN 없이도 성능 향상 가능
섹션별 세부 요약
1. **스키마 유연성과 즉각적인 필드 추가**
- MongoDB는 복잡한
ALTER TABLE
없이view_count
,tags
필드 즉시 추가 가능 - JSON 기반 데이터 저장: API에서 받은 JSON을 그대로 저장 가능 (
insertOne
사용) - 장점: 기획 변경 시 즉시 대응 가능, 복잡한 JOIN 없이 풍부한 데이터 표현
2. **Aggregation Pipeline의 실전 적용**
- SQL의
GROUP BY
대체:
```javascript
{ $group: { "_id": "$author.name", "post_count": { $sum: 1 } } }
```
- 단계별 처리:
$match
→ 필터링$group
→ 집계$sort
→ 정렬- 디버깅 효율성: 각 단계별 중간 결과 확인 가능
3. **MongoDB Compass 활용 사례**
- MySQL GUI 도구 대응
- 테이블 브라우징 → 컬렉션 브라우징
- SQL 쿼리 실행 → MongoDB 쿼리 실행
- 템플릿 기반 쿼리 저장:
```json
"오늘_생성_데이터": { "createdAt": { $gte: "TODAY_START" } }
```
4. **정규표현식과 데이터 검증**
- 유연한 패턴 매칭:
```javascript
"content": { $regex: "(?=.MongoDB)(?=.실무)", $options: "i" }
```
- 필수 필드 누락 검사:
```javascript
$or: [{ "title": { $exists: false } }, { "author.name": { $exists: false } }]
```
5. **데이터 모델링 전략 비교**
- MySQL 방식(정규화): 별도 테이블 분리(
users
,posts
) - MongoDB 방식(비정규화):
```json
"author": { "id": ObjectId("..."), "name": "김머호", "email": "..." }
```
- 장점: JOIN 없이도 성능 향상, 자주 조회되는 데이터 임베딩
결론
- MongoDB 활용 팁:
- Aggregation Pipeline은 단계별 처리로 디버깅 효율성 향상
- 스키마 유연성과 JSON 기반 모델이 현대 웹 개발에 적합
- JOIN 대체 전략: 비정규화(임베딩)로 성능 최적화
- MySQL과 MongoDB 적절한 선택: 관계형 데이터는 MySQL, 유연한 데이터 처리는 MongoDB