MongoDB 프로파일러 출력에서 '명령(command)' 작업이란 무엇일까?
MongoDB 데이터베이스 프로파일러(database profiler)의 출력 결과를 분석하다 보면, 특정 작업들이 command(명령) 유형으로 분류되어 기록되는 것을 확인할 수 있습니다. 프로파일러에서 'command' 작업으로 처리되는 대표적인 연산은 다음과 같습니다.
1. count 2. findAndModify 3. aggregate
즉, 단순한 읽기(find)나 쓰기(insert, update) 연산과 달리, 위 세 가지 연산은 내부적으로 데이터베이스 명령(command) 형태로 실행되기 때문에 프로파일러 로그에 'command'로 표시됩니다.
MongoDB count 예제로 직접 확인하기
그럼 실제 예제를 통해 count 명령이 어떻게 동작하는지 단계별로 살펴보겠습니다.
1단계: 문서가 포함된 컬렉션 생성
먼저 insertOne() 메서드를 사용하여 demo443 컬렉션에 문서(document)를 차례로 삽입합니다.
> db.demo443.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e78d281bbc41e36cc3caeb9")
}
> db.demo443.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e78d285bbc41e36cc3caeba")
}
> db.demo443.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e78d288bbc41e36cc3caebb")
}
2단계: find() 메서드로 전체 문서 조회
find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회합니다.
> db.demo443.find();
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{ "_id" : ObjectId("5e78d281bbc41e36cc3caeb9"), "Name" : "Chris" }
{ "_id" : ObjectId("5e78d285bbc41e36cc3caeba"), "Name" : "Bob" }
{ "_id" : ObjectId("5e78d288bbc41e36cc3caebb"), "Name" : "David" }
3단계: count 명령 실행
이제 컬렉션의 문서 개수를 세는 count 명령을 실행해 보겠습니다.
> db.demo443.count();
실행 결과는 다음과 같습니다.
3
컬렉션에 3개의 문서가 저장되어 있으므로 count 명령은 정확히 3을 반환합니다.
참고 사항
MongoDB 최신 버전(4.0 이상)에서는 count() 메서드가 deprecated(사용 중단 권고) 상태입니다. 따라서 정확한 개수가 필요하면 countDocuments(), 근사치면 충분한 경우 estimatedDocumentCount() 사용을 권장합니다. 또한 프로파일러는 기본적으로 비활성화되어 있으며, db.setProfilingLevel() 명령으로 활성화한 후 system.profile 컬렉션에서 느린 쿼리와 command 작업 이력을 확인할 수 있습니다.