관계형 데이터베이스(RDBMS)만 써오던 프로젝트에서 NoSQL인 MongoDB를 도입해야 할 때, 가장 많이 사용하는 조합 중 하나가 Spring Boot + MongoDB입니다.
MongoDB의 설치부터 Spring Boot 연동, 간단한 CRUD까지 정리해 보겠습니다.
1. MongoDB 설치 또는 Docker 실행
로컬 설치를 권장하지 않는다면 Docker
로 실행하는 것이 가장 간편합니다.
docker run --name mongo \
-p 27017:27017 \
-d mongo:6.0
MongoDB Compass 또는 Robo 3T 같은 GUI 도구를 함께 설치하면 확인이 편리합니다.
2. 프로젝트에 의존성 추가 (Maven)
spring-boot-starter-data-mongodb
만으로 대부분 기능이 지원됩니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
3. application.yml 또는 properties 설정
MongoDB 연결 정보를 application.yml
에 설정합니다.
spring:
data:
mongodb:
uri: mongodb://localhost:27017/springboot_mongo
기본 포트는 27017이며, DB 이름은 springboot_mongo
로 설정했습니다.
4. 도메인 모델 (@Document)
MongoDB는 테이블이 아닌 컬렉션을 사용하므로 @Entity
대신 @Document
를 사용합니다.
@Document(collection = "users")
public class User {
@Id
private String id;
private String name;
private String email;
// 기본 생성자, getter, setter 생략
}
5. Repository 생성
MongoRepository를 상속받기만 하면 기본 CRUD 메서드는 자동 제공됩니다.
public interface UserRepository extends MongoRepository<User, String> {
Optional<User> findByEmail(String email);
}
6. 테스트용 Controller 작성
간단한 REST API를 작성해 실제 동작을 테스트합니다.
@RestController
@RequestMapping("/users")
public class UserController {
private final UserRepository userRepository;
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable String id) {
return userRepository.findById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
}
7. MongoDB와 RDB의 차이
- MongoDB는 스키마가 없습니다. 유연한 구조의 데이터 저장이 가능합니다.
- Join이 어렵지만, 빠른 조회와 수평 확장이 용이합니다.
- 트랜잭션은 RDB보다 제한적이며, 설계 시 그에 맞는 구조를 고려해야 합니다.
8. 실무에서의 팁
- ObjectId → String으로 매핑하는 것이 간단하게 처리하기 좋습니다.
- 컬렉션 이름은 명시적으로 지정해 주는 것이 MongoDB 관리에 유리합니다.
MongoTemplate
를 이용하면 더 복잡한 쿼리도 작성할 수 있습니다.
마무리
Spring Boot와 MongoDB는 빠른 프로토타이핑이나 문서 기반 저장소로서 매우 잘 어울리는 조합입니다.
기본 연동만 익혔다면, 다음 단계로 Aggregation
파이프라인이나 MongoTemplate
기반의 복잡한 쿼리도 익혀보세요
'개발 > JAVA' 카테고리의 다른 글
[JAVA] Spring Boot와 Kafka 연동하기 - 실무 개발자를 위한 가이드 (0) | 2025.10.21 |
---|---|
[JAVA] Spring Boot에서 Cache 활용하기 – Redis 연동 실무 가이드 (0) | 2025.10.20 |
[JAVA] Spring Boot와 PostgreSQL 연동하기 – 실전 가이드 (0) | 2025.10.18 |
[JAVA] Spring Boot와 MySQL 연동하기 - 입문 가이드 (0) | 2025.10.17 |
[JAVA] Spring에서 트랜잭션 관리하기 – @Transactional 완벽 이해 (0) | 2025.10.16 |