우분투에서만 mongoDB 접속이 안되는 건에 대하여.
금요일 웹종반 입학시험에 대한 공지를 확인한 후, 마지막 점검 차 EC2에서 내 서버를 키고, 내 웹 서비스를 시작 해봤다. EC2에게 제공 받는 가변 IP를 다시 적용하고 약간의 오류를 수정하면서
접속완료. 접속은 됐지만, DB에 접속 할 수 없다는 에러를 맞이했다.
Traceback (most recent call last):
File "/home/ubuntu/.local/lib/python3.10/site-packages/flask/app.py", line 2548, in call
return self.wsgi_app(environ, start_response)
File "/home/ubuntu/.local/lib/python3.10/site-packages/flask/app.py", line 2528, in wsgi_app
response = self.handle_exception(e)
File "/home/ubuntu/.local/lib/python3.10/site-packages/flask/app.py", line 2525, in wsgi_app
response = self.full_dispatch_request()
File "/home/ubuntu/.local/lib/python3.10/site-packages/flask/app.py", line 1822, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/ubuntu/.local/lib/python3.10/site-packages/flask/app.py", line 1820, in full_dispatch_request
rv = self.dispatch_request()
File "/home/ubuntu/.local/lib/python3.10/site-packages/flask/app.py", line 1796, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/home/sparta/app.py", line 29, in homework_get
result = list(db.fans.find({}, {'_id': False}))
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/cursor.py", line 1248, in next
if len(self.__data) or self._refresh():
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/cursor.py", line 1139, in _refresh
우분투에서 출력되는 에러 메시지를 보아하니, pymongo쪽 접속 에러로 의심 됐다. 그래서 먼저
pymongo가 제대로 설치되지 않아서 그런지 다시 인스톨하고, apt list —installed 명령어와 dpkg -i pymongo를 입력해서 목록을 보고 설치 유무를 판단하려고 했지만, 전자는 리스트가 너무 길어서 찾는 것을 포기하고, 후자는 따로 pymongo는 목록에서 뜨지 않았다. 이것은 python3.1 패키지에 포함되어 있기에 그렇다고 생각이 들었다.
그래서 testDB.py 을 새로 만들어 정말 DB접속의 문제인지 파악하기로 했다.
from pymongo import MongoClient
client = MongoClient('mongodb+srv://webuser:webuser@cluster0.whzzs4t.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta
def homework_get():
result = list(db.fans.find({}, {'_id': False}))
return result
print(homework_get())
-> db에서 fans 테이블에서 데이터를 가져와서 출력을 해봄으로써 우분투 서버에서는 어떤 결과가 나오는지 확인하고자 했다.
ubuntu@ip-172-31-7-181:/home/sparta$ python testDB.py
^CTraceback (most recent call last):
File "/home/sparta/testDB.py", line 12, in <module>
print(homework_get())
File "/home/sparta/testDB.py", line 8, in homework_get
result = list(db.fans.find({}, {'_id': False}))
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/cursor.py", line 1248, in next
if len(self.__data) or self._refresh():
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/cursor.py", line 1139, in _refresh
self.__session = self.__collection.database.client._ensure_session()
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1740, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1685, in __start_session
self._topology._check_implicit_session_support()
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/topology.py", line 538, in _check_implicit_session_support
self._check_session_support()
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/topology.py", line 554, in _check_session_support
self._select_servers_loop(
File "/home/ubuntu/.local/lib/python3.10/site-packages/pymongo/topology.py", line 250, in _select_servers_loop
self._condition.wait(common.MIN_HEARTBEAT_INTERVAL)
File "/usr/lib/python3.10/threading.py", line 324, in wait
gotit = waiter.acquire(True, timeout)
이러한 에러가 나오는 것을 확인하고, 확실히 DB 연결의 문제라고 확인 했다. 하지만 내 로컬 컴퓨터에서는 되는데, 우분투에선 안되는 것에 집중해보니. DB가 허용하는 IP설정에서 문제가 있을 수도 있겠다 싶었다. 그래서 검색을 통해보니, 관련된 내용이 있었고.
MongoDB 홈페이지에 NetworkAccess 탭에 0.0.0.0/0 주소를 추가해주니 해결!!
https://alphahexia.notion.site/33b5d472a10b48d398421cd90d50fd03
https://alphahexia.notion.site/22ec3abfc80a4b10b6fc85916b00e347