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 애플리케이션 개발의 기초를 이해하고, 실제로 애플리케이션을 구현할 수 있는 기반 지식을 쌓길 바랍니다. 다양한 예제를 통해 실습을 해보면서 익숙해지기를 권장합니다.
'Study Information Technology' 카테고리의 다른 글
Spring Boot와 OAuth2 Resource Server 통합하기 (1) | 2024.10.15 |
---|---|
스프링 부트 액츄에이터를 이용한 헬스 체크 엔드포인트 생성 (0) | 2024.10.15 |
Spring Data JPA와 Spring Boot를 활용한 검색 기능 구현 (0) | 2024.10.14 |
Spring Boot와 RESTful 웹 서비스 현대 애플리케이션 개발의 핵심 (0) | 2024.10.14 |
Spring Boot와 Hibernate 통합 ORM의 힘을 활용하자 (0) | 2024.10.14 |