Skip to main content

하나의 코드로 다양한 플랫폼에 배포가 가능한 소프트웨어를 작성하는 것은, 효율성을 중요시하는 개발자의 목표 중에 하나가 아닐까 한다. 필자는 페이스북의 React.js에 의해 node.js를 접하게 되었고, 네이티브 앱 개발을 위해 React Native를 이후에 접하게 되었다. MongoDB는 React.js와 연계된 미들웨어와 예제들이 많아 시작하게 되었는데, 오히려 다시 한번 자료구조를 위한 DB와 처리를 위한 앱이나 웹을 명확히 구분하기 좋은 계기가 되었다. 몇가지 기존의 DB와 차이가 많지만, 그 중 가장 큰 차이는 SQL류의 DB와는 다르게 Json과의 궁합 (SQL은 엑셀류의 스프레드시트와의 궁합이 좋다고 생각한다) 과 중첩 데이터의 구조를 통한 심도있는 체계화가 가능하다는 점에 있다.

몽고DB의 로고, 몽고는 몽골이 아니라 Humongous (어마어마하게 큰) DB의 약어로 만들어진 이름이다.

필자가 글을 쓰게 된건, 회사(Windows)의 환경에서 설치 프로그램으로 간편하게 설치 할 수 있었던 MongoDB 를 Mac OS X 에 설치 하면서 느꼈던 차이를 기억하기 위해 글을 남기게 되었다. 윈도우 설치 및 셋팅은 따로 시간이 되면 다루겠지만, 인터넷에 괜찮은 리뷰 및 설치 설명이 많아 후일로 미루도록 하겠다.

1. Terminal(CLI)로 MongoDB 설치

루비와 Git으로 개발된 macOS용 패키지 매니저. ‘macOS에서 필요하지만 애플에서 제공하지 않는 소프트웨어를 제공’ 이란 모토로 CLI (Command-line Interface). 애플에서 호스팅 하는 앱스토어 나 MacPorts와 달리, 오픈소스 개발자들이 Github를 기반으로 공유되고 있다. MongoDB를 맥에서 설치할때 다양한 방법이 있지만, 관리와 유지가 편한 Homebrew를 통한 설치 및 업데이트 관리를 선택했다.

X-Code Command-line Tools 설치

$ xcode-select --install

맥의 터미널 앱을 열어서, X-Code의 Command-line Tools를 우선 설치한다 (만약에 설치되어 있다면 다음으로 넘어가면 된다). Homebrew는 소스를 Git을 통해 공유받고, 클라이언트에서 X-Code를 통해 실행가능한 앱으로 빌드해서 사용하는 방식이다. 그래서 X-Code의 커멘드 라인 툴을 통한 빌드가 필요하다.

Homebrew 설치

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)

공식 홈페이지를 통하면 다음과 같은 명령을 복사해서 붙여넣기를 하도록 권장하고 있다. 비밀 번호를 넣고 설치를 하고 나면 커맨드 라인에서”brew” 라는 명령이 실행 되는 것을 확인할 수 있다. 

Homebrew에 Tap 설치

양산형 맥주 보다는 역시 수제 맥주가 맛난법! MacOS의 공식 앱 배포 채널을 통하지 않고, 각자의 포뮬러(맥주 제조법?)을 가지고 배포를 할 수 있는 시스템이 홈브류어리의 장점이다. MongoDB 같은 경우는 탄탄한 포뮬러를 지속적으로 업그레이드하고 있어 이쪽으로 Tap(맥주 추출기?)을 뚫어 유지 보수가 용이한 MongoDB 배포를 받게 설정한다.

$ brew tap mongodb/brew

MongoDB만의 Formular를 Tap을 뚫는 명령어 

MongoDB 설치

탭을 뚫고 나면, 이제 MongoDB를 마음껏 배포받아 자동 빌드해서 맥에서 쓸 수 있게 된다. 보통은 버전을 쓰지 않고, 항상 최신 유지 등으로 설치할 수 있다. 하지만, DB는 업그레이드에 신중해야하는 소프트웨어라 원하는 버전을 홈페이지에서 확인하고 설치한다. 필자의 경우는 4.4로 설치를 했다.

$ brew install mongodb-community@4.4

MongoDB, 무료 Community 4.4버전 설치

2. MongoDB 셋팅

여기까지 진행이 됐다면, 이제 드디어 MongoDB를 실행할 수 있다. 이제 조금만 참으면 모든 작업을 GUI 환경으로 진행할 수 있다. CLI에서 조금만 더 작업을 해보도록 한다. 홈브류를 통해 설치한 MongoDB는 총 3가지 바이너리를 제공하는데 다음과 같다.

– mongod (서버)
– mongos (쿼리 실행기)
– mongo (쉘, CLI 서비스)

일단 터미널에서 ‘mongo’를 입력하여 실행을 시켜본다.

 

