🍃 Spring

[Spring] Webflux에 Mongo 연결(+Kubernetes)

loose 2024. 9. 5. 11:12
반응형

Kubernetes에 Helm으로 Mongo 설치

설치

helm show values bitnami/mongodb > custom-values.yaml

간단하게 명령어로 설치해도 되지만 사용자 ID나 PVC의 용량을 미리 설정하기 위해 미리 yaml 파일을 수정해서 설치합니다.

auth:
  enabled: true
  rootUser: mongo-user
  rootPassword: mongo-password
  database: mydatabase
-------------------------------------
persistence:
  enabled: true
  size: 1Gi
-------------------------------------
service:
  type: LoadBalancer
  port: 27017
-------------------------------------

 

순서대로 사용자 정보와 데이터베이스 명, PVC 크기, Service 타입을 설정합니다.

여기서는 LoadBalancer로 설정합니다.

helm install my-mongodb -f custom-values.yaml bitnami/mongodb

업데이트 

helm upgrade my-mongodb -f custom-values.yaml bitnami/mongodb

삭제 

helm uninstall my-mongodb

연결 정보 확인

이제 kubectl get svc를 통해서 LoadBalancer의 External IP를 확인합니다.

해당 아이피와 27017 그리고 위에서 설정한 사용자 ID와 패스워드가 연결정보가 됩니다.

MongoDB 사용법

Pod에 직접 접속

k exec 명령어를 통해서 Pod에서 Mongo 명령어를 사용해볼 수 있습니다.

mongosh admin -u myid -p mypw

use mydb;

db.createCollection("MyCollection");

db.ProvisioningInfo.insertOne( { "id":"1", "name":"stir" });

db.ProvisioningInfo.find({});

인텔리제이에서 접속

인텔리제이에서도 똑같이 연결해서 사용 가능합니다.

Spring Webflux에 Mongo 연결해서 사용하기

설정

implementation("org.springframework.boot:spring-boot-starter-data-mongodb-reactive")
data:
    mongodb:
      host: ExternalIp
      port: 27017
      database: mydb # 사용할 데이터베이스 이름
      username: myid # MongoDB 사용자 이름 (옵션, 필요 시)
      password: mypw # MongoDB 비밀번호 (옵션, 필요 시)

yaml 파일을 연결 정보에 있던 것으로 수정해줍니다.

구현 코드

@Data
@Document(value="MyCollection")
public class MyCollection implements Serializable {
  private static final long serialVersionUID = 142466781L;

  @Id
  private String id;

  private String name;
}
@Repository
public interface MyCollectionRepository extends ReactiveMongoRepository<MyCollection, String> {
  Flux<MyCollection> findAll();
}

이제 해당 Repository를 연결해서 사용하면 됩니다.

728x90