MongoDB 설정과 연결에 관한 설명 글입니다.
유튜브 개발자 유미님께서 도움 주셨습니다.
크게 두 파트로 나눠진다.
먼저 오라클 서버를 빌린 후, SSH 키를 발급받는다. SSH 키페어는 비대칭 키 방식으로, 서버 인증과 사용자 인증을 하게 된다. 원격 서버에는 공개키가 저장되며, 사용자는 비밀키를 사용하여 원격 서버에 접속할 수 있다.
원격 서버에서 DB를 생성하고, 관리하기 위해서 먼저 원격 서버에 접속해야 한다.
배시 쉘로는 Git bash를 사용했다.
먼저 서버를 접근하고자 하는 디렉토리에 SSH 키를 위치시킨다. 바탕화면에서 접속하기 위해서, 로컬의 바탕화면으로 옮겼다.
Git bash에 처음 접속하면 홈 디렉토리(~)에 있으므로, cd 명령어로 바탕화면으로 이동한다.
cd /Desktop
리눅스 권한 참고 : https://itwiki.kr/w/%EB%A6%AC%EB%88%85%EC%8A%A4_%EA%B6%8C%ED%95%9C
#!/bin/bash는 셔뱅으로, 인터프리터로 bash를 사용함을 명시하는 역할을 한다.
(git bash 사용 시 필수는 아님)
chmod 400로 ssh 키에 읽기 권한을 부여하고,
ssh [OPTIONS] [USER@]:HOST 로 원격 서버에 접속한다.
#!/bin/bash
# ssh키의 읽기(400) 권한 부여
chmod 400 "ssh키이름.key"
# ssh 명령어로 원격 접속
# -i 옵션은 RSA 인증을 위한 비밀 키를 읽어 올 아이덴티티 파일을 선택
ssh -i "ssh키이름.key" ubuntu@원격서버ip주소
이후 Welcome to Ubuntu 문구가 뜨며 정상적으로 원격 서버에 접속됐음을 확인할 수 있다.
https://www.youngju.dev/blog/archives/How_to_install_mongodb_in_ubuntu
원격 서버 접속시, 먼저 sudo apt update 를 통해서 패키지 목록을 최신화 한다.
apt는 우분투에서 사용하는 패키지 관리 시스템이다.
이 명령어를 통해서 /etc/apt/sources.list와 /etc/apt/sources.list.d/ 내부의 사용자가 설치할 수 있는 패키지 목록을 최신화하고, 패키지 업그레이드 시 필요한 의존성 정보를 최신 상태로 유지할 수 있도록 한다.
sudo apt updatesudo apt upgradesudo apt install 패키지명이후 MongoDB 사용을 위한 패키지들을 설치한다.
#!/bin/bash
# 패키지 목록 최신 상태로 변경
sudo apt update
# 패키지 설치
# 파일 전송 및 다운로드. 데이터 암호화 전송 및 인증서 검사. 시스템 관리
sudo apt install wget curl gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release
# 몽고DB 6.0 버전의 GPG 키 다운로드(ASCII 형식으로 armor된 키)
# 이를 dearmor(ASCII -> binary 변환)하여 저장
curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-6.gpg
# 몽고DB 저장소를 시스템에 추가
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
# 추가된 저장소 패키지 목록 반영을 위해 다시 업데이트
sudo apt update
# 몽고DB 패키지 설치
sudo apt install mongodb-org
# 몽고DB 데몬에 관한 설정
# enable : 원격 서버 부팅시 데몬 자동 실행
# --now : 데몬을 즉시 실행
sudo systemctl enable --now mongod
# 몽고DB 데몬의 상태를 확인
sudo systemctl status mongod
참고 :
https://velog.io/@dahara3/서비스-Service-데몬-Daemon
https://junb51.tistory.com/9
데몬(daemon)은 백그라운드에서 실행되는 프로세스로, 사용자가 직접 제어하지 않고 백그라운드에서 여러 작업들을 한다. 일반적으로 부팅 시 자동 실행되어 작업이 완료되더라도 백그라운드에서 계속 실행된다.
윈도우에서는 서비스, 리눅스/우분투에서는 데몬이라는 이름으로 불리며 서비스와 데몬은 자주 혼용된다.
데몬은 일반적으로 프로세스명 접미사로 d를 붙인다. 리눅스에서는 데몬들을 service 파일로 설정하여 실행하고, systemd(마찬가지로 데몬)가 초기화 및 시스템 내의 다양한 데몬들을 관리를 담당한다. systemd는 OS부팅 시 가장 먼저 실행되어(1번 PID) 여러 데몬들을 초기화 한다.
/etc/systemd/system 위치에 존재하며, systemd 에 의해 관리됨systemctl start 서비스명systemctl stop 서비스명systemctl restart 서비스명systemctl reload 서비스명systemctl status 서비스명systemctl enable 서비스명systemctl disable 서비스명mongod 공식 문서 : https://www.mongodb.com/ko-kr/docs/manual/reference/program/mongod/
MongoDB 시스템의 기본 데몬 프로세스인 mongod를 사용하여 데이터 요청 처리, 데이터 액세스 관리, 백그라운드 관리 작업을 수행한다.
데몬 상태를 확인하는 명령어로 상태가 active임을 확인하면 된다.
이후 자동으로 MongoDB 데이터베이스 서버가 시작된다.
데몬 실행 후 가장 먼저 해야할 것은 config 파일에서 설정을 수정하는 것이다.
모든 IP에서 접근할 수 있도록 bindIp를 0.0.0.0으로 수정하고, 인증을 활성화 한다.
MySQL과 같은 RDB는 기본적으로 인증을 거치지만 mongod는 기본적으로 보안모델 없이 바로 실행되므로, 인증 활성화를 위해 설정해야 한다.
(인증하지 않을 경우 수많은 랜섬웨어 사례가 https://blog.alyac.co.kr/923 있으므로 반드시 설정해두자.)
sudo vi /etc/mongod.conf 명령어로 vi로 config 파일을 열어서 수정한다.
sudo vi /etc/mongod.conf
####### /etc/mongod.conf 내부에서 다음을 수정. 들여쓰기 주의 #######
# bindIp 수정 (everywhere)
net:
port: 27017
bindIp: 0.0.0.0
# 보안 추가
security:
authorization: enabled
이후에는 설정을 reload 하기 위해서 mongod를 중지하고, reload 한 뒤, 다시 실행한다.
# 한 줄 씩 실행
sudo systemctl stop mongod
# inactive 임을 확인
sudo systemctl status mongod
# reload
sudo systemctl daemon-reload
# 데몬 시작
sudo systemctl start mongod
# active 임을 확인
sudo systemctl status mongod
먼저 mongosh 명령어로 몽고DB의 쉘에 접속한다.
그리고 use admin으로 전환 후, db admin 권한을 가지는 유저를 생성하자.
# 한 줄 씩 실행
# 몽고DB 쉘 접속
mongosh
# 유저 생성을 위해 전환
use admin
# createUser() 로 유저 생성
db.createUser({user:"유저명", pwd:"비밀번호", roles:[{role:"root", db:"admin"}]})
그리고 ctrl+z를 통해 몽고DB 쉘에서 나온다.
다시 원격 서버로 돌아와서 포트를 열어주어야 한다.
몽고DB는 기본적으로 27017 포트를 사용하며, 이 포트를 열지 않으면 외부 클라이언트가 몽고DB에 접속할 수 없다.
그러므로 다음 명령어로 포트를 연다.
# 27017 포트로 들어오는 TCP 연결을 방화벽을 통해서 허용
sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
이제 bash에서 하는 MongoDB 관련 설정은 모두 완료되었다.
exit으로 원격 서버와의 연결을 해제하고 종료한다.
MySQL의 워크벤치처럼 GUI로 DB를 조회하고 관리하기 위해서 위 링크에서 MongoDB Compass를 설치한다.

compass 실행 후, 좌측의 New connection을 클릭해 연결을 생성한다.

Advanced Connection Options로 옵션을 설정한다.
먼저 General 탭의 Host로 원격서버ip:27017을 설정한다.

Authentication 탭으로 들어가서 아까 생성해둔 DB admin 권한을 가진 사용자의 username과 password를 입력한다.
인증 매커니즘을 Default로 설정 후, Save & Connect 버튼을 눌러서 저장 후 연결한다.
이후에 좌측의 saved connection을 통해서 연결이 가능하다.