최근 취뽀에 성공하면서 Kotlin과 MongoDB를 새로이 공부하게 되었습니다.
기존에는 JAVA + Spring + JPA + RDB 조합을 활용했는데, 이제는 Kotlin + Spring + MongoDB를 사용하게 되면서 많은 시행착오를 겪게 되었습니다.
아직 현재 진행형인 삽질이지만, 같은 실수를 반복하지 않기 위해 정리를 해보고자 합니다.
MongoDB는 무료로 사용해볼 수 있습니다. 몽고디비 홈페이지에서 간단하게 로그인을 진행하고 Build a Database
버튼을 통해 진행할 수 있습니다.
이후 무료 버전인 M0를 선택하고, AWS를 선택한 뒤, 한국 리전을 선택하고 Create
버튼을 눌러 진행합니다.
AWS 뿐만 아니라 GCP도 한국 리전을 지원합니다. 이 글을 작성하는 시점에서는 Azure에서 한국 리전을 지원하지 않고 있습니다. 리전으로 인한 차이가 얼마나 있을 지는 잘 모르겠네요.
이후 Security Quickstart에서 두 가지를 설정해야 합니다. (1) username과 password를 설정해야 하고, (2) 연결 가능한 IP 주소를 등록해야 합니다. 연결 가능한 IP 주소는 추후에 추가 또는 삭제가 가능합니다.
설정을 모두 마친 후, Finish and Close
버튼을 누르면 위와 같은 창이 나옵니다. Cluster의 상단 메뉴에 Connect
버튼을 누르면 해당 DB에 대한 연결정보를 얻을 수 있습니다. 언어와 버전을 선택하면 연결에 사용할 수 있는 connection string 정보를 줍니다.
mongodb+srv://<username>:<password>@<cluster-name>.<uri>/?retryWrites=true&w=majority
Spring에서 MongoDB에 관한 설정 방법은 크게 두 가지가 있습니다.
다른 DB를 연결할 때와 마찬가지로, application.yml이나 application.properties에서 설정을 진행할 수 있습니다.
spring:
data:
mongodb:
uri: mongodb+srv://<username>:<password>@<cluster-name>.<uri>/?retryWrites=true&w=majority
database:
Spring에서는 AbstractMongoClientConfiguration
을 상속받는 객체를 통해 연결 정보를 설정할 수 있습니다.
@Configuration
class MongoConfig : AbstractMongoClientConfiguration() {
override fun getDatabaseName(): String {
return "<database-name>"
}
override fun mongoClient(): MongoClient {
val connectionString = ConnectionString("mongodb+srv://<username>:<password>@<cluster-name>.<uri>")
val mongoClientSettings = MongoClientSettings.builder().applyConnectionString(connectionString).build()
return MongoClients.create(mongoClientSettings)
}
}
AbstractMongoClientConfiguration
을 상속받아서 Configuration
을 만들면 기본 연결 이외에도 많은 설정을 진행할 수 있습니다.
가령 Spring Mongo Data
에서는 @Transactional
을 지원하지 않기 때문에, 이와 관련한 TransactionManager
를 만들 수 있습니다.
물론 기본 연결 정보는 yml
이나 properties
에 두고, 세부적인 항목들만 별도로 Configuration
으로 등록할 수도 있습니다.
오늘은 기본적인 MongoDB 생성 및 연결에 대해 작성해보았습니다. 다음에는 MongoDB에 기본적인 저장 및 조회를 진행해보도록 하겠습니다.