본문 바로가기

Study Information Technology

Spring Boot와 MongoDB를 이용한 NoSQL 애플리케이션 개발

728x90
반응형

Spring Boot와 MongoDB를 이용한 NoSQL 애플리케이션 개발

Overview

Spring Boot와 MongoDB를 활용하여 NoSQL 기반의 애플리케이션을 개발하는 과정은 데이터베이스의 유연한 스키마 설계를 통해 다양한 데이터 모델링을 지원할 수 있습니다. 이 글에서는 Spring Boot와 MongoDB의 통합 과정, 데이터 모델링, CRUD(Create, Read, Update, Delete) 연산, 에러 처리 및 최적화 방법까지 자세히 설명하겠습니다.

1. Spring Boot와 MongoDB 통합하기

1.1 Spring Boot 프로젝트 설정

Spring Boot 애플리케이션을 시작하기 위해, 먼저 Spring Initializr(https://start.spring.io/)를 사용하여 새로운 프로젝트를 생성합니다. 필요한 의존성을 선택할 때, 다음과 같은 항목들을 선택해야 합니다:

  • Spring Web
  • Spring Data MongoDB

프로젝트가 생성되면, pom.xml 파일에 다음과 같은 의존성이 추가되어야 합니다.

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

1.2 MongoDB 연결 설정

MongoDB에 연결하기 위해 application.properties 또는 application.yml 파일에 데이터베이스 연결 정보를 입력합니다.

spring.data.mongodb.uri=mongodb://localhost:27017/yourdatabase

위의 URI에서 localhost는 MongoDB 서버의 주소이고, 27017은 기본 포트 번호입니다. yourdatabase는 사용할 데이터베이스 이름입니다.

2. 데이터 모델링

2.1 도메인 클래스 생성

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;

// getters and setters
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}
}

3. CRUD 연산 구현

3.1 Repository 인터페이스 생성

Spring Data MongoDB를 사용하여 CRUD 작업을 쉽게 처리할 수 있습니다. UserRepository 인터페이스를 생성하여 MongoDB와의 상호작용을 처리합니다.

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

public interface UserRepository extends MongoRepository<User, String> {
User findByEmail(String email);
}

3.2 서비스 클래스 구현

비즈니스 로직을 처리하기 위해 UserService 클래스를 생성합니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
@Autowired
private UserRepository userRepository;

public User createUser(User user) {
return userRepository.save(user);
}

public List<User> getAllUsers() {
return userRepository.findAll();
}

public User getUserById(String id) {
return userRepository.findById(id).orElse(null);
}

public User updateUser(String id, User user) {
user.setId(id);
return userRepository.save(user);
}

public void deleteUser(String id) {
userRepository.deleteById(id);
}
}

4. 에러 처리

4.1 에러 핸들링

Spring Boot에서는 @ControllerAdvice를 사용하여 전역적으로 예외를 처리할 수 있습니다. 예를 들어, 사용자가 존재하지 않을 때의 에러를 처리하는 방법은 다음과 같습니다.

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
}

이 경우 UserNotFoundException은 사용자 정의 예외 클래스입니다.

5. 최적화 및 배포

5.1 MongoDB 인덱스

MongoDB의 성능을 최적화하기 위해, 특정 필드에 인덱스를 설정하는 것이 좋습니다. 예를 들어, email 필드에 인덱스를 추가하려면 @Indexed 어노테이션을 사용할 수 있습니다.

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "users")
public class User {
@Id
private String id;

private String name;

@Indexed(unique = true)
private String email;

// getters and setters
}

6. 참고문서

이 글을 통해 Spring Boot와 MongoDB를 활용한 NoSQL 애플리케이션 개발의 기초를 이해하고, 실제로 애플리케이션을 구현할 수 있는 기반 지식을 쌓길 바랍니다. 다양한 예제를 통해 실습을 해보면서 익숙해지기를 권장합니다.

반응형