티스토리 뷰
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
🚀 전체 흐름 요약
- PostgreSQL + FerretDB를 쿠버네티스에 배포
- 기존 MongoDB → FerretDB로 데이터 이관 (dump → restore)
- 애플리케이션 Mongo URI 수정
- 전체 기능 테스트
- 트래픽 점진 전환 or 전체 전환
728x90
'DB' 카테고리의 다른 글
Kafka Connect MongoDB Sink Connector 등록/수정/삭제/조회 (0) | 2025.04.04 |
---|---|
MongoDB Sink Connector 설정에 유용한 주요 옵션들 (0) | 2025.04.03 |
Debezium을 사용한 Microsoft SQL Server 변경 데이터 캡처(CDC) 설정 가이드 (0) | 2025.03.18 |
Debezium을 SQL Server Express에서 사용할 수 있는 대안 방법 (0) | 2025.03.18 |
Kafka Connect MongoDB Sink Connector 설정 총정리 (0) | 2025.03.18 |