본문 바로가기

Study Information Technology

Spring Boot와 MongoDB 완벽한 통합 가이드

728x90
반응형

Spring Boot와 MongoDB: 완벽한 통합 가이드

Overview

Spring Boot와 MongoDB를 통합하는 것은 자바 기반의 애플리케이션에서 NoSQL 데이터베이스를 활용하는 강력한 방법입니다. 이 통합을 통해, 관계형 데이터베이스의 제약을 넘어서서 유연하고 확장성 있는 데이터 저장소를 사용할 수 있습니다. 본 가이드는 Spring Boot 애플리케이션을 MongoDB와 연결하고, 기본적인 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 수행하는 방법을 자세히 설명합니다.


1. Spring Boot와 MongoDB 설정

1.1 프로젝트 생성

먼저, Spring Boot 프로젝트를 생성해야 합니다. Spring Initializr를 사용하여 기본 프로젝트를 설정할 수 있습니다.

  1. Spring Initializr에 접속합니다.
  2. Project: Maven Project
  3. Language: Java
  4. Spring Boot: 최신 버전 선택
  5. Dependencies: Spring Web, Spring Data MongoDB

이제 Generate 버튼을 클릭하여 프로젝트를 다운로드하고, 압축을 풀어 IDE에서 엽니다.

1.2 application.properties 설정

Spring Boot 애플리케이션이 MongoDB에 연결되도록 application.properties 파일을 설정합니다. src/main/resources 폴더에 위치한 application.properties 파일에 MongoDB의 연결 정보를 추가합니다:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=exampledb
spring.data.mongodb.username=yourUsername
spring.data.mongodb.password=yourPassword
  • host: MongoDB 서버의 호스트명 (기본값은 localhost)
  • port: MongoDB의 포트 (기본값은 27017)
  • database: 사용할 데이터베이스 이름
  • usernamepassword: 인증이 필요한 경우 사용자 이름과 비밀번호

1.3 MongoDB 의존성 추가

pom.xml 파일에 MongoDB 의존성을 추가합니다. Spring Initializr를 통해 생성된 프로젝트에는 기본적으로 이 의존성이 포함되어 있지만, 누락된 경우 추가할 수 있습니다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

이 의존성은 Spring Data MongoDB의 기능을 포함하고 있어, MongoDB와의 통합을 쉽게 해줍니다.

2. MongoDB 모델 클래스 생성

2.1 도메인 모델 정의

MongoDB에서 데이터를 저장할 도메인 모델 클래스를 정의합니다. @Document 어노테이션을 사용하여 이 클래스가 MongoDB의 문서에 매핑된다는 것을 지정합니다.

예를 들어, User라는 도메인 모델 클래스를 정의해 보겠습니다:

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 String email;

// 생성자, 게터 및 세터

public User() {}

public User(String name, String email) {
this.name = name;
this.email = email;
}

// Getters and Setters
}
  • @Id: MongoDB에서 문서를 식별하는 고유 ID를 지정합니다.
  • @Document: MongoDB의 컬렉션과 매핑되는 도메인 모델임을 나타냅니다.

2.2 레포지토리 인터페이스 생성

Spring Data MongoDB는 데이터베이스 작업을 위한 리포지토리 인터페이스를 제공합니다. MongoRepository를 상속하여 CRUD 작업을 자동으로 구현할 수 있습니다.

import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserRepository extends MongoRepository<User, String> {
User findByEmail(String email);
}
  • MongoRepository<User, String>: User 도메인 모델과 String 타입의 ID를 사용하는 MongoDB 리포지토리입니다.
  • findByEmail: 사용자 정의 쿼리 메서드로, 이메일로 사용자 찾기 기능을 제공합니다.

3. CRUD 작업 수행

3.1 데이터 저장

컨트롤러를 통해 데이터를 저장할 수 있습니다. UserController 클래스를 작성하여 HTTP 요청을 처리합니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
private UserRepository userRepository;

@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
}
  • @PostMapping: HTTP POST 요청을 처리하며, 요청 본문에 포함된 User 객체를 데이터베이스에 저장합니다.
  • userRepository.save(user): save 메서드를 사용하여 데이터베이스에 User 객체를 저장합니다.

3.2 데이터 조회

저장된 데이터를 조회하는 방법을 보여주는 예제입니다.

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
private UserRepository userRepository;

@GetMapping("/{id}")
public User getUserById(@PathVariable String id) {
return userRepository.findById(id).orElse(null);
}
}
  • @GetMapping: HTTP GET 요청을 처리합니다.
  • userRepository.findById(id): findById 메서드를 사용하여 ID로 사용자 정보를 조회합니다.

3.3 데이터 업데이트

기존 데이터를 업데이트하는 방법을 설명합니다.

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
private UserRepository userRepository;

@PutMapping("/{id}")
public User updateUser(@PathVariable String id, @RequestBody User user) {
if (userRepository.existsById(id)) {
user.setId(id);
return userRepository.save(user);
}
return null;
}
}
  • @PutMapping: HTTP PUT 요청을 처리합니다.
  • userRepository.existsById(id): ID가 존재하는지 확인 후, save 메서드로 업데이트합니다.

3.4 데이터 삭제

데이터를 삭제하는 방법을 설명합니다.

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
private UserRepository userRepository;

@DeleteMapping("/{id}")
public void deleteUser(@PathVariable String id) {
userRepository.deleteById(id);
}
}
  • @DeleteMapping: HTTP DELETE 요청을 처리합니다.
  • userRepository.deleteById(id): ID로 사용자 데이터를 삭제합니다.

4. 오류 처리 및 디버깅

4.1 일반적인 오류

  • MongoServerException: MongoDB 서버에 연결할 수 없을 때 발생합니다. 설정 파일에서 MongoDB 호스트와 포트 번호를 확인하세요.
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
  • DuplicateKeyException: 중복된 키로 데이터를 삽입할 때 발생합니다. 데이터베이스의 유니크 제약 조건을 확인하고, 삽입 전에 데이터가 이미 존재하는지 확인하세요.

4.2 로그 및 디버깅

Spring Boot는 기본적으로 로그를 출력합니다. application.properties 파일에서 로그 레벨을 조정할 수 있습니다:

logging.level.org.springframework=DEBUG
  • DEBUG: 애플리케이션의 상세한 로그를 제공합니다. 문제를 해결하는 데 유용합니다.

참고문서

728x90
반응형