MongoDB에서 인덱스를 생성할 때 데이터베이스 작업이 블로킹되지 않도록 하려면 createIndex() 메서드에 background: true 옵션을 설정하면 됩니다. 이렇게 하면 인덱스 빌드가 백그라운드에서 진행되는 동안에도 컬렉션에 대한 읽기 및 쓰기 작업을 계속 수행할 수 있습니다.
백그라운드 인덱스 생성 문법
아래와 같은 기본 문법을 사용하여 백그라운드에서 인덱스를 생성할 수 있습니다.
db.yourCollectionName.createIndex({"yourFieldName1":1,"yourFieldName2":1},{background: true} );실제 적용 예시
위의 문법을 실제로 적용하여 백그라운드 옵션과 함께 인덱스를 생성해 보겠습니다.
> db.indexCreationDemo.createIndex({"StudentName":1,"StudentAge":1},{background: true} );
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}실행 결과를 살펴보면, 컬렉션이 존재하지 않아 자동으로 생성되었고(createdCollectionAutomatically: true), 기존 인덱스 1개에서 새 인덱스가 추가되어 총 2개가 되었음을 확인할 수 있습니다.
생성된 인덱스 확인하기
생성된 인덱스 목록을 조회하려면 getIndexes() 메서드를 사용합니다.
> db.indexCreationDemo.getIndexes();
위 명령을 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "web.indexCreationDemo"
},
{
"v" : 2,
"key" : {
"StudentName" : 1,
"StudentAge" : 1
},
"name" : "StudentName_1_StudentAge_1",
"ns" : "web.indexCreationDemo",
"background" : true
}
]출력 결과에서 볼 수 있듯이, 기본적으로 존재하는 _id 인덱스 외에 StudentName과 StudentAge 필드로 구성된 복합 인덱스가 생성되었으며, 해당 인덱스 항목에 "background" : true 속성이 포함되어 있어 백그라운드 방식으로 빌드되었음을 알 수 있습니다.
참고 사항
MongoDB 4.2 버전부터는 향상된 인덱스 빌드 프로세스가 도입되어 background 옵션이 더 이상 사용되지 않습니다(deprecated). 최신 버전에서는 이 옵션을 지정해도 무시되며, 모든 인덱스 빌드가 기본적으로 최적화된 방식으로 수행됩니다. 따라서 구버전과의 호환성을 위해서만 이 옵션을 사용하는 것이 좋습니다.