$ mongo

필자의 경우 admin 계정과 비번 셋팅을 끝낸 상황에서 다음과 같이 출력이 된다. 처음 셋팅에는 위와 같은 화면이 나오지 않는다. 바로 외부 접속을 위한 관리자 계정 설정 과정이 필요하기 때문이다.

MongoDB root 계정 생성

$ mongo

> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB

> use admin;
switched to db admin

> db;
admin

맥 터미널($) 에서 MongoDB 쉘 서비스 (mongo)를 실행하면, MongoDB에서 제공하는 DB전용 쉘/CLI(>) 가 뜬다. 위 그림과 같이 입력해서 다음 명령이 ‘admin’ 데이터 베이스에서 이뤄 질 수 있게 한다.

root 계정 생성

admin 데이터 베이스의 위치에서 사용자 정보를 입력합니다.

> db.createUser({user: "아이디", pwd: "비밀번호", roles:["root"]});

다음 명령에 관리자가 원하는 admin “아이디“와 “비밀번호“를 입력하면, 관리자 계정이 생성된다. roles의 root는 MongoDB에서 기본 admin 계정으로 인식하게 해준다. 

MongoDB Config 변경

본격적인 서비스를 위한 외부 접속 ip bind 및 인증된 사용자만 접근할 수 있는 security 설정을 해줘야 정상적인 실행이 가능해진다.

  • Intel MacOS의 경우 /usr/local/etc/mongod.conf 파일을 수정하면 된다.
  • Arm MacOS의 경우 (ex. M1 프로세서 맥) /opt/homebrew/etc/mongod.conf 를 수정하면 된다.

각자 편한 텍스트 에디터로 해당 파일을 수정하면 된다. 필자의 경우 Visual Studio Code로 파일을 수정했다. 보통은 초기 설치시 파일 속이 비어있다. mongod.conf 파일에 이래와 같은 내용이 추가 되어야 한다.

# Network Setting
net:
  port: 27017
  bindIp: 127.0.0.1

# Security Setting
security:
  authorization: 'enabled'

MongoDB 서비스 실행

mongod.conf 파일을 수정하고 나면, 서비스를 개시한다. (기존에 실행되어 있다면, 서비스를 스톱하고 실행하거나 재실행 명령으로 Refresh한다) 우선 Homebrew에서 실행되고 있는 서비스를 확인한다.

$ brew services --all

Homebrew의 실행되는 서비스 목록을 다음과 같은 명령으로 확인할 수 있다.

실행이 되고 있었다면 config수정을 반영하기 위해 재실행을 하거나, 실행되고 있지 않았다면 실행을 해서 백엔드 서비스를 시작한다.

$ brew services start mongodb-community@4.4
$ brew services stop mongodb-community@4.4
$ brew services restart mongodb-community@4.4

위의 3가지 명령으로 MongoDB의 백그라운드 실행을 관리할 수 있다. (실행, 정지, 재시작)

3. MongoDB GUI 관리 툴 (MongoDB Compass) 설치 및 셋팅

드디어 쾌적한 GUI 환경으로 서버를 관리하고, 데이터를 수정하거나 확인할 수 있다! MongoDB 홈페이지의 MongoDB Compass GUI 클라이언트 앱을 다운 받고 인스톨러를 통해 설치한다. (Link)

앞으로 계속 사용하게 될 MongoDB GUI 환경인 MongoDB Compass의 첫 화면

MongoDB 서버 connect 주소

MongoDB Compass로 접속할때도 필요하지만, node.js나 기타 백엔드 개발시 해당 주소를 그대로 사용하기 때문에 본인의 주소를 알아두고 기록해 둘 필요가 있다. 공식은 다양한 방법이 있지만 개발 기준으로 (퍼블리시 단계에서는 약간의 수정이 필요하다) 다음과 같은 방식으로 접속할 수 있다.

mongodb://[Admin ID, 앞서 생성한 관리자 ID]:[Admin PW, 앞서 생성한 관리자 패스워드]@[config를 통해 설정한 통신 주소:포트]/?authSource=admin&readPreference=primary&ssl=false

예를 들어 admin 계정의 ID와 PW를 tomy, tomy1234로 지었다면, 나머지는 예제와 같이 설정한 주소와 포트로 주소를 만들면 된다.

mongodb://tomy:tomy1234@127.0.0.1:27017/?authSource=admin&readPreference=primary&ssl=false

위와 같이 각자 생성한 root/admin과 주소를 이용해 Back-end 앱과 MongoDB관리 툴로 접속해서 사용하면 된다.

드디어 셋팅이 완료되었다! 이리저리 만져보면 PHP + MySQL의 인트라넷 서비스와는 다른 쾌적함과 세심함을 느껴볼 수 있다.

Joonsoo Kim

Author Joonsoo Kim

Experience System Design

More posts by Joonsoo Kim

댓글 남기기