우당탕탕
MongoDB 처음 써보면서 RDBMS와 확실히 달랐던 부분들 정리해봤어요 본문
저도 MongoDB를 처음 써봤는데, RDBMS랑 확실히 다른 점이 많아서 삽질을 꽤 했거든요. 그래서 이번에 직접 쿼리도 짜보고 최적화도 해보면서 느낀 점을 공유하려고 해요.
이 글에서 RDBMS와 MongoDB가 어떻게 다르고, 실제 쿼리는 어떻게 작성하는지, 그리고 실행 결과는 어떤지까지 상세히 보여드릴게요. MongoDB 처음 접하는 분도 이해할 수 있게 최대한 쉽게 풀어 썼어요.
개발 환경 / 버전 정보
이번에 사용한 버전은 MongoDB 6.0이고, 클라이언트는 Mongo Shell 6.0입니다. 로컬 PC에 설치해서 테스트했어요.
MongoDB는 이렇게 다릅니다, 직접 겪어본 RDBMS와의 차이
사실 이 부분이 가장 헷갈리기도 하고 막히는 지점이었는데, RDBMS가 테이블, 행, 칼럼으로 명확히 나누어진 구조라면 MongoDB는 컬렉션(collection)이라는 곳에 자유로운 JSON 문서(document)를 넣는 구조라는 점이에요.
또한, 스키마가 엄격하지 않아서 같은 컬렉션 내에 서로 다른 필드를 가진 문서들이 섞여 있을 수도 있더라고요. 처음엔 이 점이 편리하게도 느껴졌지만, 나중에 쿼리할 때는 조심해야겠다는 생각이 들었어요.
기본 CRUD 쿼리 작성, RDBMS와 다른 점 직접 보여드려요
먼저 데이터를 삽입할 때입니다. RDBMS는 스키마에 맞춰서 컬럼별로 값 넣는 걸 강제하는데, MongoDB는 이렇습니다.
// users 컬렉션에 JSON 문서 하나 삽입
db.users.insertOne({
name: "홍길동",
age: 29,
hobbies: ["독서", "게임"]
});
이렇게 자유롭게 필드를 넣어줄 수 있는데, 같은 컬렉션에 age가 없는 문서도 저장 가능하더라고요.
다음은 조회 쿼리입니다. 조건도 JSON 형태로 써서 직관적이에요.
// 나이가 25 이상인 사용자 조회
db.users.find({ age: { $gte: 25 } });
RDBMS의 WHERE절과 비슷한데, 연산자 앞에 $를 붙여서 쓰는 점이 MongoDB만의 특징이에요.
실행 결과 직접 보여드릴게요
insertOne 후 바로 find 쿼리를 실행한 결과입니다. JSON 문서가 그대로 리턴되는데, _id 필드가 자동으로 붙는 게 신기했어요.
{
"_id": ObjectId("646d3f5a2e59fd0abc123456"),
"name": "홍길동",
"age": 29,
"hobbies": ["독서", "게임"]
}
_id는 기본 키 역할인데, 직접 넣지 않아도 MongoDB가 자동으로 생성해줘서 편리했어요.
여기서 삽질했던 부분들, 실제로 막혔던 경험담
처음엔 인덱스 설정 없이 대량 데이터를 넣고 find 쿼리를 돌렸더니 너무 느려서 당황했어요. 에러 메시지는 없었는데, 결과가 나오는데 몇 초가 걸리더라고요.
인덱스가 없으면 전체 컬렉션을 탐색하는 거라서 성능 저하가 컸던 건데, 인덱스 만드는 법은 이렇게 했어요.
// age 필드에 인덱스 생성
db.users.createIndex({ age: 1 });
정확히 1은 오름차순 인덱스를 만든다는 뜻이에요. 이후부터는 나이 조건 검색이 훨씬 빨라졌어요.
심화: 이렇게 하면 더 좋더라고요
복잡한 조건이 있을 때 $and, $or 연산자를 조합해서 쓸 수 있는데, 이게 초반에 헷갈렸어요. 저는 자꾸 쉼표로 구분하려다 안 돼서 한참 봤네요.
// 나이가 25 이상이면서 hobbies에 '게임' 포함된 사용자 조회
db.users.find({
$and: [
{ age: { $gte: 25 } },
{ hobbies: "게임" }
]
});
이렇게 써야 제대로 조회되더라고요.
자주 물어보시는 것들
Q. MongoDB도 조인이 가능한가요?
A. 네, $lookup이라는 집계(aggregation) 연산자를 써서 테이블 조인과 비슷한 기능을 구현할 수 있어요. 하지만 RDBMS처럼 본격적으로 사용하는 것보다는, 필요한 부분만 가볍게 조인하는 용도로 주로 쓰입니다.
Q. 트랜잭션은 어떻게 처리하나요?
A. MongoDB도 다중 문서 트랜잭션을 지원하지만, 기본적으로는 단일 문서 원자성을 보장합니다. 그래서 되도록이면 문서 단위로 작업을 설계하는 게 성능과 유지보수에 유리해요.
MongoDB 처음 접하면서 RDBMS랑 다르게 접근해야 하는 부분이 생각보다 많았어요. 데이터 구조부터 쿼리 문법, 인덱스 최적화까지 직접 해보니 이해가 훨씬 빠르더라고요. 이번에 정리한 내용만 차근차근 따라 해보시면 MongoDB가 훨씬 친근해질 거예요.
'Database' 카테고리의 다른 글
| MySQL 슬로우 쿼리 잡으면서 제가 저지른 실수와 해결법 (0) | 2026.06.02 |
|---|---|
| MongoDB 처음 써보면서 RDBMS와 달라서 놀랐던 부분들 직접 정리했어요 (0) | 2026.05.30 |
| Redis 캐싱 Spring Boot 연동 직접 구현해보니 쾌적한 성능 체감했어요 (0) | 2026.05.27 |
| MongoDB 처음 써보면서 RDBMS와 달라서 막혔던 부분들 정리 (0) | 2026.05.20 |
| MongoDB 처음 써보면서 RDBMS와 다른 점 직접 체험하며 정리해봤어요 (0) | 2026.05.19 |
