MongoDB는 NoSQL (Not Only SQL) 데이터베이스로 관계형 데이터베이스(RDBMS)와 달리 스키마가 없고(JSON 기반), 유연한 데이터 구조를 제공합니다.
MongoDB는 데이터를 문서(Document) 형태로 저장하며 테이블과 행이 아닌 컬렉션(Collection)과 도큐먼트(Document) 구조를 사용합니다.
| 개념 | 설명 |
|---|---|
| Database | 여러 개의 컬렉션을 포함하는 논리적 저장소 |
| Collection | 여러 개의 도큐먼트(Document)로 구성된 데이터 그룹 |
| Document | MongoDB에서 저장하는 JSON 형식의 데이터 단위 |
| Field | Document 내부의 key-value 데이터 |
| Index | 데이터를 빠르게 조회할 수 있도록 지원 |
| Replica Set | 데이터의 가용성을 높이기 위한 복제본 설정 |
| Sharding | 대량의 데이터를 여러 서버에 분산 저장하는 방식 |
| 비교 항목 | MongoDB (NoSQL) | RDBMS (MySQL, PostgreSQL 등) |
|---|---|---|
| 데이터 구조 | JSON 기반 문서(Document) | 테이블(Row, Column) |
| 스키마 | 없음 (유연함) | 고정 스키마 |
| 확장성 | 수평적 확장 (Sharding) | 주로 수직적 확장 |
| 트랜잭션 | 기본적으로 약함 (4.0부터 지원) | 강력한 ACID 지원 |
| 조인(Join) | 직접 지원하지 않음 (Embedding, Lookup 사용) | 기본 지원 |
| 쿼리 언어 | BSON 기반 쿼리 | SQL |
| 성능 | 대량의 데이터에 유리 | 복잡한 관계형 데이터 처리에 유리 |
mongo
use myDatabase;
db.createCollection("users");
db.users.insertOne({
name: "Alice",
age: 25,
hobbies: ["reading", "traveling"]
});
db.users.insertMany([
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 35 }
]);
db.users.find();
db.users.find({ age: { $gt: 25 } }); // 나이가 25보다 큰 데이터 조회
db.users.updateOne({ name: "Alice" }, { $set: { age: 26 } });
db.users.updateMany({ age: { $lt: 30 } }, { $set: { status: "young" } });
db.users.deleteOne({ name: "Alice" });
db.users.deleteMany({ age: { $lt: 30 } });
pom.xml)<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
application.properties)spring.data.mongodb.uri=mongodb://localhost:27017/myDatabase
User.java)import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "users")
public class User {
@Id
private String id;
private String name;
private int age;
// 생성자, Getter, Setter
}
UserRepository.java)import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<User, String> {
User findByName(String name);
}
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserRepository userRepository;
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@GetMapping
public List<User> getAllUsers() {
return userRepository.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
}
MongoDB는 유연성과 확장성이 뛰어나며 빠르게 변화하는 데이터 구조를 다룰 때 유용합니다.
Spring Boot와 결합하면 쉽게 사용할 수 있지만 관계형 데이터가 중요한 경우 RDBMS가 더 적합할 수도 있습니다.
프로젝트에 맞는 데이터베이스를 선택하는 것이 중요하다는 것을 다시 한번 깨달았습니다.