Mac OS Catalina(카탈리나) 버전에서 MongoDB 에러 핸들링

Hiz·2020년 3월 19일
0
post-thumbnail

회사 과제로 몽고디비와 몽구스를 사용할 일이 생겼다. 처음 사용해보는 NoSQL이었는데 본격적으로 사용하지 않았어서 그런가, 딱히 관계형 데이터베이스와 차이점을 느끼지 못했었다. 차이점이라고는 자동으로 생성되는 id가 해쉬 문자열이라는거...?

처음 설치부터 책을 참고했는데 맥 설치법이 달라져서 홈페이지에서 다시 보고 설치했지만 이것마저 맥 카탈리나 버전을 포함하진 못했던 거 같다...

그 이유는 몽고디비를 사용하던 와중에 문제가 생겼다. 잘 접속되는 몽고디비 서버가 접속이 안되는 현상이 벌어진 것이다. 장장 7시간동안 구글링하고 몽고디비를 삭제하고 재설치하기를 반복하다가 컴퓨터 포맷까지 생각했다. 하지만 회사 과제라는 기간이 정해져 있다보니 포맷하고 다시 node부터 설치하려는 생각에 눈 앞이 깜깜하기만 했다.

모든 맥 카탈리나에서 나랑 똑같은 문제가 발생하지 않을 수도 있다. 겨우겨우 찾은 맥 카탈리나용 설치법 블로그를 찾았지만 나한테는 먹히지 않았기 때문이다.

(이 글은 맥 카탈리나 버전 + brew 설치를 기준으로 설명되어 있습니다.)


원인: 맥 카탈리나는 루트 디렉토리의 변경을 허용하지 않는다!

보통 지금까지의 몽고디비 설치 튜토리얼은 마지막에 sudo mkdir -p /data/db 를 터미널에 입력해서 데이터베이스 폴더를 만들도록 되어있다. 몽고디비는 자동으로 폴더명을 인식해 데이터를 이 곳에 저장하기 때문이다. 하지만 카탈리나에서는 폴더 생성부터 되지 않는다!

맥 카탈리나 버전부터 바뀐 업데이트가 있는데 루트 디렉토리에 변경사항을 허용하지 않는다는 것이다. 기존에 몽고디비 서버를 실행시켰을 때 자동으로 루트 디렉토리에서 /data/db 라는 폴더명을 찾고 접속시켰다면 이젠 폴더 생성이 되지 않으니 폴더를 찾지 못하는 현상이 일어나게 된다. (하지만 처음엔 왜 됐는 지 아직도 의문이다;;)

brew를 통해서 설치했다면 brew services start mongodb-community를 터미널에 입력해서 몽고디비 서버를 실행시키라고 되어있다. (보통 'start'는 mysql처럼 계속 서버가 켜져있고 'run'을 입력했다면 몽고디비 사용할 때마다 서버를 켜줘야 한다고 되어있지만... 나에게는 이런 거 조차 소용이 없었음) 하지만 이미 에러의 늪에 빠진 분들이라면 분명 brew services로 몽고디비 서버를 켜줬어도 'mongod' 또는 'mongo' 명령어가 듣지 않을 것이다. ('mongod'는 몽고디비 서버 키는 명령어, 'mongo'는 몽고디비 CLI 명령어입니다.)

brew services 명령어를 통해서 mongodb-community가 분명 실행중이라고 되어있어도 mongo 명령어가 듣지 않는다. (Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused : 뭐시기라는 에러가 뜬다...;;)

그럼 'mongod' 명령어를 입력하면? exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating 라고 뜬다. 여기서 나는 단서를 겨우 얻을 수 있었다. 폴더를 분명 처음에 mkdir로 만들어줬다고 생각했는데 사실은 위의 이유로 만들어지지 않았던 것이었다...!

해결법: Home directory에 DB폴더를 직접 만들자!

홈 디렉토리는 finder에서 Go 탭을 이용해 Home 디렉토리로 갈 수 있다. 여기에 data폴더와 그 안에 db 폴더를 생성해주자. 이게 끝이 아니다. mongod 명령어는 기본적으로 루트 디렉토리에서 폴더를 찾게 되어있다. 하지만 루트 디렉토리에는 폴더생성이 되지 않으니 강제적으로 홈 디렉토리로 가게끔 만들어야 한다.

그렇다면?

mongod --dbpath ~/data/db 명령어를 입력하면 몽고디비 서버가 잘 켜지는 것을 볼 수가 있다...(감격) '--dbpath'라는 명령어는 인위적으로 실행 폴더 경로를 바꾸어서 실행시켜주는 명령어이다. mongod가 잘 실행됐다면 다른 터미널창을 켜서 'mongo' 명령어를 입력해도 이것 역시 잘 실행되는 걸 볼 수 있을 것이다.


혹시 다른 방법으로 해결하신 분이 있다면 의견 주세요!

profile
Back-end engineer / Full-stack developer

3개의 댓글

comment-user-thumbnail
2021년 3월 2일

이 문제 때문에 막혔는데,,, 구글링으로 이 글을 찾았습니다!!!!!!!!!!!!!!!!!! 감사해요🤗

1개의 답글
comment-user-thumbnail
2022년 4월 13일

와진짜 한 4시간넘게 번역돌리고찾고있었는데 감사합니다진짜 하 ㅋㅋ

답글 달기