Spring Boot, CRUD API 개발을 위한 Reactive MongoDB 연동
Spring Boot 기반으로 Reactive MongoDB 를 사용하여 CRUD API 를 개발하기 위한 기록을 남기도록 한다.
• 7 min read
1. 환경 세팅
1) MongoDB Docker 설정
docker pull mongo
docker run --name mongodb -d -p 27017:27017 mongo
2) MongoDB Client 설치
2. 구성 및 설정
1) 디렉토리 구성
2) build.gradle
build.gradle 에 의존성에 spring-boot-starter-data-mongodb-reactive 를 추가한다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
}
tasks.named('test') {
useJUnitPlatform()
}
3) application.properties
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
3. Member API 만들기
디렉토리 구조와 아키텍쳐에 맞는 기능들을 구성하며 사용자를 추가하는 API 를 만들어 보고자 한다.
1) 공통, Api Response 작성
API 응답시 일관된 결과값을 주기 위해서 common 에 ApiResponse 라는 이름으로 클래스를 하나 작성했다.
2) 공통, RestController Advice 작성
API 응답시 일관된 에러 메시지 처리를 위해서 common 에 ApiException 라는 이름으로 클래스를 하나 작성했다.
이 클래스에서는 SpringBoot 에서 전역적으로 예외를 처리하기 위해 @RestControllerAdvice 를 사용했다. 이 어노테이션을 사용하면 예외가 발생했을 때 적절한 메시지나 객체를 리턴할 수 있다.
3) Entity 작성
- @Document Annotation
몽고디비 Collection 을 매핑 하도록 한다. - @Id Annotation
- ObjectId 타입
- 몽고디비가 자동으로 _id 값을 생성하고 할당
- String 타입
- 몽고디비가 자동으로 _id 값을 생성하고 할당
- long 타입
- 몽고디비가 자동으로 _id 값을 생성하고 할당하지 않음 (수동설정)
4) DTO 작성
5) Repository 작성
ReactiveMongoRepository를 상속 받고 @Query 과 @Update 을 이용해 부분 업데이트나 페이징을 하도록 했다.
6) Mapper 작성
7) Service 작성
8) Controller 작성