CentOS 7에 MongoDB를 설치하는 방법
소개
MongoDB는 무료이며 오픈 소스인 문서 지향 데이터베이스입니다. 기존의 테이블 기반 관계형 데이터베이스 구조에 의존하지 않기 때문에 NoSQL 데이터베이스로 분류됩니다. 대신 동적 스키마가 있는 JSON과 유사한 문서를 사용합니다. 관계형 데이터베이스와 달리 MongoDB는 데이터베이스에 데이터를 추가하기 전에 미리 정의된 스키마가 필요하지 않습니다. 업데이트된 스키마로 새 데이터베이스를 설정하지 않고도 필요할 때마다 언제든지 스키마를 변경할 수 있습니다.
이 튜토리얼에서는 CentOS 7 서버에 MongoDB Community Edition을 설치합니다.
전제 조건
이 튜토리얼을 따르기 전에 다음이 있는지 확인하십시오.
- 루트가 아닌
sudo
사용 사용자가 있는 CentOS 7 서버. 지침은 CentOS 7을 사용한 초기 서버 설정 자습서를 참조하십시오.
1단계 - MongoDB 리포지토리 추가
mongodb-org
패키지는 CentOS의 기본 리포지토리 내에 존재하지 않습니다. 그러나 MongoDB는 전용 리포지토리를 유지합니다. 우리 서버에 추가합시다.
vi
편집기를 사용하여 CentOS용 패키지 관리 유틸리티인 yum
용 .repo
파일을 만듭니다.
- sudo vi /etc/yum.repos.d/mongodb-org.repo
그런 다음 MongoDB 설명서의 Red Hat에 설치 섹션을 방문하여 최신 안정 릴리스에 대한 리포지토리 정보를 파일에 추가합니다.
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
ESC
키를 눌러 변경 사항을 파일에 저장한 다음 :wq
를 입력하고 ENTER
를 누르십시오.
계속하기 전에 MongoDB 리포지토리가 yum
유틸리티 내에 있는지 확인해야 합니다. repolist
명령은 활성화된 리포지토리 목록을 표시합니다.
- yum repolist
Output. . .
repo id repo name
base/7/x86_64 CentOS-7 - Base
extras/7/x86_64 CentOS-7 - Extras
mongodb-org-6.0/7/x86_64 MongoDB Repository
updates/7/x86_64 CentOS-7 - Updates
. . .
MongoDB Repository
가 있으면 설치를 진행할 수 있습니다.
2단계 - MongoDB 설치
yum
유틸리티를 사용하여 타사 저장소에서 mongodb-org
패키지를 설치할 수 있습니다.
- sudo yum install mongodb-org
두 개의 Is this ok [y/N]:
프롬프트가 있습니다. 첫 번째는 MongoDB 패키지 설치를 허용하고 두 번째는 GPG 키를 가져옵니다. MongoDB 게시자는 소프트웨어에 서명하고 yum
은 키를 사용하여 다운로드한 패키지의 무결성을 확인합니다. 각 프롬프트에서 Y
를 입력한 다음 ENTER
키를 누릅니다.
다음으로 systemctl
유틸리티를 사용하여 MongoDB 서비스를 시작합니다.
- sudo systemctl start mongod
이 자습서에서는 사용하지 않지만 reload
및 stop
명령을 사용하여 MongoDB 서비스의 상태를 변경할 수도 있습니다.
reload
명령은 mongod
프로세스가 /etc/mongod.conf
구성 파일을 읽고 다시 시작할 필요 없이 변경 사항을 적용하도록 요청합니다.
- sudo systemctl reload mongod
stop
명령은 실행 중인 모든 mongod
프로세스를 중지합니다.
- sudo systemctl stop mongod
systemctl
유틸리티는 start
명령을 실행한 후 결과를 제공하지 않았지만 mongod.log의 끝을 보면 서비스가 시작되었음을 확인할 수 있습니다. code> 파일을
tail
명령으로:
- sudo tail /var/log/mongodb/mongod.log
Output. . .
[initandlisten] waiting for connections on port 27017
연결 대기 중 출력은 MongoDB가 성공적으로 시작되었으며 MongoDB 셸을 사용하여 데이터베이스 서버에 액세스할 수 있음을 확인합니다.
- mongo
참고: MongoDB Shell을 시작하면 다음과 같은 경고가 표시될 수 있습니다.
** 경고:** soft rlimits가 너무 낮습니다. rlimits는 4096개 프로세스, 64000개 파일로 설정됩니다. 프로세스 수는 최소 32000: 파일 수의 0.5배여야 합니다.
MongoDB는 스레드 애플리케이션입니다. 워크로드를 처리하기 위해 추가 프로세스를 시작할 수 있습니다. 이 경고는 MongoDB가 가장 효율적이 되려면 스핀업 권한이 부여된 프로세스 수가 지정된 시간에 열 수 있는 파일 수의 절반이어야 한다고 명시합니다. 경고를 해결하려면 20-nproc.conf
파일을 편집하여 mongod
에 대한 processes
소프트 rlimit 값을 변경하십시오.
- sudo vi /etc/security/limits.d/20-nproc.conf
파일 끝에 다음 줄을 추가합니다.
. . .
mongod soft nproc 32000
ESC
키를 눌러 변경 사항을 저장했는지 확인한 다음 :wq
를 입력하고 ENTER
를 누르십시오.
MongoDB에서 새 제한을 사용할 수 있도록 하려면 systemctl
유틸리티를 사용하여 MongoDB를 다시 시작하십시오.
- sudo systemctl restart mongod
그런 다음 MongoDB Shell에 연결할 때 경고가 더 이상 존재하지 않아야 합니다.
셸에서 MongoDB와 상호 작용하는 방법을 알아보려면 db
개체에 대한 메서드 목록을 제공하는 db.help()
메서드의 출력을 검토할 수 있습니다.
- db.help()
OutputDB methods:
db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ]
db.auth(username, password)
db.cloneDatabase(fromhost)
db.commandHelp(name) returns the help for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, { size : ..., capped : ..., max : ... } )
db.createUser(userDocument)
db.currentOp() displays currently executing operations in the db
db.dropDatabase()
. . .
백그라운드에서 실행 중인 mongod
프로세스는 그대로 두고 exit
명령을 사용하여 셸을 종료합니다.
- exit
OutputBye
3단계 – 시작 확인
데이터베이스 기반 애플리케이션은 데이터베이스 없이 작동할 수 없기 때문에 MongoDB 데몬인 mongod
가 시스템과 함께 시작되도록 할 것입니다.
systemctl
유틸리티를 사용하여 시작 상태를 확인하십시오.
- systemctl is-enabled mongod; echo $?
0 출력은 우리가 원하는 활성화된 데몬을 확인합니다. 그러나 1은 시작되지 않는 비활성화된 데몬을 확인합니다.
Output. . .
enabled
0
데몬이 비활성화된 경우 systemctl
유틸리티를 사용하여 활성화하십시오.
- sudo systemctl enable mongod
이제 시스템 재부팅 후 자동으로 시작되는 실행 중인 MongoDB 인스턴스가 있습니다.
4단계 – 예제 데이터 세트 가져오기(선택 사항)
다른 데이터베이스 서버와 달리 MongoDB는 test
데이터베이스에 데이터를 제공하지 않습니다. 프로덕션 데이터를 사용하여 새로운 소프트웨어를 실험하고 싶지 않기 때문에 MongoDB 예제에서 샘플 데이터 세트를 다운로드합니다. 이 JSON 문서에는 MongoDB와의 상호 작용을 연습하고 민감한 데이터에 대한 피해를 방지하는 데 사용할 식당 모음이 포함되어 있습니다.
쓰기 가능한 디렉토리로 이동하여 시작하십시오.
- cd /tmp
curl
명령과 MongoDB의 링크를 사용하여 JSON 파일을 다운로드합니다.
- curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
mongoimport
명령은 테스트 데이터베이스에 데이터를 삽입합니다. --db
플래그는 사용할 데이터베이스를 정의하고 --collection
플래그는 데이터베이스에서 정보를 저장할 위치를 지정하고 --file
플래그는 가져오기 작업을 수행할 파일을 명령에 알려줍니다.
- mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json
출력은 primer-dataset.json
파일에서 데이터 가져오기를 확인합니다.
Outputconnected to: localhost
imported 25359 documents
샘플 데이터 세트가 있으면 이에 대해 쿼리를 수행할 수 있습니다.
MongoDB 셸을 다시 시작합니다.
- mongo
셸은 기본적으로 데이터를 가져온 test
데이터베이스를 선택합니다.
find()
메서드로 레스토랑 컬렉션을 쿼리하여 데이터세트의 모든 레스토랑 목록을 표시합니다. 컬렉션에는 25,000개 이상의 항목이 포함되어 있으므로 선택적 limit()
메서드를 사용하여 쿼리 출력을 지정된 수로 줄이십시오. 또한 pretty()
메서드는 새 줄과 들여쓰기를 사용하여 정보를 사람이 더 쉽게 읽을 수 있도록 합니다.
- db.restaurants.find().limit(1).pretty()
Output{
"_id" : ObjectId("57e0443b46af7966d1c8fa68"),
"address" : {
"building" : "1007",
"coord" : [
-73.856077,
40.848447
],
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"borough" : "Bronx",
"cuisine" : "Bakery",
"grades" : [
{
"date" : ISODate("2014-03-03T00:00:00Z"),
"grade" : "A",
"score" : 2
},
{
"date" : ISODate("2013-09-11T00:00:00Z"),
"grade" : "A",
"score" : 6
},
{
"date" : ISODate("2013-01-24T00:00:00Z"),
"grade" : "A",
"score" : 10
},
{
"date" : ISODate("2011-11-23T00:00:00Z"),
"grade" : "A",
"score" : 9
},
{
"date" : ISODate("2011-03-10T00:00:00Z"),
"grade" : "B",
"score" : 14
}
],
"name" : "Morris Park Bake Shop",
"restaurant_id" : "30075445"
}
샘플 데이터 세트를 계속 사용하여 MongoDB에 익숙해지거나 db.restaurants.drop()
메서드로 삭제할 수 있습니다.
- db.restaurants.drop()
마지막으로 exit
명령으로 셸을 종료합니다.
- exit
OutputBye
결론
이 자습서에서는 타사 리포지토리를 yum
에 추가하고 MongoDB 데이터베이스 서버를 설치하고 샘플 데이터 세트를 가져오고 간단한 쿼리를 수행했습니다. 컬렉션
으로 데이터베이스를 만들고, 많은 문서
로 데이터베이스를 채우고, 강력한 애플리케이션을 구축하는 등 MongoDB로 할 수 있는 일이 훨씬 더 많습니다. MongoDB에 대해 자세히 알아보려면 MongoDB에 대한 시리즈 자습서를 확인하십시오.