-
[Express] 리눅스 서버에 MongoDB 설치하고 연결하기Others/database 2021. 10. 31. 21:50
Express 프로젝트에서 MongoDB를 사용하고 프로젝트를 설정하려 한다.
현재 필자의 프로젝트 상황은 다음과 같음을 유의해야 한다.
- 실시간 통신을 사용해 db에 로그성 데이터를 저장하고 있다.
- 실시간 통신을 제공하기 때문에 서버의 확장을 고려하고 있다.
Why in Linux(other Server)?
서버의 확장을 고려해서 데이터베이스와 서버를 분리해서 설정하나
다른 프로젝트에서는 왜 데이터베이스를 분리할까? 라는 생각이 들었다.- 확장성
병렬 구조의 Scale out 방식의 서버 증설이 필요하다면 DB 분리는 반드시 필요하다.
자원을 서비스 서버와 공유하지 않고 독점적으로 사용하므로 더 높은 성능을 기대할 수 있다. - 보안성
서비스와 데이터베이스를 분리함으로서, 두 서버 중 하나가 해킹을 당하더라도 영향을 덜 줄 수 있다.
데이터베이스 서버를 분리했을 때 제한적인 권한을 줘야할 것이다. - 백업
데이터베이스가 주기적으로 백업을 수행한다고 했을 때 분리된 데이터베이스는 백업 방법에 대한 선택의 폭이 넓다.
작성 기준 Ubuntu-18.04 를 사용하고 있는 서버에 MongoDB를 설치했다.
Ubuntu에 MongoDB 설치하기
1. MongoDB public GPG key를 가져온다.
sudo wget -qO -https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
2. 로컬 패키지 데이터베이스를 불러온다.
sudo apt-get update
3. MongoDB 패키지를 설치한다.
sudo apt-get install mongodb
4. 다음 명령어를 쳤을 때 아래의 사진과 같이 나오면 성공적으로 된 것이다.
mongo --eval 'db.runCommand({ connectionStatus: 1 })'
5.
경고가 있는 것 같지만mongo 명령어를 통해 MongoDB에 작업할 수 있다.MongoDB 포트 변경하기
MongoDB의 기본 포트는 27017이다.
필자의 프로젝트에서는 8888 포트로 설정해서 접근하려고 한다.
따라서 MongoDB 설정에서 포트를 변경하고 실행해주어야 한다.
1. MongoDB 설정 파일에 접근한다.
vi /etc/mongodb.conf
2. 설정 파일
을 보면 딱 변경해야 할 부분이 보인다.3. port의 주석을 삭제하고 사용하고 싶은 포트를 사용하자.
4. 파일을 저장하고 다음 명령어를 통해 mongodb 시스템을 새로 시작하자.
systemctl restart mongodb
5. 다음과 같은 명령어로 바뀐 포트에 접근이 되었는지 확인할 수 있다.
mongo --port 8888 --eval 'db.runCommand({ connectionStatus: 1 })'
+ MongoDB 시스템을 컨트롤하는 명령어들
# 시스템 상태 확인 systemctl status mongodb # 서비스 멈춤 systemctl stop mongodb # 서비스 시작 systemctl start mongodb # 서비스 재시작 systemctl restart mongodb # 서버 부팅시 자동 재시작 설정 systemctl enable mongodb # 서버 부팅시 자동 재시작 금지 systemctl disable mongodb
Express에서 MongoDB 연결하기
현재 로컬에서 작업하고 있는 Express가 원격 Linux 서버의 MongoDB에 어떻게 연결해야 할까?
tunnel-ssh 라이브러리를 이용해서 ssh 연결을 한 뒤 열려있는 port로만 연결하려고 한다.
순서는 다음과 같이 진행된다.
- tunnel-ssh로 Linux 서버에 ssh 연결
- ssh 연결이 됐을 때 해당하는 포트로 mongoDB 연결
1. 필요한 라이브러리 설치하기
# tunnel-ssh 설치 npm install tunnel-ssh # typescript 에서 tunnel-ssh 사용하기 위한 설치 npm install @types/tunnel-ssh # mongoDB 사용을 위한 라이브러리 npm install mongoose
2. tunnel-ssh을 이용한 ssh 연결 코드
- 꼭 Express의 app.ts 파일에 해당 함수를 실행해야 한다.
import tunnel from 'tunnel-ssh'; import initMongo from '../models'; const sshConfig: any = { username: process.env.DB_SSH_USER, password: process.env.DB_SSH_PASSWORD, host: process.env.DB_SSH_HOST, port: process.env.DB_SSH_PORT, dstHost: process.env.DB_HOST, dstPort: process.env.DB_PORT, // keepAlive: true }; function mongoLoader() { tunnel(sshConfig, function (error, server) { if (error) return console.log('Error!! ', error); if (server === null) return console.log('No Server!'); initMongo(); // keepAlive 상태이기 때문에 서버가 꺼지면 close 명령을 해주어야 한다. // process.on('SIGTERM', () => { // server.close(); // }); }); } export default mongoLoader;
3. mongoose 라이브러리 설정 코드
import mongoose from 'mongoose'; const dbConfig = { host: process.env.DB_HOST, port: process.env.DB_PORT, dbName: process.env.DB_NAME, }; const db = mongoose.connection; db.on('error', () => { console.log('MongoDB Connection Failed!'); }); db.once('open', () => { console.log('MongoDB Connected'); }); const initMongo = () => { mongoose.connect(`mongodb://${dbConfig.host}:${dbConfig.port}/${dbConfig.dbName}`); }; export default initMongo;
4. 서버를 실행시켜 연결 확인
참조
Install MongoDB Community Edition on Ubuntu — MongoDB Manual
Docs Home → MongoDB ManualMongoDB AtlasMongoDB Atlas is a hosted MongoDB service option in the cloud which requires no installation overhead and offers a free tier to get started.Use this tutorial to install MongoDB 5.0 Community Edition on LTS (long-ter
docs.mongodb.com
[Ubuntu] MongoDB 설치하기 (Ubuntu 20.04)
터미널 창에서 위의 명령어를 입력해 Description 부분을 확인하면 현재 설치된 우분투의 버전을 확인할 수 있다.터미널에서 다음 명령을 실행하여 https://www.mongodb.org/static/pgp/server-4.4.asc 에서 MongoDB
velog.io
'Others > database' 카테고리의 다른 글
리눅스에서 MySQL 설치하기 (0) 2021.09.28