MongoDB에서 show dbs 명령어를 실행했는데 방금 생성한 데이터베이스가 목록에 나타나지 않아 당황한 적이 있으신가요? 그렇다면 걱정하지 않으셔도 됩니다. 이것은 MongoDB의 정상적인 동작 방식 때문입니다.
데이터베이스가 표시되지 않는 원인
show dbs 명령어가 새로 만든 데이터베이스를 보여주지 않는 가장 일반적인 이유는 해당 데이터베이스 안에 컬렉션(collection)과 문서(document)를 아직 생성하지 않았기 때문입니다.
MongoDB에서는 use 명령어로 데이터베이스를 전환하더라도 실제 데이터가 저장되기 전까지는 디스크에 데이터베이스 파일이 생성되지 않습니다. 즉, 최소 하나의 컬렉션에 문서를 삽입해야만 그 데이터베이스가 목록에 나타납니다.
문제 상황 재현하기
먼저 web이라는 이름의 데이터베이스를 생성해 보겠습니다.
> use web; switched to db web
이제 전체 데이터베이스 목록을 조회하는 명령어를 실행합니다.
> show dbs;
실행 결과는 다음과 같습니다.
admin 0.001GB config 0.000GB local 0.000GB my 0.001GB sample 0.001GB sampleDemo 0.000GB studentSearch 0.000GB test 0.010GB university 0.000GB
출력 결과를 살펴보면 web 데이터베이스가 목록에 없는 것을 확인할 수 있습니다. 아직 해당 데이터베이스에 컬렉션을 생성하지 않았기 때문입니다.
해결 방법: 문서 삽입하기
web 데이터베이스를 목록에 표시하려면 해당 데이터베이스 안에 문서가 포함된 컬렉션을 생성해야 합니다. 아래와 같이 insertOne() 메서드를 사용하여 문서를 삽입해 보겠습니다.
> db.check.insertOne({"ClientName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb806c2623186894665ae35")
}
이제 find() 메서드를 사용하여 컬렉션에 저장된 문서를 확인할 수 있습니다.
> db.check.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cb806c2623186894665ae35"), "ClientName" : "John" }
문서 삽입이 완료되었으니 다시 한번 전체 데이터베이스 목록을 조회해 보겠습니다.
> show dbs;
실행 결과는 다음과 같습니다.
admin 0.001GB config 0.000GB local 0.000GB my 0.001GB sample 0.001GB sampleDemo 0.000GB studentSearch 0.000GB test 0.010GB university 0.000GB web 0.000GB
위 출력 결과에서 확인할 수 있듯이, 이제 web 데이터베이스가 목록에 정상적으로 표시됩니다.
정리
MongoDB는 지연 생성(lazy creation) 방식으로 동작합니다. use 명령어만으로는 데이터베이스가 실제로 생성되지 않으며, 컬렉션에 최소 하나의 문서를 삽입해야 비로소 데이터베이스가 물리적으로 생성되고 show dbs 목록에 나타납니다. 따라서 새 데이터베이스가 보이지 않는다면 먼저 문서를 삽입했는지 확인해 보세요.