우분투에 MongoDB 설치하는 방법: 종합 가이드
소개
MongoDB는 고성능, 고가용성, 그리고 쉬운 확장성을 제공하는 인기 있는 오픈 소스 NoSQL 데이터베이스입니다. 대량의 비정형 또는 반정형 데이터를 저장하고 관리하도록 설계되어, 복잡하고 빠르게 변화하는 데이터 구조를 다루는 현대 애플리케이션에 탁월한 선택입니다.
MongoDB 간략 개요
MongoDB는 BSON(Binary JSON)이라 불리는 유연한 JSON 유사 문서에 데이터를 저장합니다. 이 문서 지향 접근법은 동적 스키마를 허용하여, 동일한 컬렉션 내에 서로 다른 구조의 문서를 저장할 수 있습니다. MongoDB의 주요 특징은 다음과 같습니다:
- 문서 지향 저장소: 데이터가 행과 열 대신 유연한 문서에 저장됩니다.
- 완전한 인덱스 지원: MongoDB는 모든 속성에 대해 인덱싱을 지원합니다.
- 복제 및 고가용성: 내장 복제 및 자동 장애 조치를 제공합니다.
- 샤딩: 데이터를 여러 머신에 분산할 수 있습니다.
- 집계: 강력한 집계 프레임워크를 제공하여 데이터 분석이 가능합니다.
왜 우분투에서 MongoDB를 사용할까?
우분투는 사용하기 쉽고 정기적인 업데이트와 강력한 커뮤니티 지원으로 유명한 가장 인기 있는 리눅스 배포판 중 하나입니다. MongoDB와 우분투가 훌륭한 조합인 이유는 다음과 같습니다:
- 호환성: MongoDB는 우분투에서 공식 패키지로 잘 지원됩니다.
- 성능: 우분투의 효율적인 자원 관리가 MongoDB의 고성능 기능을 보완합니다.
- 장기 지원: 우분투 LTS(Long Term Support) 버전과 MongoDB 모두 장기 지원을 제공하여 안정적인 운영 환경을 보장합니다.
- 큰 커뮤니티: MongoDB와 우분투 모두 활발한 대규모 커뮤니티가 있어 문제 해결이 용이합니다.
- 보안: 우분투의 강력한 보안 기능과 MongoDB의 보안 옵션이 결합되어 데이터 보호에 견고한 기반을 제공합니다.
사전 준비 사항
설치 과정을 시작하기 전에 시스템이 필요한 요구 사항을 충족하는지, 적절한 권한이 있는지 확인하는 것이 중요합니다. 우분투에 MongoDB를 설치하기 위한 사전 준비 사항을 살펴보겠습니다.
지원되는 우분투 버전
MongoDB는 다음 우분투 LTS(Long Term Support) 릴리스를 지원합니다:
- 우분투 20.04 LTS (Focal Fossa)
- 우분투 18.04 LTS (Bionic Beaver)
- 우분투 16.04 LTS (Xenial Xerus)
최적의 성능과 보안을 위해 최신 LTS 버전의 우분투 사용을 권장합니다. 이 가이드는 우분투 20.04 LTS를 중심으로 설명하지만, 다른 지원 버전에서도 유사한 절차를 따릅니다.
시스템 요구 사항
MongoDB는 다양한 자원 환경에서 실행 가능하지만, 최적의 성능을 위해 다음 권장 사항을 고려하세요:
-
CPU:
- 최소: 2코어
- 권장: 프로덕션 환경에서는 4코어 이상
-
RAM:
- 최소: 4GB
- 권장: 프로덕션 환경에서는 8GB 이상
-
스토리지:
- 최소: 10GB 여유 공간
- 권장: 성능 향상을 위한 SSD
-
아키텍처:
- 64비트 시스템 (MongoDB는 32비트 시스템을 지원하지 않음)
필요한 권한
MongoDB를 설치하려면 우분투 시스템에서 sudo 권한이 필요합니다. 즉, root 사용자로 로그인했거나 sudo를 사용해 root 권한으로 명령을 실행할 수 있는 계정이어야 합니다.
사용자가 sudo 권한이 있는지 확인하려면 터미널에서 다음 명령을 실행하세요:
sudo -v
비밀번호를 묻고 오류 없이 명령이 실행되면 sudo 권한이 있는 것입니다.
추가 요구 사항
-
인터넷 연결: MongoDB와 의존성 패키지를 다운로드하려면 활성 인터넷 연결이 필요합니다.
-
터미널 접근: 설치 및 구성 과정 대부분이 터미널에서 이루어지므로 CLI 사용에 익숙해야 합니다.
-
패키지 관리자: 시스템의 패키지 관리자(apt)가 정상 작동하는지 확인하세요.
-
방화벽 설정: UFW 같은 방화벽이 활성화되어 있다면 MongoDB 트래픽을 허용하도록 설정해야 할 수 있습니다.
-
SELinux: SELinux가 활성화되어 있다면 MongoDB가 정상 작동하도록 설정이 필요할 수 있습니다.
시스템 업데이트
MongoDB 설치 전에 우분투 시스템이 최신 상태인지 확인하는 것이 중요합니다. 이 단계는 다음과 같은 이유로 중요합니다:
- 보안: 업데이트에는 중요한 보안 패치가 포함됩니다.
- 안정성: 최신 업데이트는 버그 수정과 시스템 안정성 향상을 제공합니다.
- 호환성: 최신 패키지를 유지하면 MongoDB 설치 중 호환성 문제를 예방할 수 있습니다.
시스템 업데이트의 중요성
시스템을 최신 상태로 유지하는 것은 건강하고 안전한 우분투 설치를 유지하는 기본입니다. 최신 보안 패치, 버그 수정, 기능 개선을 보장하며, MongoDB 같은 새 소프트웨어 설치 시 충돌을 방지하고 호환 가능한 최신 버전을 사용하게 합니다.
우분투 업데이트 명령어
우분투 시스템을 업데이트하려면 다음 단계를 따르세요:
-
터미널을 엽니다.
Ctrl + Alt + T
를 누르거나 우분투 대시보드에서 "Terminal"을 검색하세요. -
먼저 패키지 목록을 업데이트합니다:
sudo apt update
이 명령은 사용 가능한 패키지와 버전 목록을 갱신하지만 설치나 업그레이드는 하지 않습니다.
-
업데이트가 완료되면 설치된 패키지를 최신 버전으로 업그레이드합니다:
sudo apt upgrade
업그레이드할 패키지 목록이 표시되면 'Y'를 입력하고 Enter를 눌러 진행하세요.
-
(선택 사항) 새 패키지 설치나 기존 패키지 제거가 필요한 모든 패키지를 최신으로 업그레이드하려면 다음 명령을 사용하세요:
sudo apt full-upgrade
이 명령은 충돌 해결을 위해 일부 패키지를 제거할 수 있으니 주의하세요.
-
업그레이드가 완료되면 모든 업데이트가 제대로 적용되도록 시스템을 재부팅하는 것이 좋습니다:
sudo reboot
업데이트 확인
시스템 재부팅 후 다음 명령으로 우분투 버전을 확인하여 업데이트가 성공했는지 검증할 수 있습니다:
lsb_release -a
이 명령은 우분투 배포판 정보와 버전 번호를 표시합니다.
시스템을 최신 상태로 유지하면 MongoDB 설치 과정에서 호환성 문제나 보안 취약점 발생 가능성을 줄일 수 있습니다.
MongoDB 설치
시스템이 최신 상태가 되었으니 이제 MongoDB 설치를 진행할 수 있습니다. MongoDB 저장소 추가, 공개 키 가져오기, 패키지 설치 과정을 단계별로 안내합니다.
MongoDB 저장소 추가
MongoDB는 기본 우분투 저장소에 포함되어 있지 않으므로 공식 저장소를 추가해야 합니다.
-
먼저 MongoDB 저장소를 소스 목록에 추가합니다. 다음 명령으로 MongoDB 리스트 파일을 생성하세요:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
참고: 이 명령은 우분투 20.04 (Focal Fossa)와 MongoDB 5.0용입니다. 다른 우분투 버전이나 MongoDB 버전을 사용한다면 명령을 적절히 수정해야 합니다.
공개 키 가져오기
-
설치할 패키지의 신뢰성을 보장하기 위해 MongoDB 공개 GPG 키를 가져옵니다:
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
성공하면 "OK" 메시지가 출력됩니다.
MongoDB 패키지 설치
-
저장소 추가 및 키 가져오기 후 패키지 목록을 업데이트합니다:
sudo apt update
-
이제 MongoDB를 설치합니다:
sudo apt install -y mongodb-org
이 명령은 다음 패키지를 설치합니다:
mongodb-org
(아래 네 개 구성 요소 패키지를 자동 설치하는 메타패키지)mongodb-org-server
(mongod 데몬 및 관련 설정, 초기화 스크립트)mongodb-org-mongos
(mongos 데몬)mongodb-org-shell
(mongo 셸)mongodb-org-tools
(데이터 임포트/익스포트, 통계 등 여러 도구 포함)
설치 확인
-
설치가 완료되면 다음 명령으로 MongoDB 버전을 확인할 수 있습니다:
mongod --version
설치한 MongoDB 버전이 표시됩니다.
-
MongoDB는 설치 후 자동으로 시작됩니다. 상태를 확인하려면:
sudo systemctl status mongod
서비스가 활성(실행 중) 상태인지 확인할 수 있습니다.
-
MongoDB가 실행 중이 아니면 다음 명령으로 시작하세요:
sudo systemctl start mongod
-
시스템 재부팅 시 MongoDB가 자동 시작되도록 설정하려면:
sudo systemctl enable mongod
MongoDB 구성
MongoDB 설치가 완료되면 필요에 맞게 구성하는 단계가 이어집니다. 이 섹션에서는 구성 파일 이해, 기본 설정, 인증 활성화를 통한 보안 설정 방법을 다룹니다.
구성 파일 이해하기
MongoDB의 주요 구성 파일은 mongod.conf
입니다. 우분투에서는 일반적으로 /etc/mongod.conf
에 위치하며, YAML 형식으로 작성되어 있습니다.
파일 내용을 보려면 다음 명령을 사용하세요:
sudo nano /etc/mongod.conf
기본 구성 설정
주요 설정 항목은 다음과 같습니다:
-
bindIp: 기본값은 127.0.0.1로, 로컬호스트에서만 연결을 허용합니다. 원격 접속을 허용하려면 변경해야 합니다.
-
port: 기본 포트는 27017입니다. 필요에 따라 변경 가능하며, 방화벽 규칙도 함께 업데이트해야 합니다.
-
dbPath: MongoDB 데이터 파일 저장 위치로 기본값은
/var/lib/mongodb
입니다. -
logPath: 로그 파일 저장 위치로 기본값은
/var/log/mongodb/mongod.log
입니다.
구성 파일 예시는 다음과 같습니다:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# where to write logging data
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# where and how to store data
storage:
dbPath: /var/lib/mongodb
MongoDB 보안 설정 (인증 활성화)
기본적으로 MongoDB는 인증을 요구하지 않습니다. 프로덕션 환경에서는 반드시 인증을 활성화해야 합니다.
-
먼저 MongoDB 셸을 실행합니다:
mongo
-
admin 데이터베이스로 전환합니다:
use admin
-
관리자 사용자를 생성합니다:
db.createUser( { user: "adminUser", pwd: "securePassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
"adminUser"와 "securePassword"는 원하는 사용자명과 비밀번호로 변경하세요.
-
MongoDB 셸을 종료합니다:
exit
-
MongoDB 구성 파일을 편집합니다:
sudo nano /etc/mongod.conf
-
보안 섹션을 추가하거나 수정하여 인증을 활성화합니다:
security: authorization: enabled
-
파일을 저장하고 편집기를 종료합니다.
-
변경 사항 적용을 위해 MongoDB를 재시작합니다:
sudo systemctl restart mongod
이제 모든 연결에 인증이 필요합니다. 인증을 사용해 MongoDB에 접속하려면 다음과 같이 명령을 실행하세요:
mongo -u adminUser -p --authenticationDatabase admin
비밀번호 입력을 요청받습니다.
실제 환경에서는 사용자명과 비밀번호를 안전한 값으로 반드시 변경하세요.
MongoDB 시작 및 중지
MongoDB 서비스 관리는 데이터베이스 운영에 필수적입니다. 이 섹션에서는 우분투에서 MongoDB 서비스를 시작, 중지, 재시작하고 상태를 확인하는 방법을 설명합니다.
MongoDB 서비스 시작
MongoDB가 실행 중이 아니면 다음 명령으로 시작할 수 있습니다:
sudo systemctl start mongod
이 명령은 systemd(우분투의 시스템 및 서비스 관리자)를 통해 MongoDB 서비스를 시작합니다.
MongoDB 서비스 중지
유지보수나 설정 변경을 위해 MongoDB를 중지하려면 다음 명령을 사용하세요:
sudo systemctl stop mongod
MongoDB 서비스를 정상적으로 종료합니다.
MongoDB 서비스 재시작
구성 파일 변경 후 또는 서비스를 재시작하려면 다음 명령을 사용합니다:
sudo systemctl restart mongod
서비스를 중지했다가 다시 시작합니다.
서비스 상태 확인
MongoDB 서비스 상태를 확인하려면 다음 명령을 실행하세요:
sudo systemctl status mongod
서비스가 활성(실행 중)인지, 비활성(중지)인지, 실행 시간 및 최근 로그를 확인할 수 있습니다.
출력 예시는 다음과 같습니다:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-05-22 15:30:45 UTC; 2h 35min ago
Docs: https://docs.mongodb.org/manual
Main PID: 1234 (mongod)
Memory: 178.0M
CGroup: /system.slice/mongod.service
└─1234 /usr/bin/mongod --config /etc/mongod.conf
부팅 시 MongoDB 자동 시작 설정
시스템 부팅 시 MongoDB가 자동으로 시작되도록 하려면 다음 명령을 실행하세요:
sudo systemctl enable mongod
자동 시작을 비활성화하려면:
sudo systemctl disable mongod
MongoDB 로그 확인
문제 해결이나 활동 모니터링을 위해 로그 파일을 실시간으로 확인하려면 다음 명령을 사용하세요:
sudo tail -f /var/log/mongodb/mongod.log
로그 뷰를 종료하려면 Ctrl+C를 누르세요.
구성 파일(/etc/mongod.conf
) 변경 후에는 반드시 서비스를 재시작해야 변경 사항이 적용됩니다.
MongoDB 연결하기
MongoDB가 설치, 구성, 실행되었으니 이제 연결하고 기본 작업을 수행하는 방법을 알아봅니다. MongoDB 셸을 사용하여 대화형 자바스크립트 인터페이스로 작업합니다.
MongoDB 셸 사용법
-
터미널에서 MongoDB 셸을 시작하려면:
mongo
인증이 활성화된 경우 사용자명과 비밀번호로 접속해야 합니다:
mongo -u adminUser -p --authenticationDatabase admin
비밀번호 입력을 요청받습니다.
-
접속하면 다음과 같은 프롬프트가 표시됩니다:
MongoDB shell version v5.0.x connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 5.0.x >
데이터베이스 및 컬렉션 생성
-
새 데이터베이스를 생성하거나 기존 데이터베이스로 전환하려면
use
명령을 사용하세요:use myNewDatabase
데이터베이스가 없으면 생성되고 전환됩니다.
-
새 컬렉션을 생성하려면 문서를 삽입하면 됩니다:
db.myCollection.insertOne({ name: "John Doe", age: 30, city: "New York" })
myCollection
컬렉션이 생성되고 문서가 삽입됩니다.
기본 CRUD 작업
기본 생성(Create), 조회(Read), 수정(Update), 삭제(Delete) 작업을 수행해 봅시다:
-
여러 문서 삽입:
db.myCollection.insertMany([ { name: "Jane Smith", age: 25, city: "San Francisco" }, { name: "Bob Johnson", age: 35, city: "Chicago" } ])
-
문서 조회:
// 컬렉션 내 모든 문서 조회 db.myCollection.find() // 특정 조건에 맞는 문서 조회 db.myCollection.find({ city: "New York" }) // 단일 문서 조회 db.myCollection.findOne({ name: "John Doe" })
-
문서 수정:
// 단일 문서 수정 db.myCollection.updateOne( { name: "John Doe" }, { $set: { age: 31 } } ) // 다수 문서 수정 db.myCollection.updateMany( { city: "New York" }, { $set: { country: "USA" } } )
-
문서 삭제:
// 단일 문서 삭제 db.myCollection.deleteOne({ name: "Jane Smith" }) // 다수 문서 삭제 db.myCollection.deleteMany({ age: { $lt: 30 } })
-
MongoDB 셸 종료:
exit
추가 유용한 명령어
- 모든 데이터베이스 보기:
show dbs
- 현재 데이터베이스의 모든 컬렉션 보기:
show collections
- 도움말 표시:
help
이것들은 기본 작업에 불과하며, MongoDB는 인덱싱, 집계, 텍스트 검색 등 훨씬 더 고급 기능을 제공합니다. 기본에 익숙해지면 더 복잡한 쿼리와 작업을 탐색해 보세요.
원격 접속 활성화 (선택 사항)
기본적으로 MongoDB는 로컬호스트에서만 연결을 허용합니다. 그러나 경우에 따라 원격 머신에서 MongoDB에 접속해야 할 수 있습니다. 이 섹션에서는 원격 접속을 활성화하는 방법을 안내합니다.
원격 접속을 위한 구성 변경
-
MongoDB 구성 파일을 엽니다:
sudo nano /etc/mongod.conf
-
구성 파일에서
net
섹션을 찾습니다. 다음과 유사할 것입니다:net: port: 27017 bindIp: 127.0.0.1
-
bindIp
값을 모든 IP 주소에서 접속 가능하도록 변경합니다:net: port: 27017 bindIp: 0.0.0.0
이렇게 하면 MongoDB가 모든 네트워크 인터페이스에서 연결을 수신합니다.
-
파일을 저장하고 편집기를 종료합니다.
-
변경 사항 적용을 위해 MongoDB를 재시작합니다:
sudo systemctl restart mongod
방화벽 설정 구성
UFW 같은 방화벽이 활성화되어 있다면 MongoDB 기본 포트(27017)를 열어야 합니다.
-
UFW에서 포트를 열려면:
sudo ufw allow 27017
-
UFW 상태 확인:
sudo ufw status
보안 고려사항
원격 접속 활성화는 보안 위험을 증가시킬 수 있으므로 다음 사항을 반드시 고려하세요:
-
강력한 인증 사용: 인증을 활성화하고 모든 사용자에 대해 강력하고 고유한 비밀번호를 사용하세요.
-
SSL/TLS 활성화: 모든 연결에 대해 SSL/TLS를 설정하여 전송 중 데이터를 암호화하세요.
-
VPN 또는 SSH 터널 사용: MongoDB를 인터넷에 직접 노출하기보다 VPN이나 SSH 터널을 통해 원격 접속을 고려하세요.
-
IP 화이트리스트 구현: 가능하면 방화벽에서 특정 IP 주소나 범위만 허용하도록 설정하세요.
-
MongoDB 최신 상태 유지: 최신 보안 패치를 위해 MongoDB를 정기적으로 업데이트하세요.
원격 클라이언트에서 접속하기
원격 접속을 활성화한 후, 다음과 같은 연결 문자열로 원격 머신에서 접속할 수 있습니다:
mongodb://username:password@server_ip_address:27017/database_name
username
, password
, server_ip_address
, database_name
을 실제 값으로 바꾸세요.
원격 접속 확인
-
다른 머신에서 MongoDB 셸로 접속 테스트:
mongo --host server_ip_address -u username -p --authenticationDatabase admin
server_ip_address
와username
을 실제 값으로 바꾸고 비밀번호를 입력하세요. -
접속 성공 시 MongoDB 셸 프롬프트가 표시됩니다.
원격 접속은 신중하게 활성화하고, 외부 연결 시 항상 보안을 최우선으로 고려하세요.
MongoDB 백업 및 복원
데이터 백업은 데이터 손실 방지에 매우 중요합니다. 이 섹션에서는 MongoDB 데이터베이스 백업 생성과 복원 방법을 다룹니다.
데이터베이스 백업 생성
MongoDB는 주로 mongodump
도구를 사용해 백업을 생성합니다.
mongodump 사용법
mongodump는 데이터베이스 내용을 바이너리 형식으로 내보내는 유틸리티입니다.
-
모든 데이터베이스 백업:
mongodump --out /path/to/backup/directory
-
특정 데이터베이스 백업:
mongodump --db database_name --out /path/to/backup/directory
-
인증이 활성화된 경우:
mongodump --username your_username --password your_password --authenticationDatabase admin --out /path/to/backup/directory
백업에서 복원하기
복원은 mongorestore
유틸리티를 사용합니다.
mongodump 백업에서 복원
-
모든 데이터베이스 복원:
mongorestore /path/to/backup/directory
-
특정 데이터베이스 복원:
mongorestore --db database_name /path/to/backup/directory/database_name
-
인증이 활성화된 경우:
mongorestore --username your_username --password your_password --authenticationDatabase admin /path/to/backup/directory
MongoDB 백업 모범 사례
-
정기 백업: 데이터 변경 빈도에 따라 정기적으로 백업 일정을 잡으세요.
-
오프사이트 저장: 물리적 재해 대비를 위해 백업을 주 데이터베이스와 다른 장소에 보관하세요.
-
백업 검증: 정기적으로 복원 테스트를 수행해 백업이 정상 작동하는지 확인하세요.
-
시점 복구: 프로덕션 환경에서는 oplog를 활용한 시점 복구를 고려하세요.
-
압축 사용: 대용량 데이터베이스는 압축하여 백업 크기를 줄이세요.
mongodump --gzip --out /path/to/backup/directory
-
자동화: 스크립트나 도구를 사용해 백업 과정을 자동화하세요.
백업 상태 모니터링
백업 진행 상황은 MongoDB 로그 파일을 확인하여 모니터링할 수 있습니다:
tail -f /var/log/mongodb/mongod.log
안정적인 운영을 위해 백업 및 복원 절차를 정기적으로 점검하세요.
MongoDB 업그레이드
MongoDB를 최신 상태로 유지하는 것은 보안, 성능, 새로운 기능 이용에 중요합니다. 우분투 시스템에서 MongoDB를 업그레이드하는 방법을 안내합니다.
현재 버전 확인
업그레이드 전에 현재 MongoDB 버전을 확인하세요:
mongod --version
MongoDB 업그레이드 절차
-
패키지 목록 업데이트:
sudo apt update
-
데이터 백업:
업그레이드 전 반드시 데이터를 백업하세요. 백업 방법은 이전 섹션을 참고하세요.
-
MongoDB 서비스 중지:
sudo systemctl stop mongod
-
MongoDB 패키지 업그레이드:
sudo apt upgrade mongodb-org
저장소에 있는 최신 버전으로 업그레이드됩니다.
-
MongoDB 서비스 시작:
sudo systemctl start mongod
-
새 버전 확인:
mongod --version
특정 버전으로 업그레이드
최신 버전 대신 특정 버전으로 업그레이드하려면 버전 번호를 명시하세요:
sudo apt install mongodb-org=X.Y.Z mongodb-org-server=X.Y.Z mongodb-org-shell=X.Y.Z mongodb-org-mongos=X.Y.Z mongodb-org-tools=X.Y.Z
X.Y.Z
를 원하는 버전 번호로 바꾸세요.
메이저 버전 업그레이드 시 주의사항
예: 4.x에서 5.x로 업그레이드할 때는 다음을 확인하세요:
-
호환성 확인: 현재 버전에서 바로 업그레이드 가능한지 확인하세요. 중간 버전 업그레이드가 필요할 수 있습니다.
-
릴리즈 노트 검토: 주요 변경사항과 호환성 문제를 파악하세요.
-
드라이버 및 클라이언트 업데이트: 연결하는 애플리케이션과 드라이버가 새 버전을 지원하는지 확인하세요.
-
비프로덕션 환경에서 테스트: 프로덕션 적용 전 스테이징 환경에서 업그레이드 테스트를 권장합니다.
업그레이드 후 작업
-
로그에서 오류 확인:
sudo tail -f /var/log/mongodb/mongod.log
-
데이터베이스 무결성 검사:
MongoDB 셸에서 각 데이터베이스에 대해 다음 명령 실행:
db.runCommand( { dbCheck: 1 } )
-
GUI 도구 업데이트: MongoDB Compass 등 사용 시 최신 버전으로 업데이트하세요.
-
백업 전략 검토 및 업데이트: 새 버전에서 개선된 백업 방법이 있을 수 있습니다.
MongoDB 다운그레이드
업그레이드 후 문제가 발생하면 다운그레이드가 필요할 수 있습니다. 신중히 진행하세요:
- MongoDB 서비스 중지
- 새 패키지 제거
- 이전 버전 패키지 설치
- 업그레이드 전 백업에서 복원
메이저 버전 간 다운그레이드는 데이터 포맷 차이로 인해 복잡할 수 있습니다.
일반적인 문제 해결
신중한 설치와 유지보수에도 불구하고 MongoDB 사용 중 문제를 겪을 수 있습니다. 이 섹션에서는 흔한 문제와 해결책을 다룹니다.
권한 문제
-
문제: MongoDB 접근 시 "Permission denied" 오류 발생
해결책:
-
MongoDB 데이터 디렉터리 소유권 확인 및 수정:
sudo chown -R mongodb:mongodb /var/lib/mongodb
-
MongoDB 로그 파일 권한 확인 및 수정:
sudo chown mongodb:mongodb /var/log/mongodb/mongod.log ```2. **문제**: Ubuntu 사용자로 MongoDB에 접근할 수 없음.
해결 방법:
- 사용자를 MongoDB 그룹에 추가하세요:
sudo usermod -aG mongodb $USER
- 변경 사항을 적용하려면 로그아웃 후 다시 로그인하세요.
-
연결 문제
-
문제: "Connection refused" 오류 발생.
해결 방법:
- MongoDB가 실행 중인지 확인하세요:
sudo systemctl status mongod
- 실행 중이 아니면 시작하세요:
sudo systemctl start mongod
mongod.conf
에서 MongoDB가 올바른 주소를 수신 대기하는지 확인하세요:net: port: 27017 bindIp: 127.0.0.1
- MongoDB가 실행 중인지 확인하세요:
-
문제: 원격 연결 불가.
해결 방법:
mongod.conf
에서 MongoDB가 모든 인터페이스(0.0.0.0)에 바인딩되어 있는지 확인하세요.- 방화벽이 포트 27017에 대한 연결을 허용하는지 확인하세요.
- 인증을 사용하는 경우 올바르게 설정되었는지 확인하세요.
성능 문제
-
문제: 쿼리 속도가 느리거나 전반적인 성능 저하.
해결 방법:
explain()
메서드를 사용하여 쿼리 성능을 분석하세요:db.collection.find(<query>).explain("executionStats")
- 적절한 인덱싱을 확인하세요:
db.collection.createIndex({ field: 1 })
- 시스템 자원(CPU, RAM, 디스크 I/O) 병목 현상을 점검하세요.
-
문제: 높은 메모리 사용량.
해결 방법:
mongod.conf
에서 WiredTiger 캐시 크기를 조정하세요:storage: wiredTiger: engineConfig: cacheSizeGB: 1
- 메모리 사용량을 줄이도록 쿼리를 최적화하세요.
데이터베이스 손상
-
문제: 데이터베이스 파일이 손상됨.
해결 방법:
- MongoDB를 중지하세요:
sudo systemctl stop mongod
- 데이터베이스를 복구하세요:
mongod --repair --dbpath /var/lib/mongodb
- 복구에 실패하면 최근 백업에서 복원하세요.
- MongoDB를 중지하세요:
로그 파일 분석
MongoDB 로그는 문제 해결에 유용한 정보를 제공합니다:
-
로그 파일의 마지막 100줄 보기:
sudo tail -n 100 /var/log/mongodb/mongod.log
-
오류 메시지 검색:
sudo grep "ERROR" /var/log/mongodb/mongod.log
자주 발생하는 오류 메시지
-
"Operation not permitted": 주로 SELinux 또는 AppArmor 관련 문제입니다. 상태를 확인하고 MongoDB 작업을 허용하도록 설정하세요.
-
"No space left on device": 디스크 공간을 확인하고 필요 시 공간을 확보하세요.
-
"too many open files": 시스템의 열린 파일 제한을 늘리세요:
sudo ulimit -n 64000
추가 도움 요청
문제를 해결할 수 없는 경우:
- 공식 MongoDB 문서를 확인하세요.
- MongoDB 커뮤니티 포럼을 검색하세요.
- MongoDB JIRA에서 알려진 문제를 검토하세요.
- 상용 라이선스가 있다면 MongoDB 지원팀에 문의하세요.
모범 사례 및 보안 고려사항
안정적이고 안전한 MongoDB 설치를 위해 모범 사례를 구현하고 보안을 우선시하는 것이 중요합니다. 이 섹션에서는 MongoDB 배포를 최적화하기 위한 주요 권장 사항을 다룹니다.
보안 권장 사항
-
인증 활성화:
- 운영 환경에서는 항상 인증을 사용하세요.
- 특정 역할과 권한을 가진 개별 사용자 계정을 생성하세요.
use admin db.createUser( { user: "adminUser", pwd: "securePassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
-
접근 제어 활성화:
mongod.conf
파일에서authorization: enabled
로 설정하세요.
-
TLS/SSL 암호화 사용:
- 모든 네트워크 연결에 대해 TLS/SSL을 사용하도록 MongoDB를 구성하세요.
mongod.conf
에서:net: ssl: mode: requireSSL PEMKeyFile: /path/to/mongodb.pem
-
네트워크 보안 구현:
- 방화벽을 사용하여 MongoDB 포트 접근을 제한하세요.
- 원격 접속 시 VPN 사용을 고려하세요.
-
정기적인 보안 감사:
- 사용자 계정과 권한을 주기적으로 검토하세요.
- MongoDB 내장 보안 체크리스트를 사용하세요:
db.adminCommand( { getCmdLineOpts: 1 } )
-
MongoDB 최신 상태 유지:
- 보안 패치를 적용하기 위해 최신 안정 버전으로 정기적으로 업데이트하세요.
성능 최적화 팁
-
적절한 인덱싱:
- 쿼리를 지원하는 인덱스를 생성하세요:
db.collection.createIndex({ field: 1 })
explain()
메서드로 쿼리 성능을 분석하세요.
- 쿼리를 지원하는 인덱스를 생성하세요:
-
적절한 쓰기 우선순위 사용:
- 데이터 안전성과 성능 간 균형을 맞추세요:
db.collection.insertOne({ ... }, { writeConcern: { w: 1, j: true } })
- 데이터 안전성과 성능 간 균형을 맞추세요:
-
스키마 설계 최적화:
- 가장 빈번한 쿼리를 지원하도록 스키마를 설계하세요.
- 자주 접근하는 관련 데이터를 임베딩하는 것을 고려하세요.
-
시스템 자원 모니터링 및 조정:
- 작업 세트에 충분한 RAM을 확보하세요.
- I/O 성능 향상을 위해 SSD 저장소를 사용하세요.
-
복잡한 쿼리에 집계 사용:
- 효율적인 데이터 처리를 위해 집계 파이프라인을 활용하세요:
db.collection.aggregate([ { $match: { ... } }, { $group: { ... } }, { $sort: { ... } } ])
- 효율적인 데이터 처리를 위해 집계 파이프라인을 활용하세요:
백업 및 재해 복구
-
정기 백업:
- 자동화된 정기 백업을 구현하세요.
- 복원 절차를 주기적으로 테스트하세요.
-
복제 구현:
- 고가용성과 데이터 중복성을 위해 복제 세트를 사용하세요.
-
재해 복구 계획:
- 재해 복구 계획을 수립하고 문서화하세요.
- 복구 시나리오를 정기적으로 연습하세요.
모니터링 및 로깅
-
모니터링 설정:
- MongoDB Cloud Manager 또는 기타 모니터링 도구를 사용하세요.
- 초당 작업 수, 연결 수, 메모리 사용량 등 주요 지표를 모니터링하세요.
-
적절한 로깅 구성:
- 느린 쿼리 로깅을 활성화하세요:
operationProfiling: slowOpThresholdMs: 100 mode: slowOp
- 느린 쿼리 로깅을 활성화하세요:
-
로그 회전:
- 로그 파일 크기 관리를 위해 로그 회전을 구현하세요.
개발 모범 사례
-
커넥션 풀링 사용:
- 애플리케이션에서 커넥션 풀링을 구현하여 데이터베이스 연결을 효율적으로 관리하세요.
-
적절한 오류 처리 구현:
- 애플리케이션 코드에서 데이터베이스 오류를 적절히 처리하세요.
-
적절한 데이터 타입 사용:
- 저장 및 쿼리 성능 최적화를 위해 올바른 BSON 타입을 선택하세요.
-
입력 검증:
- 인젝션 공격 및 데이터 손상을 방지하기 위해 입력 검증을 구현하세요.
정기 유지보수
-
데이터베이스 압축:
- 디스크 공간 확보를 위해 정기적으로 데이터베이스를 압축하세요:
db.runCommand( { compact: 'collection_name' } )
- 디스크 공간 확보를 위해 정기적으로 데이터베이스를 압축하세요:
-
데이터베이스 무결성 검사:
- 주기적으로 무결성 검사를 실행하세요:
db.runCommand( { dbCheck: 1 } )
- 주기적으로 무결성 검사를 실행하세요:
자주 묻는 질문 (FAQ)
Ubuntu에서 MongoDB를 설치하고 사용하는 데 자주 묻는 질문입니다:
Q: 내가 사용 중인 MongoDB 버전을 어떻게 확인하나요?
A: 터미널에서 다음 명령어를 사용하세요:
mongod --version
또는 MongoDB 셸 내에서는:
db.version()
Q: 같은 Ubuntu 시스템에 MongoDB 여러 버전을 설치할 수 있나요?
A: 가능하지만 충돌이 발생할 수 있어 일반적으로 권장하지 않습니다. 여러 버전을 실행해야 한다면 Docker 컨테이너를 사용해 격리하는 것을 고려하세요.
Q: MongoDB 사용자 비밀번호를 어떻게 변경하나요?
A: MongoDB 셸에서 다음 명령어로 비밀번호를 변경할 수 있습니다:
db.changeUserPassword("username", "newPassword")
Q: MongoDB 서버에 원격 접속을 어떻게 활성화하나요?
A: mongod.conf
파일에서 bindIp
를 0.0.0.0
으로 변경하고, 방화벽이 포트 27017 연결을 허용하는지 확인한 후 MongoDB를 재시작하세요. 다만, 이 작업 전에 적절한 보안 조치를 반드시 구현해야 합니다.
Q: MongoDB Community와 Enterprise 에디션의 차이점은 무엇인가요?
A: MongoDB Community는 무료 오픈소스이며, Enterprise는 LDAP 인증, 감사, 암호화 저장 엔진 등 추가 기능을 제공합니다. 대부분 사용자에게는 Community 에디션으로 충분합니다.
Q: MongoDB 데이터베이스를 어떻게 백업하나요?
A: mongodump
유틸리티를 사용하여 데이터베이스를 바이너리 형식으로 내보낼 수 있습니다:
mongodump --out /path/to/backup/directory
Q: MongoDB 성능을 어떻게 향상시킬 수 있나요?
A: 성능 향상 방법은 다음과 같습니다:
- 적절한 인덱싱
- 적절한 쓰기 우선순위 사용
- 스키마 설계 최적화
- 충분한 시스템 자원 확보(특히 RAM)
- 정기적인 유지보수(압축 및 복구 작업 실행)
Q: MongoDB가 시작되지 않을 때 어떻게 해야 하나요?
A: MongoDB 로그 파일(보통 /var/log/mongodb/mongod.log
)에서 오류 메시지를 확인하세요. 일반적인 문제는 권한 문제, 포트 충돌, 데이터 파일 손상 등이 있습니다.
Q: 프로그래밍 언어에서 MongoDB에 어떻게 연결하나요?
A: 대부분의 프로그래밍 언어는 공식 또는 커뮤니티 지원 MongoDB 드라이버를 제공합니다. 예를 들어 Python에서는 pymongo
를 사용합니다:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
Q: 개발 환경에서 인증 없이 MongoDB를 사용하는 것이 안전한가요?
A: 가능은 하지만, 개발 환경에서도 항상 인증을 사용하는 것이 권장됩니다. 이는 개발 시에도 운영 환경의 보안 요구사항을 준수하는 데 도움이 됩니다.
Q: MongoDB 데이터베이스를 얼마나 자주 백업해야 하나요?
A: 백업 빈도는 사용 사례와 데이터 변경 빈도에 따라 다릅니다. 중요한 애플리케이션의 경우 연속 백업 또는 최소한 일일 백업을 고려하세요.
Q: MongoDB 기본 포트(27017)를 변경할 수 있나요?
A: 네, mongod.conf
파일에서 기본 포트를 변경할 수 있습니다:
net:
port: 27018
변경 후에는 MongoDB를 재시작해야 합니다.