Kotlin + Spring 프로젝트 MongoDB 설정
by 뚜부니Spring WebFlux 프로젝트에서 MongoDB 설정을 하는 중 어려움을 좀 겪었어요 😂 이 게시글을 보시는 분들은 조금 더 쉽게 설정하실 수 있도록 설정 방법에 대해 정리해서 공유해보려고 해요. Spring Webflux 프로젝트이기는 하나 Spring Data MongoDB
를 사용하기 때문에 어떤 Spring 프로젝트이던 방법은 비슷할 것 같아요.
Gradle 설정
먼저 Spring Data MongoDB
를 사용하기 위해 Dependency에 다음 내용을 추가합니다. 참고로 저는 Gradle이 kotlin으로 되어 있어요.
implementation("org.springframework.boot:spring-boot-starter-data-mongodb-reactive")
yaml 설정
그다음 application.yaml
을 아래 내용과 같이 생성합니다.
spring:
application:
name: project
jackson:
property-naming-strategy: SNAKE_CASE
data:
mongodb:
uri: mongodb://localhost:27017
database: project
username: master
password: master
authentication-database: admin
저는 프로젝트에서 사용할 데이터베이스는 project
, 계정 정보는 admin
에 있어서 application.yaml
에 따로 적었어요.
계정 정보가 프로젝트에서 사용할 데이터베이스에 있다면 authentication-database
를 입력하지 않아도 됩니다.
만약, 계정 정보가 있는 admin
데이터베이스가 project
데이터베이스에 대한 권한이 없으면 Exception authenticating MongoCredential
에러가 발생할 수 있습니다. mongoDB 내에서 project
데이터베이스에 대한 권한을 주면 해당 문제를 해결할 수 있습니다. 관련 내용은 MongoDB 설치하기를 참고해주세요.
config 구성
그다음 위 application.yaml
설정을 바탕으로 MongoDB Config를 작성해 보겠습니다.
@Configuration
@EnableReactiveMongoAuditing
class MongoConfig(private val mongoProperties: MongoProperties) : AbstractReactiveMongoConfiguration() {
override fun getDatabaseName(): String {
return mongoProperties.database
}
@Bean
override fun reactiveMongoClient(): MongoClient {
val credential = MongoCredential.createCredential(mongoProperties.username, mongoProperties.authenticationDatabase, mongoProperties.password)
val connectionString = ConnectionString(mongoProperties.uri)
return MongoClients.create(
MongoClientSettings.builder()
.applyConnectionString(connectionString)
.credential(credential)
.build()
)
}
@Bean
fun reactiveMongoTemplate(): ReactiveMongoTemplate {
return ReactiveMongoTemplate(reactiveMongoClient(), databaseName)
}
@Bean
@Primary
fun objectMapper(): ObjectMapper {
return ObjectMapper().apply {
propertyNamingStrategy = PropertyNamingStrategies.SNAKE_CASE
}
}
}
AbstractReactiveMongoConfiguration
를 상속받아 구성하였으며, getDatabaseName()
에서는 실제로 사용할 데이터베이스를 연결합니다. 그리고 credential
에는 실제 계정 정보가 있는 데이터베이스를 설정합니다.
API 호출해 보기
여기서 API에 대한 내용은 생략했습니다. 실제로 API를 호출해 보면 204로 정상적으로 저장했음을 응답으로 내려줍니다.
DB에도 데이터가 잘 들어가 있네요 :D
참고
'Spring' 카테고리의 다른 글
Spring @RequestParam vs. @RequestPart (0) | 2024.12.21 |
---|---|
Spring Boot, MongoDB 프로젝트 네이밍 설정 방식 (0) | 2024.12.06 |
Spring 프로젝트 내부에 React 설정 및 Build (Gradle) (0) | 2023.01.15 |
Spring DI (0) | 2022.11.27 |
properties로 Spring Boot log를 설정해보자! (0) | 2022.04.23 |
블로그의 정보
개발하는 두부
뚜부니