티스토리 뷰

728x90

📦 아키텍처 요약

           +------------------+
           |  Your App (API)  |
           +--------+---------+
                    |
             MongoDB Driver
                    |
         +----------v----------+
         |     FerretDB        |  (MongoDB 프로토콜 호환 서버)
         +----------+----------+
                    |
         PostgreSQL (JSONB 기반 저장)

1. ✅ Kubernetes에 PostgreSQL & FerretDB 배포

(1) PostgreSQL 설치 (Helm 사용)

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-postgres bitnami/postgresql \
  --set auth.username=ferret \
  --set auth.password=ferretpass \
  --set auth.database=ferretdb

my-postgres라는 이름으로 배포되며, PostgreSQL 서비스는 my-postgres-postgresql으로 접근 가능


(2) FerretDB 배포 (YAML로)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ferretdb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ferretdb
  template:
    metadata:
      labels:
        app: ferretdb
    spec:
      containers:
        - name: ferretdb
          image: ghcr.io/ferretdb/ferretdb
          ports:
            - containerPort: 27017
          env:
            - name: FERRETDB_POSTGRESQL_URL
              value: postgres://ferret:ferretpass@my-postgres-postgresql:5432/ferretdb
---
apiVersion: v1
kind: Service
metadata:
  name: ferretdb
spec:
  selector:
    app: ferretdb
  ports:
    - port: 27017
      targetPort: 27017
kubectl apply -f ferretdb.yaml

2. 📤 MongoDB 백업 및 가져오기

(1) 기존 MongoDB에서 백업

mongodump --uri=mongodb://old-mongo:27017 --out=/tmp/dump

(2) dump 파일을 Kubernetes로 가져오기

kubectl cp /tmp/dump my-pod:/tmp/dump

또는 initContainer를 사용하여 dump를 Mount할 수도 있음.

(3) FerretDB로 복원

mongorestore --uri=mongodb://ferretdb:27017 /tmp/dump

3. ⚙️ 앱 연동: MongoDB URI 변경

# application.properties (Spring Boot 예시)
spring.data.mongodb.uri=mongodb://ferretdb:27017/your-db

FerretDB는 MongoDB 클라이언트 호환이므로 기존 MongoTemplate, Mongoose 등 대부분 그대로 작동합니다.


4. 📡 서비스 연동 & 테스트

  • API 호출 → FerretDB → PostgreSQL 흐름 테스트
  • 검색, 저장, 수정, aggregation 등 확인
  • 성능 모니터링: PostgreSQL slow query log, kube metrics

5. 🧪 마이그레이션 체크리스트

항목 확인

mongorestore 성공 여부
앱에서 연결 정상 여부
CRUD 동작 확인
Aggregation Pipeline 테스트 ✅ (일부 제한 있음)
Index 성능 고려 ✅ (FerretDB는 제한적 지원)

🧊 (선택) PersistentVolume 구성 예시

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pgdata
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi

Helm 설치 시 PVC 이름 설정:

helm install my-postgres bitnami/postgresql \
  --set persistence.existingClaim=pgdata

🚀 전체 흐름 요약

  1. PostgreSQL + FerretDB를 쿠버네티스에 배포
  2. 기존 MongoDB → FerretDB로 데이터 이관 (dump → restore)
  3. 애플리케이션 Mongo URI 수정
  4. 전체 기능 테스트
  5. 트래픽 점진 전환 or 전체 전환
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함