MongoDB 연결 시간 초과 오류 원인 분석 및 해결 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
- Java 개발자 및 MongoDB 사용자
- 중간~고급 수준의 기술 이해가 필요
- 네트워크 구성, 서버 로드, 리소스 고갈 관련 문제 해결에 도움
핵심 요약
- 네트워크 문제 (예: 포트 차단, DNS 오류, VPC 지연)는
MongoTimeoutException
발생의 주요 원인 - 서버 과부하 (예: 쿼리 비효율, CPU/메모리 과다 사용)로 인한 연결 실패 및 대기 시간 증가
- 리소스 고갈 (예: JVM 스레드 풀 제한, 메모리 부족)으로 인한 연결 수락 거부 및 연결 종료
- MongoDB URI 설정 오류 (예: 잘못된 호스트/포트)는 즉시 연결 거부 및 소켓 예외 유발
섹션별 세부 요약
1. 네트워크 구성 문제
- 포트 차단: MongoDB 기본 포트
27017
이 방화벽 또는 보안 그룹에 의해 차단되면Connection Refused
오류 발생 - DNS 오류: 호스트 이름이 잘못 설정되면 DNS가 올바른 IP를 매핑하지 못해
MongoTimeoutException
유발 - 클라우드 인프라 지연: AWS/GCP의 VPC 패킷 손실 또는 높은 지연으로 인한 연결 지연
- 예시 로그:
MongoTimeoutException: Timed out after 30000 ms while waiting to connect
2. 서버 과부하
- 쿼리 비효율: 인덱스 미설정, 과도한 데이터 조회로 CPU 사용량 급증
- 디스크 I/O 병목: 캐시 미사용 시 데이터 검색 지연
- 네트워크 지연: 서버와 클라이언트 간 연결이 과도하게 부하로 인한 연결 실패
- 실제 사례: Fortnite 3.5 출시 시 MongoDB 서버 과부하로 17시간 서비스 중단
3. 리소스 고갈
- JVM 스레드 풀 제한: Spring Boot의 기본 스레드 풀(예: Tomcat 200 스레드) 초과 시 새로운 연결 생성 불가
- 메모리 부족: JVM 힙 메모리 과다 사용으로 인한 GC 지연 및 연결 종료
- MongoDB 서버 리소스 고갈: 캐시 미사용, 디스크 공간 부족으로 인한 처리 지연
4. 연결 풀 구성 오류
- 연결 풀 설정 미비:
MongoClient
의 연결 풀 크기, 대기 시간, 재연결 정책이 잘못 설정된 경우 - 리플리카 세트 구성 오류: 드라이버가 리플리카 세트의 주/부 서버를 찾지 못해 연결 실패
5. MongoDB URI 오류
- 호스트/포트 오류:
mongodb://wrong-host:wrong-port
설정으로 인한 즉시 연결 거부 - DNS 이름 불일치:
mongo-prod-server
대신mongo_db_-prod-server
와 같은 호스트 이름 오류
결론
- 네트워크 로그를 철저히 점검하여 포트 차단, DNS 오류 확인
- 쿼리 최적화 및 인덱스 사용으로 서버 과부하 방지
- JVM 및 MongoDB 서버 리소스 모니터링을 통해 리소스 고갈 사전 예방
- MongoDB URI 설정과 연결 풀 구성을 정확히 설정하고, 리플리카 세트 구성 검증
- 예제:
MongoClientOptions
에connectTimeoutMS
및maxConnectionIdleTimeMS
설정을 통해 연결 시간 관리