해결된 질문
작성
·
19
·
수정됨
0
logy.py", line 344, in selectservers_loop raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms), Timeout: 30s, Topology Description: <TopologyDescription id: 68df931a21806053224a3b2c, topology_type: Unknown, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>]> 121.166.34.222 - - [03/Oct/2025:09:11:39 +0000] "GET /board/list HTTP/1.1" 500 265 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" "-" [pid: 13|app: 0|req: 1/1] 121.166.34.222 () {42 vars in 806 bytes} [Fri Oct 3 09:11:09 2025] GET /board/list => generated 265 bytes in 30096 msecs (HTTP/1.1 500) 2 headers in 99 bytes (1 switches on core 0) 121.166.34.222 - - [03/Oct/2025:09:11:40 +0000] "GET /favicon.ico HTTP/1.1" 404 207 "http://34.80.206.171/board/list" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" "-" [pid: 12|app: 0|req: 1/2] 121.166.34.222 () {42 vars in 749 bytes} [Fri Oct 3 09:11:40 2025] GET /favicon.ico => generated 207 bytes in 6 msecs (HTTP/1.1 404) 2 headers in 87 bytes (2 switches on core 0)
이게 로그입니다. 챗지피티한테 물어보니
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
이게 원인이라는데 해결방법을 모르겠습니다.
답변 2
0
안녕하세요, 성현님.
말씀하신 것 처럼 현재 파이썬 코드에서 몽고디비로 접속을 할 수 없어서 생기는 문제로 보여집니다. 일단 몽고디비 도커가 정상 구동중인지 부터 확인해보셔야 할듯 합니다.
강의에서 설치한 포르테이너로 현재 몽고 DB 도커 컨테이너 상태를 확인해보시고 그에 맞는 조치를 해야 할듯 합니다. 여차하면 몽고DB 컨테이너, 볼륨, 이미지를 모두 삭제한 후 다시 처음부터 설치를 제대로 해보셔야 할 수도 있을듯 합니다.
from pymongo import MongoClient
try:
client = MongoClient("mongodb://localhost:27017", serverSelectionTimeoutMS=2000)
# 서버에 ping 명령 전송
client.admin.command("ping")
print("✅ MongoDB 연결 성공")
except Exception as e:
print("❌ MongoDB 연결 실패:", e)
위와 같은 테스트 코드를 작성해서 myweb 배포시에 해당 파일을 같이 도커로 배포 한 후 연결 테스트를 해볼 수도 있습니다. 위 파일은 외부에서 접속은 안되고 반드시 도커 내에서 실행되어야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 양성현님.
500 Internal Server Error는 주로 서버 측 오류로 인해 발생하며, 이 경우 로그에서 pymongo.errors.ServerSelectionTimeoutError
가 원인임을 알 수 있습니다. 이는 MongoDB에 연결할 수 없을 때 발생하곤 합니다. 해결 방법은 다음과 같습니다:
MongoDB 서버 실행 확인:
MongoDB 서버가 실행 중인지 확인해 보세요. 로컬에서 실행 중이라면 명령 프롬프트나 터미널을 열고 mongo
명령어를 통해 접속 가능한지 확인해 보면 됩니다.
MongoDB 포트와 주소 확인:
MongoDB가 기본 포트 (27017)에서 실행 중인지 확인하세요. 어떤 이유로 다른 포트에서 실행 중이라면, Flask 애플리케이션에서 잘못된 포트로 접근하고 있을 수 있습니다.
방화벽 설정 확인:
방화벽이 MongoDB 포트를 막고 있는지 확인하세요. 로컬 개발 환경이라면 방화벽 설정을 통해 포트 27017이 허용되는지 확인해야 합니다.
MongoDB URI 설정 확인:
Flask 앱 설정에서 MongoDB URI가 정확히 입력되었는지 확인하세요. 일반적으로 mongodb://localhost:27017/mydb
형식으로 입력됩니다.
애플리케이션 로그 확인 및 재시작:
가끔 애플리케이션 자체 오류로 인해 연결이 실패할 수 있으니, 애플리케이션 로그를 다시 한번 정밀하게 살펴보고 필요시 새로운 세션으로 애플리케이션을 재시작해 보세요.
제가 제공한 정보가 도움이 되었기를 바랍니다. 추가 지원이 필요하다면 아래 링크에서 유사한 사례를 참고해 보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
네 그 부분이 문제로 보입니다. 일단 반드시 몽고 컨테이너와 myweb 컨테이너가 동일 네트워크에 참여하고 있는지 먼저 확인하신 후, 같은 네트워크라면 myweb 에서 몽고 컨테이너는
mongo
라는 이름으로 접근할 수 있게 됩니다.보여주신 이미지에서 처럼
localhost
는 몽고 컨테이너가 아닌 플라스크가 구동중인 컨테이너를 지칭하는 것이기에 당연히 오류가 발생합니다.36. 프로젝트를 Docker 이미지로 만들어서 배포하기 강의 3:50초쯤 보시면 이 내용에 대해 이야기 하고 있습니다. 따라서 위의 코드는
위와 같이 수정되어야 할듯 싶습니다. 물론 여기서
mongo
는 본인의 환경에 맞는 몽고db의 도커 컨테이너 이름이 들어가야 합니다.