🔥 MongoDB 운영 중 자주 발생하는 문제와 실전 대응법

MongoDB는 유연하고 강력한 NoSQL DB지만, 실 운영 환경에서는 다양한 이슈가 발생할 수 있습니다.
이 포스팅에서는 현장에서 자주 접하는 문제 상황과 그에 대한 대응 전략을 실제 경험 기반으로 정리해드립니다.


1️⃣ Oplog Overflow (오플로그 오버플로우)

  • 🔍 문제 현상: Secondary 노드 복제 실패, 에러 로그에 missing oplog records
  • 🧠 원인: Secondary가 복제 지연 상태일 때 Oplog에서 오래된 로그가 삭제됨

✅ 대응 방법

  • Replication 지연 확인: rs.printSlaveReplicationInfo()
  • Secondary 초기화 후 재시작 (전체 동기화)

🛡️ 예방 전략

  • Oplog 크기 충분히 확보 (디폴트보다 ↑)
  • 복제 지연 감시 → 알람 설정

2️⃣ Replication Lag (복제 지연)

  • 🔍 문제 현상: Secondary가 Primary 변경을 늦게 반영함
  • 🧠 원인: 느린 네트워크, Disk I/O 병목, 쿼리 부하

✅ 대응 방법

rs.printSlaveReplicationInfo()
  • 지연이 10초 이상이면 주의, 수 분이면 위험
  • Secondary가 과부하 상태인지 top 또는 mongotop으로 확인

🛡️ 예방 전략

  • 네트워크 품질 확인 (Private VPC 권장)
  • Secondary에 백업, 분석 작업 몰리지 않도록 분리

3️⃣ Lock 경합 (Write/Read 경합)

  • 🔍 문제 현상: 응답 지연, CPU 사용량 급증
  • 🧠 원인: 동일 컬렉션에 대한 동시 쓰기, 대용량 업데이트

✅ 대응 방법

  • db.currentOp()로 오래된 쿼리 확인
  • killOp(opid)로 불필요한 작업 중단

🛡️ 예방 전략

  • 배치 작업은 슬라이스로 나눠서 실행
  • 업데이트 쿼리는 조건 최소화, 필드 선택적으로 업데이트

4️⃣ 커넥션 수 초과 (Too Many Connections)

  • 🔍 문제 현상: "Too many connections" 에러
  • 🧠 원인: 커넥션 풀 미사용, 앱 재시도 로직 과잉

✅ 대응 방법

db.serverStatus().connections
  • 앱의 커넥션 풀 설정 확인 (e.g., Mongoose, Spring Data 등)
  • 최대 커넥션 수 조정: maxIncomingConnections 파라미터

🛡️ 예방 전략

  • 앱단에서 커넥션 풀 필수
  • Atlas에서는 Auto-scaling + 경고 알림 활용

5️⃣ 쿼리 성능 저하 (Index 미사용 / Full Collection Scan)

  • 🔍 문제 현상: 응답 시간 ↑, 서버 CPU 사용량 ↑
  • 🧠 원인: 인덱스 누락, 복합 조건 쿼리의 비효율적 설계

✅ 대응 방법

db.collection.find({ ... }).explain("executionStats")
  • COLLSCAN이면 인덱스 미사용
  • 적절한 인덱스 생성: db.collection.createIndex()

🛡️ 예방 전략

  • slow query log 활성화 & 주기적 리뷰
  • 복합 인덱스는 자주 쓰는 순서로 구성

6️⃣ 디스크 공간 부족

  • 🔍 문제 현상: MongoDB 다운, insert 불가
  • 🧠 원인: oplog, log, WiredTiger cache가 디스크를 가득 채움

✅ 대응 방법

  • db.stats()로 DB 사이즈 확인
  • logRotate 설정으로 로그 압축

🛡️ 예방 전략

  • 모니터링 도구에서 디스크 임계값 경고 설정
  • 데이터 아카이빙 전략 운영 (cold data 이동)

✅ 마무리 요약

  • Oplog & Replication Lag은 고가용성 핵심
  • Lock 경합, 쿼리 성능 저하는 실시간 트래픽 대응력에 영향
  • 모니터링 도구 & 경고 알람은 반드시 설정해야 함
  • 지속적인 점검 & 튜닝 없이는 MongoDB도 결국 느려집니다

도움이 되셨다면 공감과 구독도 부탁드립니다! 😊

+ Recent posts